Grid環境構築用のChefリポジトリです。
Revision | 2069bfa6928975424efcb5833d8d59374f732ad0 (tree) |
---|---|
Time | 2018-09-17 12:14:23 |
Author | whitestar <whitestar@user...> |
Commiter | whitestar |
adds autopilot features.
@@ -1,5 +1,9 @@ | ||
1 | 1 | # docker-grid CHANGELOG |
2 | 2 | |
3 | +1.3.0 | |
4 | +----- | |
5 | +- adds autopilot features. | |
6 | + | |
3 | 7 | 1.2.1 |
4 | 8 | ----- |
5 | 9 | - adds docker-compose cleanup before installing it. |
@@ -0,0 +1,22 @@ | ||
1 | +GEM | |
2 | + remote: https://rubygems.org/ | |
3 | + specs: | |
4 | + chef-api (0.8.0) | |
5 | + logify (~> 0.1) | |
6 | + mime-types | |
7 | + logify (0.2.0) | |
8 | + mime-types (3.2.2) | |
9 | + mime-types-data (~> 3.2015) | |
10 | + mime-types-data (3.2018.0812) | |
11 | + stove (6.0.0) | |
12 | + chef-api (~> 0.5) | |
13 | + logify (~> 0.2) | |
14 | + | |
15 | +PLATFORMS | |
16 | + ruby | |
17 | + | |
18 | +DEPENDENCIES | |
19 | + stove | |
20 | + | |
21 | +BUNDLED WITH | |
22 | + 1.16.0 |
@@ -60,6 +60,7 @@ This cookbook sets up Docker engine etc. | ||
60 | 60 | |`['docker-grid']['dind-compose']['data_dir']`|String|persistent data directory.|`"#{node['docker-grid']['dind-compose']['app_dir']}/data"`| |
61 | 61 | |`['docker-grid']['dind-compose']['config']`|Hash|`docker-compose.yml` configurations.|See `attributes/default.rb`| |
62 | 62 | |`['docker-grid']['engine']['skip_setup']`|Boolean||`false`| |
63 | +|`['docker-grid']['engine']['autopilot']`|Hash|docker-engin autopilot configurations.|See `attributes/default.rb`| | |
63 | 64 | |`['docker-grid']['engine']['version_on_centos']`|String|Docker version for CentOS. `''` (empty) means the latest version.|`'17.12.1.ce-1'`| |
64 | 65 | |`['docker-grid']['engine']['version_on_debian']`|String|Docker version for Debian. `''` (empty) means the latest version.|`'17.12.1~ce-0'`| |
65 | 66 | |`['docker-grid']['engine']['version_on_ubuntu']`|String|Docker version for Ubuntu. `''` (empty) means the latest version.|`'17.12.1~ce-0'`| |
@@ -73,7 +74,9 @@ This cookbook sets up Docker engine etc. | ||
73 | 74 | |`['docker-grid']['engine']['users_allow']`|Array|Non-root users allowed to manage Docker daemon.|`[]`| |
74 | 75 | |`['docker-grid']['registry']['with_ssl_cert_cookbook']`|Boolean|If this attribute is true, `node['docker-grid']['registry']['docker-compose']['config']` are are overridden by the following `common_name` attributes.|`false`| |
75 | 76 | |`['docker-grid']['registry']['ssl_cert']['common_name']`|String|Registry server common name for TLS|`node['fqdn']`| |
77 | +|`['docker-grid']['registry']['server']['autopilot']`|Hash|Resigtry server autopilot configurations.|See `attributes/default.rb`| | |
76 | 78 | |`['docker-grid']['registry']['server']['config']`|Hash|Registry server configurations.|See `attributes/default.rb`| |
79 | +|`['docker-grid']['registry']['docker-compose']['autopilot']`|Hash|Registry docker-compose autopilot configurations.|See `attributes/default.rb`| | |
77 | 80 | |`['docker-grid']['registry']['docker-compose']['app_dir']`|String||`"#{node['docker-grid']['compose']['app_dir']}/registry"`| |
78 | 81 | |`['docker-grid']['registry']['docker-compose']['host_data_volume']`|String|Data directory path on the host filesystem or `nil` (unset).|`'/var/lib/docker-registry'`| |
79 | 82 | |`['docker-grid']['registry']['docker-compose']['config_format_version']`|String|`docker-compose.yml` format version. `'1'` or `'2'`|`'1'`| |
@@ -3,6 +3,58 @@ require 'rubocop/rake_task' | ||
3 | 3 | require 'foodcritic' |
4 | 4 | require 'stove/rake_task' |
5 | 5 | |
6 | +tpl_cookbook = '00cookbook' | |
7 | +cookbook_name = File.basename(Dir.pwd) | |
8 | + | |
9 | +desc 'Initialize project' | |
10 | +task :init do | |
11 | + next if cookbook_name == tpl_cookbook | |
12 | + | |
13 | + [ | |
14 | + '.foodcritic', | |
15 | + '.rubocop.yml', | |
16 | + 'Berksfile', | |
17 | + 'concourse.yml', | |
18 | + 'fly-vars.yml', | |
19 | + 'fly-vars.local.yml', | |
20 | + 'Gemfile', | |
21 | + 'Gemfile.lock', | |
22 | + 'version', | |
23 | + ].each {|conf| | |
24 | + sh "cp ../#{tpl_cookbook}/#{conf} ./" unless File.exist?(conf) | |
25 | + } | |
26 | + | |
27 | + ruby [ | |
28 | + %(-pne '$_.gsub!(/^cookbook-name: .*$/, "cookbook-name: #{cookbook_name}")'), | |
29 | + '-i fly-vars.local.yml', | |
30 | + ].join(' ') | |
31 | +end | |
32 | + | |
33 | +desc 'Update project' | |
34 | +task :update do | |
35 | + next if cookbook_name == tpl_cookbook | |
36 | + | |
37 | + [ | |
38 | + 'Rakefile', | |
39 | + 'concourse.yml', | |
40 | + 'fly-vars.yml', | |
41 | + 'Gemfile', | |
42 | + 'Gemfile.lock', | |
43 | + ].each {|conf| | |
44 | + sh "cp ../#{tpl_cookbook}/#{conf} ./" | |
45 | + } | |
46 | +end | |
47 | + | |
48 | +desc 'fly set-pipeline' | |
49 | +task :'set-pipeline' do | |
50 | + sh [ | |
51 | + "fly -t $CC_TARGET sp -p #{cookbook_name}-cookbook -c concourse.yml", | |
52 | + '-l fly-vars.yml -l fly-vars.local.yml -l ~/sec/credentials-prod.yml', | |
53 | + ].join(' ') | |
54 | +end | |
55 | +desc 'rake set-pipeline alias' | |
56 | +task sp: 'set-pipeline' | |
57 | + | |
6 | 58 | namespace :style do |
7 | 59 | desc 'Run Ruby style checks' |
8 | 60 | RuboCop::RakeTask.new(:ruby) do |t| |
@@ -87,6 +87,14 @@ default['docker-grid']['dind-compose']['config'] = { | ||
87 | 87 | } |
88 | 88 | |
89 | 89 | default['docker-grid']['engine']['skip_setup'] = false |
90 | +default['docker-grid']['engine']['autopilot'] = { | |
91 | + 'enabled' => false, | |
92 | + 'log_dir' => '/var/log', | |
93 | + 'containers_prune_period' => '5 */4 * * *', | |
94 | + 'images_prune_period' => '10 */4 * * *', | |
95 | + 'volumes_prune_period' => '15 */4 * * *', | |
96 | +} | |
97 | + | |
90 | 98 | # dockerproject: 18.06.0.ce-3, 18.03.1.ce-1, 17.12.1.ce-1, 1.13.1-1 |
91 | 99 | # os-repository: yum list docker |
92 | 100 | # http://mirror.centos.org/centos/7.3.1611/extras/x86_64/Packages/ |
@@ -190,6 +198,12 @@ rootdirectory = node.value_for_platform( | ||
190 | 198 | 'default' => '/var/lib/docker-registry', |
191 | 199 | } |
192 | 200 | ) |
201 | +default['docker-grid']['registry']['server']['autopilot'] = { | |
202 | + 'enabled' => false, | |
203 | + 'log_dir' => '/var/log', | |
204 | + 'wait_time' => '120s', | |
205 | + 'docker-compose_opts' => '--no-ansi', | |
206 | +} | |
193 | 207 | default['docker-grid']['registry']['server']['config'] = { |
194 | 208 | 'version' => '0.1', |
195 | 209 | 'log' => { |
@@ -226,6 +240,13 @@ default['docker-grid']['registry']['server']['config'] = { | ||
226 | 240 | }, |
227 | 241 | }, |
228 | 242 | } |
243 | + | |
244 | +default['docker-grid']['registry']['docker-compose']['autopilot'] = { | |
245 | + 'enabled' => false, | |
246 | + 'log_dir' => '/var/log', | |
247 | + 'wait_time' => '180s', | |
248 | + 'docker-compose_opts' => '--no-ansi', | |
249 | +} | |
229 | 250 | default['docker-grid']['registry']['docker-compose']['app_dir'] = "#{node['docker-grid']['compose']['app_dir']}/registry" |
230 | 251 | # ./docker-compose.yml |
231 | 252 | default['docker-grid']['registry']['docker-compose']['config_format_version'] = '1' |
@@ -1,5 +1,4 @@ | ||
1 | 1 | --- |
2 | -# $ fly -t $CC_TARGET sp -p docker-grid-cookbook -c concourse.yml -l fly-vars.yml -l ~/sec/credentials-prod.yml | |
3 | 2 | resources: |
4 | 3 | - name: src-git |
5 | 4 | type: git |
@@ -59,6 +58,7 @@ jobs: | ||
59 | 58 | - -c |
60 | 59 | - | |
61 | 60 | cd ./src-git/cookbooks/((cookbook-name)) |
61 | + bundle config --local silence_root_warning 1 | |
62 | 62 | bundle install |
63 | 63 | rake |
64 | 64 | - name: publish-cookbook |
@@ -89,6 +89,7 @@ jobs: | ||
89 | 89 | echo '{"username":"((chef-username))","key":"/root/chef-client-key.pem"}' > /root/.stove |
90 | 90 | echo "$chef_client_key" > /root/chef-client-key.pem |
91 | 91 | cd ./src-git/cookbooks/((cookbook-name)) |
92 | + bundle config --local silence_root_warning 1 | |
92 | 93 | bundle install |
93 | 94 | rake publish |
94 | 95 | - put: src-git |
@@ -0,0 +1,2 @@ | ||
1 | +--- | |
2 | +cookbook-name: docker-grid |
@@ -1,3 +1,2 @@ | ||
1 | 1 | --- |
2 | -cookbook-name: docker-grid | |
3 | 2 | chefdk-version: 1.6.11 |
@@ -2,7 +2,7 @@ | ||
2 | 2 | # Cookbook Name:: docker-grid |
3 | 3 | # Recipe:: engine |
4 | 4 | # |
5 | -# Copyright 2016-2017, whitestar | |
5 | +# Copyright 2016-2018, whitestar | |
6 | 6 | # |
7 | 7 | # Licensed under the Apache License, Version 2.0 (the "License"); |
8 | 8 | # you may not use this file except in compliance with the License. |
@@ -31,12 +31,14 @@ if !override_apt_line.nil? && !override_apt_line.empty? \ | ||
31 | 31 | node.force_override['docker-grid']['dockerproject']['enable_new_repo'] = true |
32 | 32 | end |
33 | 33 | enable_new_repo = node['docker-grid']['dockerproject']['enable_new_repo'] |
34 | -docker_ver = node['docker-grid']['engine']['version'] | |
34 | + | |
35 | +engine_conf = node['docker-grid']['engine'] | |
36 | +docker_ver = engine_conf['version'] | |
35 | 37 | docker_ver = '' if docker_ver.nil? || docker_ver == 'latest' |
36 | -storage_driver = node['docker-grid']['engine']['storage-driver'] | |
37 | -userns_remap = node['docker-grid']['engine']['userns-remap'] | |
38 | +storage_driver = engine_conf['storage-driver'] | |
39 | +userns_remap = engine_conf['userns-remap'] | |
38 | 40 | |
39 | -if node['docker-grid']['engine']['skip_setup'] | |
41 | +if engine_conf['skip_setup'] | |
40 | 42 | log 'Skip the Docker Engine setup.' |
41 | 43 | return |
42 | 44 | end |
@@ -328,7 +330,7 @@ docker_opts = [] | ||
328 | 330 | docker_opts.push("--storage-driver=#{storage_driver}") if !storage_driver.nil? && !storage_driver.empty? |
329 | 331 | docker_opts.push("--userns-remap=#{userns_remap}") if !userns_remap.nil? && !userns_remap.empty? |
330 | 332 | |
331 | -extra_options = node['docker-grid']['engine']['daemon_extra_options'] | |
333 | +extra_options = engine_conf['daemon_extra_options'] | |
332 | 334 | # for docker-engine package on RHEL: remove '-H fd://' |
333 | 335 | # https://github.com/docker/docker/issues/22847 |
334 | 336 | if platform_family == 'rhel' || platform == 'debian' || (platform == 'ubuntu' && platform_version == '14.04') |
@@ -381,7 +383,7 @@ service 'docker' do | ||
381 | 383 | subscribes :restart, 'execute[update-ca-certificates]', :delayed |
382 | 384 | end |
383 | 385 | |
384 | -users = node['docker-grid']['engine']['users_allow'] | |
386 | +users = engine_conf['users_allow'] | |
385 | 387 | group 'docker' do |
386 | 388 | members users unless users.empty? |
387 | 389 | action :create |
@@ -402,3 +404,13 @@ end | ||
402 | 404 | action :create |
403 | 405 | end |
404 | 406 | } |
407 | + | |
408 | +# autopilot | |
409 | +srv = 'dockerd' | |
410 | +template "/etc/cron.d/#{srv}-local" do | |
411 | + source "etc/cron.d/#{srv}-local" | |
412 | + owner 'root' | |
413 | + group 'root' | |
414 | + mode '0644' | |
415 | + action :delete unless engine_conf['autopilot']['enabled'] | |
416 | +end |
@@ -90,3 +90,16 @@ template "#{conf_dir}/config.yml" do | ||
90 | 90 | mode '0644' |
91 | 91 | notifies :restart, "service[#{service_name}]" |
92 | 92 | end |
93 | + | |
94 | +# autopilot | |
95 | +srv = 'docker-reg-server' | |
96 | +template "/etc/cron.d/#{srv}-local" do | |
97 | + source "etc/cron.d/#{srv}-local" | |
98 | + owner 'root' | |
99 | + group 'root' | |
100 | + mode '0644' | |
101 | + variables( | |
102 | + service_name: service_name | |
103 | + ) | |
104 | + action :delete unless node['docker-grid']['registry']['server']['autopilot']['enabled'] | |
105 | +end |
@@ -2,7 +2,7 @@ | ||
2 | 2 | # Cookbook Name:: docker-grid |
3 | 3 | # Recipe:: registry |
4 | 4 | # |
5 | -# Copyright 2016-2017, whitestar | |
5 | +# Copyright 2016-2018, whitestar | |
6 | 6 | # |
7 | 7 | # Licensed under the Apache License, Version 2.0 (the "License"); |
8 | 8 | # you may not use this file except in compliance with the License. |
@@ -21,7 +21,8 @@ doc_url = 'https://docs.docker.com/registry/deploying/#/managing-with-compose' | ||
21 | 21 | |
22 | 22 | include_recipe 'docker-grid::compose' |
23 | 23 | |
24 | -app_dir = node['docker-grid']['registry']['docker-compose']['app_dir'] | |
24 | +compose_conf = node['docker-grid']['registry']['docker-compose'] | |
25 | +app_dir = compose_conf['app_dir'] | |
25 | 26 | auth_dir = "#{app_dir}/auth" |
26 | 27 | etc_dir = "#{app_dir}/etc" |
27 | 28 | [ |
@@ -40,7 +41,7 @@ etc_dir = "#{app_dir}/etc" | ||
40 | 41 | envs = {} |
41 | 42 | vols = [] |
42 | 43 | |
43 | -host_data_volume = node['docker-grid']['registry']['docker-compose']['host_data_volume'] | |
44 | +host_data_volume = compose_conf['host_data_volume'] | |
44 | 45 | unless host_data_volume.nil? |
45 | 46 | directory host_data_volume do |
46 | 47 | owner 'root' |
@@ -64,7 +65,7 @@ if node['docker-grid']['registry']['with_ssl_cert_cookbook'] | ||
64 | 65 | vols.push("#{server_key_path(cn)}:/certs/domain.key:ro") |
65 | 66 | end |
66 | 67 | |
67 | -unless node['docker-grid']['registry']['docker-compose']['registry-config'].nil? | |
68 | +unless compose_conf['registry-config'].nil? | |
68 | 69 | template "#{app_dir}/etc/config.yml" do |
69 | 70 | source 'opt/docker-compose/app/registry/etc/config.yml' |
70 | 71 | owner 'root' |
@@ -75,7 +76,7 @@ unless node['docker-grid']['registry']['docker-compose']['registry-config'].nil? | ||
75 | 76 | vols.push('./etc/config.yml:/etc/docker/registry/config.yml:ro') |
76 | 77 | end |
77 | 78 | |
78 | -service_name = node['docker-grid']['registry']['docker-compose']['service_name'] | |
79 | +service_name = compose_conf['service_name'] | |
79 | 80 | version_1_config = { |
80 | 81 | service_name => { |
81 | 82 | }, |
@@ -89,7 +90,7 @@ version_2_config = { | ||
89 | 90 | } |
90 | 91 | |
91 | 92 | node.override['docker-grid']['registry']['docker-compose']['config'] = \ |
92 | - node['docker-grid']['registry']['docker-compose']['config_format_version'] == '2' ? version_2_config : version_1_config | |
93 | + compose_conf['config_format_version'] == '2' ? version_2_config : version_1_config | |
93 | 94 | |
94 | 95 | [ |
95 | 96 | 'docker-compose.yml', |
@@ -102,6 +103,16 @@ node.override['docker-grid']['registry']['docker-compose']['config'] = \ | ||
102 | 103 | end |
103 | 104 | } |
104 | 105 | |
106 | +# autopilot | |
107 | +srv = 'docker-registry' | |
108 | +template "/etc/cron.d/#{srv}-local" do | |
109 | + source "etc/cron.d/#{srv}-local" | |
110 | + owner 'root' | |
111 | + group 'root' | |
112 | + mode '0644' | |
113 | + action :delete unless compose_conf['autopilot']['enabled'] | |
114 | +end | |
115 | + | |
105 | 116 | log 'registry-docker-compose post install message' do |
106 | 117 | message <<-"EOM" |
107 | 118 | Note: You must execute the following command manually. |
@@ -0,0 +1,13 @@ | ||
1 | +<% | |
2 | +name = 'docker-reg-server' | |
3 | + | |
4 | +conf = node['docker-grid']['registry']['server']['autopilot'] | |
5 | +log = "#{conf['log_dir']}/#{name}-local.log" | |
6 | +wait_time = conf['wait_time'] | |
7 | +-%> | |
8 | +PATH=/usr/bin:/bin:/usr/local/bin | |
9 | +DATE_F='+%Y-%m-%d %H:%M:%S %z' | |
10 | +LOG=<%= log %> | |
11 | +NAME=<%= @service_name %> | |
12 | + | |
13 | +@reboot root sleep <%= wait_time %> && date "$DATE_F" > $LOG && systemctl restart $NAME >> $LOG 2>&1 && systemctl status $NAME >> $LOG 2>&1 |
@@ -0,0 +1,16 @@ | ||
1 | +<% | |
2 | +name = 'docker-registry' | |
3 | + | |
4 | +conf = node['docker-grid']['registry']['docker-compose']['autopilot'] | |
5 | +log = "#{conf['log_dir']}/#{name}-local.log" | |
6 | +wait_time = conf['wait_time'] | |
7 | + | |
8 | +opts = conf['docker-compose_opts'] | |
9 | +-%> | |
10 | +PATH=/usr/bin:/bin:/usr/local/bin | |
11 | +DATE_F='+%Y-%m-%d %H:%M:%S %z' | |
12 | +LOG=<%= log %> | |
13 | +APP_HOME=<%= node['docker-grid']['registry']['docker-compose']['app_dir'] %> | |
14 | +OPTS='<%= opts %>' | |
15 | + | |
16 | +@reboot root sleep <%= wait_time %> && date "$DATE_F" > $LOG && cd $APP_HOME && docker-compose $OPTS down >> $LOG 2>&1 && docker-compose $OPTS up -d >> $LOG 2>&1 && docker-compose ps >> $LOG 2>&1 |
@@ -0,0 +1,12 @@ | ||
1 | +<% | |
2 | +name = 'dockerd' | |
3 | + | |
4 | +conf = node['docker-grid']['engine']['autopilot'] | |
5 | +log = "#{conf['log_dir']}/#{name}-local.log" | |
6 | +-%> | |
7 | +PATH=/usr/bin:/bin:/usr/local/bin | |
8 | +LOG=<%= log %> | |
9 | + | |
10 | +<%= conf['containers_prune_period'] %> root docker_containers_cleanup >> $LOG 2>&1 | |
11 | +<%= conf['images_prune_period'] %> root docker_images_cleanup >> $LOG 2>&1 | |
12 | +<%= conf['volumes_prune_period'] %> root docker_volumes_cleanup >> $LOG 2>&1 |
@@ -1 +1 @@ | ||
1 | -1.2.1 | |
1 | +1.3.0 |