• R/O
  • HTTP
  • SSH
  • HTTPS

grid-chef-repo: Commit

Grid環境構築用のChefリポジトリです。


Commit MetaInfo

Revision4c02a52324e627e85367d63eaf8686eab0ba0738 (tree)
Zeit2017-11-25 14:37:26
Autorwhitestar <whitestar@user...>
Commiterwhitestar

Log Message

adds the docker-grid::dind-compose recipe.

Ändern Zusammenfassung

Diff

--- a/cookbooks/docker-grid/CHANGELOG.md
+++ b/cookbooks/docker-grid/CHANGELOG.md
@@ -1,5 +1,10 @@
11 # docker-grid CHANGELOG
22
3+0.5.5
4+-----
5+- adds the `docker-grid::dind-compose` recipe.
6+- refactoring.
7+
38 0.5.4
49 -----
510 - adds the Docker project new repository support (Debian, Ubuntu, RHEL and CentOS).
--- a/cookbooks/docker-grid/README.md
+++ b/cookbooks/docker-grid/README.md
@@ -13,6 +13,7 @@ This cookbook sets up Docker engine etc.
1313 - [Recipes](#recipes)
1414 - [docker-grid::default](#docker-griddefault)
1515 - [docker-grid::compose](#docker-gridcompose)
16+ - [docker-grid::dind-compose](#docker-griddind-compose)
1617 - [docker-grid::engine](#docker-gridengine)
1718 - [docker-grid::registry](#docker-gridregistry)
1819 - [docker-grid::registry-docker-compose](#docker-gridregistry-docker-compose)
@@ -51,7 +52,10 @@ This cookbook sets up Docker engine etc.
5152 |`['docker-grid']['compose']['release_base_url']`|String||`'https://github.com/docker/compose/releases/download/1.9.0'`|
5253 |`['docker-grid']['compose']['release_url']`|String||`"#{node['docker-grid']['compose']['release_base_url']}/docker-compose-#{node['kernel']['name']}-#{node['kernel']['machine']}"`|
5354 |`['docker-grid']['compose']['home_dir']`|String||`'/opt/docker-compose'`|
54-|`['docker-grid']['compose']['app_dir']`|String||`"#{node['docker-grid']['compose']['home_dir']}/app`|
55+|`['docker-grid']['compose']['app_dir']`|String||`"#{node['docker-grid']['compose']['home_dir']}/app"`|
56+|`['docker-grid']['dind-compose']['app_dir']`|String|docker-compose application root directory for Docker in Docker.|`"#{node['docker-grid']['compose']['app_dir']}/docker-in-docker"`|
57+|`['docker-grid']['dind-compose']['data_dir']`|String|persistent data directory.|`"#{node['docker-grid']['dind-compose']['app_dir']}/data"`|
58+|`['docker-grid']['dind-compose']['config']`|Hash|`docker-compose.yml` configurations.|See `attributes/default.rb`|
5559 |`['docker-grid']['engine']['skip_setup']`|Boolean||`false`|
5660 |`['docker-grid']['engine']['version_on_centos']`|String|Docker version for CentOS. `''` (empty) means the latest version.|`'1.11.2-1'`|
5761 |`['docker-grid']['engine']['version_on_debian']`|String|Docker version for Debian. `''` (empty) means the latest version.|`'17.03.1~ce-0'`|
@@ -86,6 +90,10 @@ This recipe does nothing.
8690
8791 This recipe installs docker-compose.
8892
93+#### docker-grid::dind-compose
94+
95+This recipe sets up Docker Compose configurations for a Docker in Docker service.
96+
8997 #### docker-grid::engine
9098
9199 This recipe sets up Docker engine.
@@ -104,7 +112,41 @@ This recipe sets up a Docker registry service on real host.
104112
105113 ### Role Examples
106114
107-- `roles/docker.rb`: installs the `docker-engine` package.
115+- `roles/docker-new-repo.rb`: installs the `docker-ce` package by the new repository.
116+
117+```ruby
118+name 'docker-new-repo'
119+description 'Docker CE by the new repository'
120+
121+run_list(
122+ 'role[docker]',
123+)
124+
125+override_attributes(
126+ 'docker-grid' => {
127+ 'install_flavor' => 'dockerproject',
128+ 'dockerproject' => {
129+ 'enable_new_repo' => true,
130+ },
131+ 'compose' => {
132+ #'skip_setup' => true, # default: false
133+ 'auto_upgrade' => true, # default: false
134+ 'release_base_url' => 'https://github.com/docker/compose/releases/download/1.17.1',
135+ },
136+ 'engine' => {
137+ 'version' => '', # latest
138+ #'skip_setup' => true, # default: false
139+ # new package: `docker-ce`
140+ #'version_on_centos' => '17.09.0.ce-1',
141+ #'version_on_ubuntu' => '17.05.0~ce-0',
142+ 'storage-driver_on_centos' => 'devicemapper',
143+ 'storage-driver_on_ubuntu' => 'overlay2', # default: aufs
144+ },
145+ },
146+)
147+```
148+
149+- `roles/docker.rb`: installs the `docker-engine` package by the old repository.
108150
109151 ```ruby
110152 name 'docker'
@@ -131,6 +173,51 @@ override_attributes(
131173 )
132174 ```
133175
176+- `roles/docker4latest_ubuntu.rb`: installs the `docker-ce` package to the latest Ubuntu.
177+
178+```ruby
179+name 'docker4latest_ubuntu'
180+description 'Docker for the latest Ubuntu'
181+
182+run_list(
183+ 'role[docker]',
184+)
185+
186+override_attributes(
187+ 'docker-grid' => {
188+ 'install_flavor' => 'dockerproject',
189+ 'dockerproject' => {
190+ 'enable_new_repo' => true,
191+ 'package_name' => 'docker-ce', # new package name.
192+ },
193+ # install the package for the newer distribution of ubuntu.
194+ 'apt_repo' => {
195+ # new repo.
196+ #'override_apt_line' => 'deb [arch=amd64] https://download.docker.com/linux/ubuntu artful stable', # not active yet
197+ 'override_apt_line' => 'deb [arch=amd64] https://download.docker.com/linux/ubuntu zesty stable',
198+ # old repo.
199+ #'override_apt_line' => 'deb https://apt.dockerproject.org/repo ubuntu-zesty main',
200+ #'override_apt_line' => 'deb https://apt.dockerproject.org/repo ubuntu-xenial main',
201+ },
202+ 'compose' => {
203+ #'skip_setup' => true, # default: false
204+ 'auto_upgrade' => true, # default: false
205+ 'release_base_url' => 'https://github.com/docker/compose/releases/download/1.17.1',
206+ },
207+ 'engine' => {
208+ # new package: `docker-ce``
209+ 'version' => '17.09.0~ce-0~ubuntu',
210+ #'version' => '17.06.2~ce-0~ubuntu',
211+ # old package: `docker-engine``
212+ #'version' => '17.05.0~ce-0~ubuntu-zesty',
213+ #'version' => '17.03.1~ce-0~ubuntu-yakkety',
214+ #'version' => '1.12.3-0~xenial',
215+ 'storage-driver_on_ubuntu' => 'overlay2', # default: aufs
216+ },
217+ },
218+)
219+```
220+
134221 - `roles/docker-rhel.rb`: installs the `docker` package.
135222
136223 ```ruby
--- a/cookbooks/docker-grid/attributes/default.rb
+++ b/cookbooks/docker-grid/attributes/default.rb
@@ -53,11 +53,34 @@ default['docker-grid']['compose']['skip_setup'] = false
5353 # os-repository (Ubuntu): http://packages.ubuntu.com/search?keywords=docker-compose&searchon=names
5454 # os-repository (CentOS): none.
5555 default['docker-grid']['compose']['auto_upgrade'] = false
56+# latest: 'https://github.com/docker/compose/releases/download/1.17.1'
5657 default['docker-grid']['compose']['release_base_url'] = 'https://github.com/docker/compose/releases/download/1.9.0'
5758 default['docker-grid']['compose']['release_url'] = "#{node['docker-grid']['compose']['release_base_url']}/docker-compose-#{node['kernel']['name']}-#{node['kernel']['machine']}"
5859 default['docker-grid']['compose']['home_dir'] = '/opt/docker-compose'
5960 default['docker-grid']['compose']['app_dir'] = "#{node['docker-grid']['compose']['home_dir']}/app"
6061
62+default['docker-grid']['dind-compose']['app_dir'] = "#{node['docker-grid']['compose']['app_dir']}/docker-in-docker"
63+default['docker-grid']['dind-compose']['data_dir'] = "#{node['docker-grid']['dind-compose']['app_dir']}/data"
64+default['docker-grid']['dind-compose']['config'] = {
65+ # Version 2 docker-compose format
66+ 'version' => '2',
67+ 'services' => {
68+ 'dind' => {
69+ 'image' => 'docker:stable-dind',
70+ 'privileged' => true,
71+ 'command' => [
72+ #'--storage-driver=overlay2', # same as host Docker's storage driver
73+ ],
74+ 'volumes' => [
75+ # These volumes will be set by the docker-grid::dind-compose recipe automatically.
76+ #"#{node['docker-grid']['dind-compose']['data_dir']}:/var/lib/docker",
77+ ],
78+ 'environment' => {
79+ },
80+ },
81+ },
82+}
83+
6184 default['docker-grid']['engine']['skip_setup'] = false
6285 # dockerproject: 17.03.1.ce-1, 1.13.1-1, 1.12.6-1, 1.11.2-1, 1.10.3-1
6386 # os-repository: yum list docker
@@ -68,16 +91,16 @@ default['docker-grid']['engine']['version_on_debian'] = '17.03.1~ce-0'
6891 # os-repository: http://packages.ubuntu.com/search?keywords=docker.io&searchon=names
6992 default['docker-grid']['engine']['version_on_ubuntu'] = '1.11.2-0'
7093
71-# '' (empty) version -> latest version
94+# '' (empty) or 'latest' version -> latest version
7295 case platform
7396 when 'centos', 'redhat'
7497 version_on_centos = node['docker-grid']['engine']['version_on_centos']
75- if !version_on_centos.nil? && !version_on_centos.empty?
98+ if !version_on_centos.nil? && !version_on_centos.empty? && version_on_centos != 'latest'
7699 version_on_centos = "#{version_on_centos}.el#{node['platform_version'].to_i}.#{node['platform']}"
77100 end
78101 when 'debian'
79102 version_on_debian = node['docker-grid']['engine']['version_on_debian']
80- if !version_on_debian.nil? && !version_on_debian.empty?
103+ if !version_on_debian.nil? && !version_on_debian.empty? && version_on_debian != 'latest'
81104 version_on_debian = \
82105 if node['docker-grid']['install_flavor'] == 'dockerproject'
83106 if Gem::Version.create(version_on_debian.tr('~', '-')) >= Gem::Version.create('1.12.4-0')
@@ -89,7 +112,7 @@ when 'debian'
89112 end
90113 when 'ubuntu'
91114 version_on_ubuntu = node['docker-grid']['engine']['version_on_ubuntu']
92- if !version_on_ubuntu.nil? && !version_on_ubuntu.empty?
115+ if !version_on_ubuntu.nil? && !version_on_ubuntu.empty? && version_on_ubuntu != 'latest'
93116 version_on_ubuntu = \
94117 if node['docker-grid']['install_flavor'] == 'dockerproject'
95118 if Gem::Version.create(version_on_ubuntu.tr('~', '-')) >= Gem::Version.create('1.12.4-0')
@@ -104,7 +127,7 @@ when 'ubuntu'
104127 end
105128 end
106129
107-# '' (empty) version -> latest version
130+# '' (empty) or 'latest' version -> latest version
108131 default['docker-grid']['engine']['version'] = node.value_for_platform(
109132 ['centos', 'redhat'] => {
110133 'default' => version_on_centos,
--- /dev/null
+++ b/cookbooks/docker-grid/recipes/dind-compose.rb
@@ -0,0 +1,84 @@
1+#
2+# Cookbook Name:: docker-grid
3+# Recipe:: dind-compose
4+#
5+# Copyright 2017, whitestar
6+#
7+# Licensed under the Apache License, Version 2.0 (the "License");
8+# you may not use this file except in compliance with the License.
9+# You may obtain a copy of the License at
10+#
11+# http://www.apache.org/licenses/LICENSE-2.0
12+#
13+# Unless required by applicable law or agreed to in writing, software
14+# distributed under the License is distributed on an "AS IS" BASIS,
15+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16+# See the License for the specific language governing permissions and
17+# limitations under the License.
18+#
19+
20+doc_url = 'https://hub.docker.com/r/library/docker/'
21+
22+include_recipe 'docker-grid::compose'
23+
24+app_dir = node['docker-grid']['dind-compose']['app_dir']
25+[
26+ app_dir,
27+].each {|dir|
28+ resources(directory: dir) rescue directory dir do
29+ owner 'root'
30+ group 'root'
31+ mode '0755'
32+ recursive true
33+ end
34+}
35+
36+config_srvs = node['docker-grid']['dind-compose']['config']['services']
37+override_config_srvs = node.override['docker-grid']['dind-compose']['config']['services']
38+#force_override_config_srvs = node.force_override['docker-grid']['dind-compose']['config']['services']
39+
40+command = config_srvs['dind']['command'].to_a
41+vols = config_srvs['dind']['volumes'].to_a
42+
43+data_dir = node['docker-grid']['dind-compose']['data_dir']
44+if !data_dir.nil? && !data_dir.empty?
45+ directory data_dir do
46+ owner 'root'
47+ group 'root'
48+ mode '0711'
49+ recursive true
50+ end
51+
52+ vols.push("#{data_dir}:/var/lib/docker")
53+end
54+
55+result = shell_out("docker info | grep 'Storage Driver: ' | awk -F': ' '{print $2}'")
56+if result.exitstatus.zero? && !result.stdout.chomp.empty? \
57+ && command.none? {|cmd| cmd =~ /^--storage-driver=.+/ }
58+ command.push("--storage-driver=#{result.stdout.chomp}")
59+end
60+
61+# reset vlumes array.
62+override_config_srvs['dind']['command'] = command unless command.empty?
63+override_config_srvs['dind']['volumes'] = vols unless vols.empty?
64+
65+[
66+ 'docker-compose.yml',
67+].each {|conf_file|
68+ template "#{app_dir}/#{conf_file}" do
69+ source "opt/docker-compose/app/docker-in-docker/#{conf_file}"
70+ owner 'root'
71+ group 'root'
72+ mode '0644'
73+ end
74+}
75+
76+log <<-"EOM"
77+Note: You must execute the following command manually.
78+ See #{doc_url}
79+ * Start:
80+ $ cd #{app_dir}
81+ $ docker-compose up -d
82+ * Stop
83+ $ docker-compose down
84+EOM
--- a/cookbooks/docker-grid/recipes/engine.rb
+++ b/cookbooks/docker-grid/recipes/engine.rb
@@ -32,7 +32,7 @@ if !override_apt_line.nil? && !override_apt_line.empty? \
3232 end
3333 enable_new_repo = node['docker-grid']['dockerproject']['enable_new_repo']
3434 docker_ver = node['docker-grid']['engine']['version']
35-docker_ver = '' if docker_ver.nil?
35+docker_ver = '' if docker_ver.nil? || docker_ver == 'latest'
3636 storage_driver = node['docker-grid']['engine']['storage-driver']
3737 userns_remap = node['docker-grid']['engine']['userns-remap']
3838
@@ -96,6 +96,10 @@ if !userns_remap.nil? && !userns_remap.empty?
9696 append_subusers([remap_user], notifies_conf)
9797 end
9898
99+file '/etc/systemd/system/docker.service.d/override.conf' do
100+ action :nothing
101+end
102+
99103 bash 'clean_up_docker0_bridge' do
100104 code <<-"EOH"
101105 if brctl show | grep docker0; then
@@ -165,6 +169,7 @@ when 'rhel'
165169 ].each {|pkg|
166170 resources(package: pkg) rescue package pkg do
167171 action platform_family == 'debian' ? :purge : :remove
172+ notifies :delete, 'file[/etc/systemd/system/docker.service.d/override.conf]', :immediately
168173 notifies :run, 'bash[clean_up_docker0_bridge]', :immediately
169174 end
170175 }
@@ -187,14 +192,11 @@ when 'rhel'
187192 ].each {|pkg|
188193 resources(package: pkg) rescue package pkg do
189194 action platform_family == 'debian' ? :purge : :remove
195+ notifies :delete, 'file[/etc/systemd/system/docker.service.d/override.conf]', :immediately
190196 notifies :run, 'bash[clean_up_docker0_bridge]', :immediately
191197 end
192198 }
193199
194- file '/etc/systemd/system/docker.service.d/override.conf' do
195- action :delete
196- end
197-
198200 [
199201 'docker',
200202 ].each {|pkg|
@@ -301,6 +303,7 @@ when 'debian'
301303
302304 resources(package: pkg_name_removed) rescue package pkg_name_removed do
303305 action platform_family == 'debian' ? :purge : :remove
306+ notifies :delete, 'file[/etc/systemd/system/docker.service.d/override.conf]', :immediately
304307 notifies :run, 'bash[clean_up_docker0_bridge]', :immediately
305308 end
306309
--- /dev/null
+++ b/cookbooks/docker-grid/templates/default/opt/docker-compose/app/docker-in-docker/docker-compose.yml
@@ -0,0 +1,7 @@
1+<%
2+config = node['docker-grid']['dind-compose']['config']
3+
4+require 'yaml'
5+yaml_str = config.to_hash.to_yaml
6+-%>
7+<%= yaml_str %>
--- a/cookbooks/docker-grid/version
+++ b/cookbooks/docker-grid/version
@@ -1 +1 @@
1-0.5.4
1+0.5.5
--- a/roles/docker-new-repo.rb
+++ b/roles/docker-new-repo.rb
@@ -34,7 +34,8 @@ override_attributes(
3434 },
3535 'compose' => {
3636 #'skip_setup' => true, # default: false
37- 'release_base_url' => 'https://github.com/docker/compose/releases/download/1.17.0',
37+ 'auto_upgrade' => true, # default: false
38+ 'release_base_url' => 'https://github.com/docker/compose/releases/download/1.17.1',
3839 },
3940 'engine' => {
4041 'version' => '', # latest
--- a/roles/docker4latest_ubuntu.rb
+++ b/roles/docker4latest_ubuntu.rb
@@ -41,6 +41,11 @@ override_attributes(
4141 #'override_apt_line' => 'deb https://apt.dockerproject.org/repo ubuntu-zesty main',
4242 #'override_apt_line' => 'deb https://apt.dockerproject.org/repo ubuntu-xenial main',
4343 },
44+ 'compose' => {
45+ #'skip_setup' => true, # default: false
46+ 'auto_upgrade' => true, # default: false
47+ 'release_base_url' => 'https://github.com/docker/compose/releases/download/1.17.1',
48+ },
4449 'engine' => {
4550 # new package: `docker-ce``
4651 'version' => '17.09.0~ce-0~ubuntu',
Show on old repository browser