OSDN Git Service

adds autopilot features. docker-grid-1.3.0
authorwhitestar <whitestar@users.osdn.me>
Mon, 17 Sep 2018 03:14:23 +0000 (12:14 +0900)
committerwhitestar <whitestar@users.osdn.me>
Mon, 17 Sep 2018 03:14:23 +0000 (12:14 +0900)
15 files changed:
cookbooks/docker-grid/CHANGELOG.md
cookbooks/docker-grid/Gemfile.lock [new file with mode: 0644]
cookbooks/docker-grid/README.md
cookbooks/docker-grid/Rakefile
cookbooks/docker-grid/attributes/default.rb
cookbooks/docker-grid/concourse.yml
cookbooks/docker-grid/fly-vars.local.yml [new file with mode: 0644]
cookbooks/docker-grid/fly-vars.yml
cookbooks/docker-grid/recipes/engine.rb
cookbooks/docker-grid/recipes/registry-server.rb
cookbooks/docker-grid/recipes/registry.rb
cookbooks/docker-grid/templates/default/etc/cron.d/docker-reg-server-local [new file with mode: 0644]
cookbooks/docker-grid/templates/default/etc/cron.d/docker-registry-local [new file with mode: 0644]
cookbooks/docker-grid/templates/default/etc/cron.d/dockerd-local [new file with mode: 0644]
cookbooks/docker-grid/version

index ee6341e..0ebdd39 100644 (file)
@@ -1,5 +1,9 @@
 # docker-grid CHANGELOG
 
+1.3.0
+-----
+- adds autopilot features.
+
 1.2.1
 -----
 - adds docker-compose cleanup before installing it.
diff --git a/cookbooks/docker-grid/Gemfile.lock b/cookbooks/docker-grid/Gemfile.lock
new file mode 100644 (file)
index 0000000..6fb9a3b
--- /dev/null
@@ -0,0 +1,22 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    chef-api (0.8.0)
+      logify (~> 0.1)
+      mime-types
+    logify (0.2.0)
+    mime-types (3.2.2)
+      mime-types-data (~> 3.2015)
+    mime-types-data (3.2018.0812)
+    stove (6.0.0)
+      chef-api (~> 0.5)
+      logify (~> 0.2)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  stove
+
+BUNDLED WITH
+   1.16.0
index 3d05596..16d56bf 100644 (file)
@@ -60,6 +60,7 @@ This cookbook sets up Docker engine etc.
 |`['docker-grid']['dind-compose']['data_dir']`|String|persistent data directory.|`"#{node['docker-grid']['dind-compose']['app_dir']}/data"`|
 |`['docker-grid']['dind-compose']['config']`|Hash|`docker-compose.yml` configurations.|See `attributes/default.rb`|
 |`['docker-grid']['engine']['skip_setup']`|Boolean||`false`|
+|`['docker-grid']['engine']['autopilot']`|Hash|docker-engin autopilot configurations.|See `attributes/default.rb`|
 |`['docker-grid']['engine']['version_on_centos']`|String|Docker version for CentOS. `''` (empty) means the latest version.|`'17.12.1.ce-1'`|
 |`['docker-grid']['engine']['version_on_debian']`|String|Docker version for Debian. `''` (empty) means the latest version.|`'17.12.1~ce-0'`|
 |`['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.
 |`['docker-grid']['engine']['users_allow']`|Array|Non-root users allowed to manage Docker daemon.|`[]`|
 |`['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`|
 |`['docker-grid']['registry']['ssl_cert']['common_name']`|String|Registry server common name for TLS|`node['fqdn']`|
+|`['docker-grid']['registry']['server']['autopilot']`|Hash|Resigtry server autopilot configurations.|See `attributes/default.rb`|
 |`['docker-grid']['registry']['server']['config']`|Hash|Registry server configurations.|See `attributes/default.rb`|
+|`['docker-grid']['registry']['docker-compose']['autopilot']`|Hash|Registry docker-compose autopilot configurations.|See `attributes/default.rb`|
 |`['docker-grid']['registry']['docker-compose']['app_dir']`|String||`"#{node['docker-grid']['compose']['app_dir']}/registry"`|
 |`['docker-grid']['registry']['docker-compose']['host_data_volume']`|String|Data directory path on the host filesystem or `nil` (unset).|`'/var/lib/docker-registry'`|
 |`['docker-grid']['registry']['docker-compose']['config_format_version']`|String|`docker-compose.yml` format version. `'1'` or `'2'`|`'1'`|
index 64191a5..f1c82d7 100644 (file)
@@ -3,6 +3,58 @@ require 'rubocop/rake_task'
 require 'foodcritic'
 require 'stove/rake_task'
 
+tpl_cookbook = '00cookbook'
+cookbook_name = File.basename(Dir.pwd)
+
+desc 'Initialize project'
+task :init do
+  next if cookbook_name == tpl_cookbook
+
+  [
+    '.foodcritic',
+    '.rubocop.yml',
+    'Berksfile',
+    'concourse.yml',
+    'fly-vars.yml',
+    'fly-vars.local.yml',
+    'Gemfile',
+    'Gemfile.lock',
+    'version',
+  ].each {|conf|
+    sh "cp ../#{tpl_cookbook}/#{conf} ./" unless File.exist?(conf)
+  }
+
+  ruby [
+    %(-pne '$_.gsub!(/^cookbook-name: .*$/, "cookbook-name: #{cookbook_name}")'),
+    '-i fly-vars.local.yml',
+  ].join(' ')
+end
+
+desc 'Update project'
+task :update do
+  next if cookbook_name == tpl_cookbook
+
+  [
+    'Rakefile',
+    'concourse.yml',
+    'fly-vars.yml',
+    'Gemfile',
+    'Gemfile.lock',
+  ].each {|conf|
+    sh "cp ../#{tpl_cookbook}/#{conf} ./"
+  }
+end
+
+desc 'fly set-pipeline'
+task :'set-pipeline' do
+  sh [
+    "fly -t $CC_TARGET sp -p #{cookbook_name}-cookbook -c concourse.yml",
+    '-l fly-vars.yml -l fly-vars.local.yml -l ~/sec/credentials-prod.yml',
+  ].join(' ')
+end
+desc 'rake set-pipeline alias'
+task sp: 'set-pipeline'
+
 namespace :style do
   desc 'Run Ruby style checks'
   RuboCop::RakeTask.new(:ruby) do |t|
index 244622f..a39f64e 100644 (file)
@@ -87,6 +87,14 @@ default['docker-grid']['dind-compose']['config'] = {
 }
 
 default['docker-grid']['engine']['skip_setup'] = false
+default['docker-grid']['engine']['autopilot'] = {
+  'enabled' => false,
+  'log_dir' => '/var/log',
+  'containers_prune_period' => '5  */4 * * *',
+  'images_prune_period'     => '10 */4 * * *',
+  'volumes_prune_period'    => '15 */4 * * *',
+}
+
 # dockerproject: 18.06.0.ce-3, 18.03.1.ce-1, 17.12.1.ce-1, 1.13.1-1
 # os-repository: yum list docker
 #   http://mirror.centos.org/centos/7.3.1611/extras/x86_64/Packages/
@@ -190,6 +198,12 @@ rootdirectory = node.value_for_platform(
     'default' => '/var/lib/docker-registry',
   }
 )
+default['docker-grid']['registry']['server']['autopilot'] = {
+  'enabled' => false,
+  'log_dir' => '/var/log',
+  'wait_time' => '120s',
+  'docker-compose_opts' => '--no-ansi',
+}
 default['docker-grid']['registry']['server']['config'] = {
   'version' => '0.1',
   'log' => {
@@ -226,6 +240,13 @@ default['docker-grid']['registry']['server']['config'] = {
     },
   },
 }
+
+default['docker-grid']['registry']['docker-compose']['autopilot'] = {
+  'enabled' => false,
+  'log_dir' => '/var/log',
+  'wait_time' => '180s',
+  'docker-compose_opts' => '--no-ansi',
+}
 default['docker-grid']['registry']['docker-compose']['app_dir'] = "#{node['docker-grid']['compose']['app_dir']}/registry"
 # ./docker-compose.yml
 default['docker-grid']['registry']['docker-compose']['config_format_version'] = '1'
index 2a43c1b..d373185 100644 (file)
@@ -1,5 +1,4 @@
 ---
-# $ fly -t $CC_TARGET sp -p docker-grid-cookbook -c concourse.yml -l fly-vars.yml -l ~/sec/credentials-prod.yml
 resources:
 - name: src-git
   type: git
@@ -59,6 +58,7 @@ jobs:
         - -c
         - |
           cd ./src-git/cookbooks/((cookbook-name))
+          bundle config --local silence_root_warning 1
           bundle install
           rake
 - name: publish-cookbook
@@ -89,6 +89,7 @@ jobs:
           echo '{"username":"((chef-username))","key":"/root/chef-client-key.pem"}' > /root/.stove
           echo "$chef_client_key"  > /root/chef-client-key.pem
           cd ./src-git/cookbooks/((cookbook-name))
+          bundle config --local silence_root_warning 1
           bundle install
           rake publish
   - put: src-git
diff --git a/cookbooks/docker-grid/fly-vars.local.yml b/cookbooks/docker-grid/fly-vars.local.yml
new file mode 100644 (file)
index 0000000..43ac1fa
--- /dev/null
@@ -0,0 +1,2 @@
+---
+cookbook-name: docker-grid
index 1af4aae..76f2fcd 100644 (file)
@@ -1,3 +1,2 @@
 ---
-cookbook-name: docker-grid
 chefdk-version: 1.6.11
index 7cdecf7..a08c36e 100644 (file)
@@ -2,7 +2,7 @@
 # Cookbook Name:: docker-grid
 # Recipe:: engine
 #
-# Copyright 2016-2017, whitestar
+# Copyright 2016-2018, whitestar
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # 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? \
   node.force_override['docker-grid']['dockerproject']['enable_new_repo'] = true
 end
 enable_new_repo = node['docker-grid']['dockerproject']['enable_new_repo']
-docker_ver = node['docker-grid']['engine']['version']
+
+engine_conf = node['docker-grid']['engine']
+docker_ver = engine_conf['version']
 docker_ver = '' if docker_ver.nil? || docker_ver == 'latest'
-storage_driver = node['docker-grid']['engine']['storage-driver']
-userns_remap = node['docker-grid']['engine']['userns-remap']
+storage_driver = engine_conf['storage-driver']
+userns_remap = engine_conf['userns-remap']
 
-if node['docker-grid']['engine']['skip_setup']
+if engine_conf['skip_setup']
   log 'Skip the Docker Engine setup.'
   return
 end
@@ -328,7 +330,7 @@ docker_opts = []
 docker_opts.push("--storage-driver=#{storage_driver}") if !storage_driver.nil? && !storage_driver.empty?
 docker_opts.push("--userns-remap=#{userns_remap}") if !userns_remap.nil? && !userns_remap.empty?
 
-extra_options = node['docker-grid']['engine']['daemon_extra_options']
+extra_options = engine_conf['daemon_extra_options']
 # for docker-engine package on RHEL: remove '-H fd://'
 # https://github.com/docker/docker/issues/22847
 if platform_family == 'rhel' || platform == 'debian' || (platform == 'ubuntu' && platform_version == '14.04')
@@ -381,7 +383,7 @@ service 'docker' do
   subscribes :restart, 'execute[update-ca-certificates]', :delayed
 end
 
-users = node['docker-grid']['engine']['users_allow']
+users = engine_conf['users_allow']
 group 'docker' do
   members users unless users.empty?
   action :create
@@ -402,3 +404,13 @@ end
     action :create
   end
 }
+
+# autopilot
+srv = 'dockerd'
+template "/etc/cron.d/#{srv}-local" do
+  source  "etc/cron.d/#{srv}-local"
+  owner 'root'
+  group 'root'
+  mode '0644'
+  action :delete unless engine_conf['autopilot']['enabled']
+end
index 10b1d64..a6c1e33 100644 (file)
@@ -90,3 +90,16 @@ template "#{conf_dir}/config.yml" do
   mode '0644'
   notifies :restart, "service[#{service_name}]"
 end
+
+# autopilot
+srv = 'docker-reg-server'
+template "/etc/cron.d/#{srv}-local" do
+  source  "etc/cron.d/#{srv}-local"
+  owner 'root'
+  group 'root'
+  mode '0644'
+  variables(
+    service_name: service_name
+  )
+  action :delete unless node['docker-grid']['registry']['server']['autopilot']['enabled']
+end
index 0698c88..e90db0a 100644 (file)
@@ -2,7 +2,7 @@
 # Cookbook Name:: docker-grid
 # Recipe:: registry
 #
-# Copyright 2016-2017, whitestar
+# Copyright 2016-2018, whitestar
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # 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'
 
 include_recipe 'docker-grid::compose'
 
-app_dir = node['docker-grid']['registry']['docker-compose']['app_dir']
+compose_conf = node['docker-grid']['registry']['docker-compose']
+app_dir = compose_conf['app_dir']
 auth_dir = "#{app_dir}/auth"
 etc_dir = "#{app_dir}/etc"
 [
@@ -40,7 +41,7 @@ etc_dir = "#{app_dir}/etc"
 envs = {}
 vols = []
 
-host_data_volume = node['docker-grid']['registry']['docker-compose']['host_data_volume']
+host_data_volume = compose_conf['host_data_volume']
 unless host_data_volume.nil?
   directory host_data_volume do
     owner 'root'
@@ -64,7 +65,7 @@ if node['docker-grid']['registry']['with_ssl_cert_cookbook']
   vols.push("#{server_key_path(cn)}:/certs/domain.key:ro")
 end
 
-unless node['docker-grid']['registry']['docker-compose']['registry-config'].nil?
+unless compose_conf['registry-config'].nil?
   template "#{app_dir}/etc/config.yml" do
     source  'opt/docker-compose/app/registry/etc/config.yml'
     owner 'root'
@@ -75,7 +76,7 @@ unless node['docker-grid']['registry']['docker-compose']['registry-config'].nil?
   vols.push('./etc/config.yml:/etc/docker/registry/config.yml:ro')
 end
 
-service_name = node['docker-grid']['registry']['docker-compose']['service_name']
+service_name = compose_conf['service_name']
 version_1_config = {
   service_name => {
   },
@@ -89,7 +90,7 @@ version_2_config = {
 }
 
 node.override['docker-grid']['registry']['docker-compose']['config'] = \
-  node['docker-grid']['registry']['docker-compose']['config_format_version'] == '2' ? version_2_config : version_1_config
+  compose_conf['config_format_version'] == '2' ? version_2_config : version_1_config
 
 [
   'docker-compose.yml',
@@ -102,6 +103,16 @@ node.override['docker-grid']['registry']['docker-compose']['config'] = \
   end
 }
 
+# autopilot
+srv = 'docker-registry'
+template "/etc/cron.d/#{srv}-local" do
+  source  "etc/cron.d/#{srv}-local"
+  owner 'root'
+  group 'root'
+  mode '0644'
+  action :delete unless compose_conf['autopilot']['enabled']
+end
+
 log 'registry-docker-compose post install message' do
   message <<-"EOM"
 Note: You must execute the following command manually.
diff --git a/cookbooks/docker-grid/templates/default/etc/cron.d/docker-reg-server-local b/cookbooks/docker-grid/templates/default/etc/cron.d/docker-reg-server-local
new file mode 100644 (file)
index 0000000..9fe3048
--- /dev/null
@@ -0,0 +1,13 @@
+<%
+name = 'docker-reg-server'
+
+conf = node['docker-grid']['registry']['server']['autopilot']
+log = "#{conf['log_dir']}/#{name}-local.log"
+wait_time = conf['wait_time']
+-%>
+PATH=/usr/bin:/bin:/usr/local/bin
+DATE_F='+%Y-%m-%d %H:%M:%S %z'
+LOG=<%= log %>
+NAME=<%= @service_name %>
+
+@reboot root sleep <%= wait_time %> && date "$DATE_F" > $LOG && systemctl restart $NAME >> $LOG 2>&1 && systemctl status $NAME >> $LOG 2>&1
diff --git a/cookbooks/docker-grid/templates/default/etc/cron.d/docker-registry-local b/cookbooks/docker-grid/templates/default/etc/cron.d/docker-registry-local
new file mode 100644 (file)
index 0000000..05a97da
--- /dev/null
@@ -0,0 +1,16 @@
+<%
+name = 'docker-registry'
+
+conf = node['docker-grid']['registry']['docker-compose']['autopilot']
+log = "#{conf['log_dir']}/#{name}-local.log"
+wait_time = conf['wait_time']
+
+opts = conf['docker-compose_opts']
+-%>
+PATH=/usr/bin:/bin:/usr/local/bin
+DATE_F='+%Y-%m-%d %H:%M:%S %z'
+LOG=<%= log %>
+APP_HOME=<%= node['docker-grid']['registry']['docker-compose']['app_dir'] %>
+OPTS='<%= opts %>'
+
+@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
diff --git a/cookbooks/docker-grid/templates/default/etc/cron.d/dockerd-local b/cookbooks/docker-grid/templates/default/etc/cron.d/dockerd-local
new file mode 100644 (file)
index 0000000..67df973
--- /dev/null
@@ -0,0 +1,12 @@
+<%
+name = 'dockerd'
+
+conf = node['docker-grid']['engine']['autopilot']
+log = "#{conf['log_dir']}/#{name}-local.log"
+-%>
+PATH=/usr/bin:/bin:/usr/local/bin
+LOG=<%= log %>
+
+<%= conf['containers_prune_period'] %> root docker_containers_cleanup >> $LOG 2>&1
+<%= conf['images_prune_period'] %> root docker_images_cleanup >> $LOG 2>&1
+<%= conf['volumes_prune_period'] %> root docker_volumes_cleanup >> $LOG 2>&1