OSDN Git Service

adds autopilot features. concourse-ci-0.3.0
authorwhitestar <whitestar@users.osdn.me>
Mon, 17 Sep 2018 04:42:57 +0000 (13:42 +0900)
committerwhitestar <whitestar@users.osdn.me>
Mon, 17 Sep 2018 04:42:57 +0000 (13:42 +0900)
cookbooks/concourse-ci/CHANGELOG.md
cookbooks/concourse-ci/Gemfile.lock [new file with mode: 0644]
cookbooks/concourse-ci/README.md
cookbooks/concourse-ci/Rakefile
cookbooks/concourse-ci/attributes/default.rb
cookbooks/concourse-ci/concourse.yml
cookbooks/concourse-ci/fly-vars.local.yml [new file with mode: 0644]
cookbooks/concourse-ci/fly-vars.yml
cookbooks/concourse-ci/recipes/docker-compose.rb
cookbooks/concourse-ci/templates/default/etc/cron.d/concourse-local [new file with mode: 0644]
cookbooks/concourse-ci/version

index 4a418ea..29bae45 100644 (file)
@@ -1,6 +1,10 @@
 concourse-ci CHANGELOG
 ======================
 
+0.3.0
+-----
+- adds autopilot features.
+
 0.2.9
 -----
 - improves the utility scripts.
diff --git a/cookbooks/concourse-ci/Gemfile.lock b/cookbooks/concourse-ci/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 87a3f66..11ff7d2 100644 (file)
@@ -46,6 +46,7 @@ This cookbook sets up a Concourse CI service by Docker Compose.
 |`['concourse-ci']['ssl_cert']['ca_names']`|Array|Internal CA names that are imported by the ssl_cert cookbook.|`[]`|
 |`['concourse-ci']['ssl_cert']['common_name']`|String|Server common name for TLS|`node['fqdn']`|
 |`['concourse-ci']['docker-image']['entrypoint']`|String|Concourse Docker image's entrypoint setting to import an internal CA certificate.|`'/usr/local/bin/dumb-init /usr/local/bin/concourse'`|
+|`['concourse-ci']['docker-compose']['autopilot']`|Hash|Concourse autopilot configurations.|See `attributes/default.rb`|`false`|
 |`['concourse-ci']['docker-compose']['import_ca']`|Boolean|whether import internal CA certificates or not.|`false`|
 |`['concourse-ci']['docker-compose']['app_dir']`|String||`"#{node['docker-grid']['compose']['app_dir']}/concourse"`|
 |`['concourse-ci']['docker-compose']['pgdata_dir']`|String|Path string or nil (unset).|`"#{node['concourse-ci']['docker-compose']['app_dir']}/database"`|
@@ -88,6 +89,7 @@ name 'concourse'
 description 'Concourse'
 
 run_list(
+  # see https://osdn.net/projects/metasearch/scm/git/grid-chef-repo/blobs/master/roles/docker-new-repo.rb
   'role[docker]',
   'recipe[concourse-ci::docker-compose]',
 )
index 8b85e6a..f1c82d7 100644 (file)
@@ -3,12 +3,56 @@ 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 #{File.basename(Dir.pwd)}-cookbook -c concourse.yml",
-    '-l fly-vars.yml -l ~/sec/credentials-prod.yml',
+    "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
index 8bc09f1..f326fac 100644 (file)
@@ -30,6 +30,12 @@ default['concourse-ci']['with_ssl_cert_cookbook'] = false
 default['concourse-ci']['ssl_cert']['ca_names'] = []
 default['concourse-ci']['ssl_cert']['common_name'] = node['fqdn']
 default['concourse-ci']['docker-image']['entrypoint'] = '/usr/local/bin/dumb-init /usr/local/bin/concourse'
+default['concourse-ci']['docker-compose']['autopilot'] = {
+  'enabled' => false,
+  'log_dir' => '/var/log',
+  'wait_time' => '180s',
+  'workers_prune_period' => '30 */4 * * *',
+}
 default['concourse-ci']['docker-compose']['import_ca'] = false
 default['concourse-ci']['docker-compose']['app_dir'] = "#{node['docker-grid']['compose']['app_dir']}/concourse"
 default['concourse-ci']['docker-compose']['pgdata_dir'] = "#{node['concourse-ci']['docker-compose']['app_dir']}/database"
index 77f4b1f..d373185 100644 (file)
@@ -1,5 +1,4 @@
 ---
-# $ fly -t $CC_TARGET sp -p concourse-ci-cookbook -c concourse.yml -l fly-vars.yml -l ~/sec/credentials-prod.yml
 resources:
 - name: src-git
   type: git
diff --git a/cookbooks/concourse-ci/fly-vars.local.yml b/cookbooks/concourse-ci/fly-vars.local.yml
new file mode 100644 (file)
index 0000000..049515e
--- /dev/null
@@ -0,0 +1,2 @@
+---
+cookbook-name: concourse-ci
index a4941fd..76f2fcd 100644 (file)
@@ -1,3 +1,2 @@
 ---
-cookbook-name: concourse-ci
 chefdk-version: 1.6.11
index abaa8f7..5cd630e 100644 (file)
@@ -323,6 +323,16 @@ template "#{bin_dir}/concourse_start" do
   action :create
 end
 
+# autopilot
+srv = 'concourse'
+template "/etc/cron.d/#{srv}-local" do
+  source  "etc/cron.d/#{srv}-local"
+  owner 'root'
+  group 'root'
+  mode '0644'
+  action :delete unless node['concourse-ci']['docker-compose']['autopilot']['enabled']
+end
+
 log <<-"EOM"
 Note: You must execute the following command manually.
   See #{doc_url}
diff --git a/cookbooks/concourse-ci/templates/default/etc/cron.d/concourse-local b/cookbooks/concourse-ci/templates/default/etc/cron.d/concourse-local
new file mode 100644 (file)
index 0000000..74357bb
--- /dev/null
@@ -0,0 +1,13 @@
+<%
+name = 'concourse'
+
+conf = node['concourse-ci']['docker-compose']['autopilot']
+log = "#{conf['log_dir']}/#{name}-local.log"
+wait_time = conf['wait_time']
+-%>
+PATH=/usr/bin:/bin:/usr/local/bin
+LOG=<%= log %>
+APP_HOME=<%= node['concourse-ci']['docker-compose']['app_dir'] %>
+
+@reboot root sleep <%= wait_time %> && ${APP_HOME}/bin/concourse_start > $LOG 2>&1
+<%= conf['workers_prune_period'] %> root ${APP_HOME}/bin/fly_prune_workers_main >> $LOG 2>&1