OSDN Git Service

adds the `docker-grid::dind-compose` recipe.
[metasearch/grid-chef-repo.git] / cookbooks / docker-grid / attributes / default.rb
1 #
2 # Cookbook Name:: docker-grid
3 # Attributes:: default
4 #
5 # Copyright 2016-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 platform = node['platform']
21
22 default['docker-grid']['install_flavor'] = 'dockerproject'  # or 'os-repository'
23 default['docker-grid']['dockerproject']['enable_new_repo'] = false
24 # read only
25 force_override['docker-grid']['dockerproject']['apt_new_repo_url'] = "https://download.docker.com/linux/#{platform}"
26 force_override['docker-grid']['dockerproject']['apt_old_repo_url'] = 'https://apt.dockerproject.org/repo'
27 default['docker-grid']['dockerproject']['package_name'] \
28   = node['docker-grid']['dockerproject']['enable_new_repo'] ? 'docker-ce' : 'docker-engine'
29 apt_repo_url = \
30   if node['docker-grid']['dockerproject']['enable_new_repo']
31     node['docker-grid']['dockerproject']['apt_new_repo_url']
32   else
33     node['docker-grid']['dockerproject']['apt_old_repo_url']
34   end
35 default['docker-grid']['apt_repo'] = {
36   'url' => apt_repo_url,
37   'override_apt_line' => '',  # e.g. 'deb https://apt.dockerproject.org/repo ubuntu-xenial main'
38   # for old repository
39   'keyserver' => 'hkp://p80.pool.sks-keyservers.net:80',
40   'recv-keys' => '58118E89F3A912897C070ADBF76221572C52609D',
41 }
42 # Old yum repository
43 default['docker-grid']['yum_repo'] = {
44   'baseurl' => 'https://yum.dockerproject.org/repo/main/centos/$releasever/',
45   'gpgcheck' => '1',
46   'gpgkey' => 'https://yum.dockerproject.org/gpg',
47 }
48
49 default['docker-grid']['compose']['install_flavor'] = 'dockerproject'  # or 'os-repository'
50 default['docker-grid']['compose']['skip_setup'] = false
51 # dockerproject: direct download.
52 # Note: non-support by this cookbook.
53 #   os-repository (Ubuntu): http://packages.ubuntu.com/search?keywords=docker-compose&searchon=names
54 #   os-repository (CentOS): none.
55 default['docker-grid']['compose']['auto_upgrade'] = false
56 # latest: 'https://github.com/docker/compose/releases/download/1.17.1'
57 default['docker-grid']['compose']['release_base_url'] = 'https://github.com/docker/compose/releases/download/1.9.0'
58 default['docker-grid']['compose']['release_url'] = "#{node['docker-grid']['compose']['release_base_url']}/docker-compose-#{node['kernel']['name']}-#{node['kernel']['machine']}"
59 default['docker-grid']['compose']['home_dir'] = '/opt/docker-compose'
60 default['docker-grid']['compose']['app_dir'] = "#{node['docker-grid']['compose']['home_dir']}/app"
61
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
84 default['docker-grid']['engine']['skip_setup'] = false
85 # dockerproject: 17.03.1.ce-1, 1.13.1-1, 1.12.6-1, 1.11.2-1, 1.10.3-1
86 # os-repository: yum list docker
87 #   http://mirror.centos.org/centos/7.3.1611/extras/x86_64/Packages/
88 default['docker-grid']['engine']['version_on_centos'] = '1.11.2-1'
89 # dockerproject: 17.03.1~ce-0, 1.13.1-0, 1.12.6-0, 1.11.2-0
90 default['docker-grid']['engine']['version_on_debian'] = '17.03.1~ce-0'
91 # os-repository: http://packages.ubuntu.com/search?keywords=docker.io&searchon=names
92 default['docker-grid']['engine']['version_on_ubuntu'] = '1.11.2-0'
93
94 # '' (empty) or 'latest' version -> latest version
95 case platform
96 when 'centos', 'redhat'
97   version_on_centos = node['docker-grid']['engine']['version_on_centos']
98   if !version_on_centos.nil? && !version_on_centos.empty? && version_on_centos != 'latest'
99     version_on_centos = "#{version_on_centos}.el#{node['platform_version'].to_i}.#{node['platform']}"
100   end
101 when 'debian'
102   version_on_debian = node['docker-grid']['engine']['version_on_debian']
103   if !version_on_debian.nil? && !version_on_debian.empty? && version_on_debian != 'latest'
104     version_on_debian = \
105       if node['docker-grid']['install_flavor'] == 'dockerproject'
106         if Gem::Version.create(version_on_debian.tr('~', '-')) >= Gem::Version.create('1.12.4-0')
107           "#{version_on_debian}~debian-#{node['lsb']['codename']}"
108         else
109           "#{version_on_debian}~#{node['lsb']['codename']}"
110         end
111       end
112   end
113 when 'ubuntu'
114   version_on_ubuntu = node['docker-grid']['engine']['version_on_ubuntu']
115   if !version_on_ubuntu.nil? && !version_on_ubuntu.empty? && version_on_ubuntu != 'latest'
116     version_on_ubuntu = \
117       if node['docker-grid']['install_flavor'] == 'dockerproject'
118         if Gem::Version.create(version_on_ubuntu.tr('~', '-')) >= Gem::Version.create('1.12.4-0')
119           "#{version_on_ubuntu}~ubuntu-#{node['lsb']['codename']}"
120         else
121           "#{version_on_ubuntu}~#{node['lsb']['codename']}"
122         end
123         # else
124         # e.g. 1.12.3-0ubuntu4~16.10.2, 1.12.3-0ubuntu4~16.04.2
125         # version_on_ubuntu
126       end
127   end
128 end
129
130 # '' (empty) or 'latest' version -> latest version
131 default['docker-grid']['engine']['version'] = node.value_for_platform(
132   ['centos', 'redhat'] => {
133     'default' => version_on_centos,
134   },
135   'debian' => {
136     'default' => version_on_debian,
137   },
138   'ubuntu' => {
139     'default' => version_on_ubuntu,
140   }
141 )
142 # overlay2: Docker >= 1.12, Kernel >= 4.0
143 default['docker-grid']['engine']['storage-driver_on_centos'] = 'overlay'
144 default['docker-grid']['engine']['storage-driver_on_debian'] = 'overlay2'
145 default['docker-grid']['engine']['storage-driver_on_ubuntu'] = 'aufs'
146 default['docker-grid']['engine']['storage-driver'] = node.value_for_platform(
147   ['centos', 'redhat'] => {
148     'default' => node['docker-grid']['engine']['storage-driver_on_centos'],
149   },
150   'debian' => {
151     'default' => node['docker-grid']['engine']['storage-driver_on_debian'],
152   },
153   'ubuntu' => {
154     'default' => node['docker-grid']['engine']['storage-driver_on_ubuntu'],
155   }
156 )
157 default['docker-grid']['engine']['userns-remap'] = nil  # default: inactive
158 # CentOS default: '--selinux-enabled --log-driver=journald --signature-verification=false'
159 default['docker-grid']['engine']['daemon_extra_options'] = '-H fd://'
160 default['docker-grid']['engine']['users_allow'] = []
161
162 # dockerproject: container image from https://hub.docker.com/
163 # Note: non-support by this cookbook.
164 #   os-repository (Ubuntu): http://packages.ubuntu.com/search?keywords=docker-registry&searchon=names
165 #   os-repository (CentOS): http://mirror.centos.org/centos/7.3.1611/extras/x86_64/Packages/
166 default['docker-grid']['registry']['with_ssl_cert_cookbook'] = false
167 # If node['docker-grid']['registry']['with_ssl_cert_cookbook'] is true,
168 # node['docker-grid']['registry']['docker-compose']['config']
169 # are overridden by the following 'ca_name' and 'common_name' attributes.
170 #default['docker-grid']['registry']['ssl_cert']['ca_name'] = nil
171 default['docker-grid']['registry']['ssl_cert']['common_name'] = node['fqdn']
172 # See https://docs.docker.com/registry/configuration/
173 rootdirectory = node.value_for_platform(
174   ['centos', 'redhat'] => {
175     'default' => '/var/lib/registry',
176   },
177   ['debian', 'ubuntu'] => {
178     'default' => '/var/lib/docker-registry',
179   }
180 )
181 default['docker-grid']['registry']['server']['config'] = {
182   'version' => '0.1',
183   'log' => {
184     'fields' => {
185       'service' => 'registry',
186     },
187   },
188   'storage' => {
189     'cache' => {
190       # NOTE: Formerly, blobdescriptor was known as layerinfo.
191       # While these are equivalent, layerinfo has been deprecated.
192       'blobdescriptor' => 'inmemory',
193     },
194     'filesystem' => {
195       'rootdirectory' => rootdirectory,
196     },
197   },
198   'http' => {
199     'addr' => ':5000',
200     'headers' => {
201       'X-Content-Type-Options' => [
202         'nosniff',
203       ],
204     },
205   },
206   #'proxy' => {
207   #  'remoteurl' => 'https://registry-1.docker.io',
208   #},
209   'health' => {
210     'storagedriver' => {
211       'enabled' => true,
212       'interval' => '10s',
213       'threshold' => 3,
214     },
215   },
216 }
217 default['docker-grid']['registry']['docker-compose']['app_dir'] = "#{node['docker-grid']['compose']['app_dir']}/registry"
218 # ./docker-compose.yml
219 default['docker-grid']['registry']['docker-compose']['config_format_version'] = '1'
220 default['docker-grid']['registry']['docker-compose']['service_name'] = 'registry'
221 default['docker-grid']['registry']['docker-compose']['host_data_volume'] = '/var/lib/docker-registry'
222 service_name = node['docker-grid']['registry']['docker-compose']['service_name']
223 version_1_config = {
224   # Version 1 docker-compose format
225   service_name => {
226     'restart' => 'always',
227     'image' => 'registry:2',
228     #'ports' => [
229     #  '5000:5000',
230     #],
231     #'environment' => {
232     #  'REGISTRY_HTTP_TLS_CERTIFICATE' => '/certs/domain.crt',
233     #  'REGISTRY_HTTP_TLS_KEY' =>         '/certs/domain.key',
234     #  'REGISTRY_AUTH' =>                'htpasswd',
235     #  'REGISTRY_AUTH_HTPASSWD_PATH' =>  '/auth/htpasswd',
236     #  'REGISTRY_AUTH_HTPASSWD_REALM' => 'Registry Realm',
237     #},
238     #'volumes' => [
239     #  #'./etc/config.yml:/etc/docker/registry/config.yml',  # Overriding the entire configuration file
240     #  "#{node['docker-grid']['registry']['docker-compose']['host_data_volume']}:/var/lib/registry",
241     #  '/path/certs:/certs',
242     #  '/path/auth:/auth',
243     #],
244   },
245 }
246 version_2_config = {
247   # Version 2 docker-compose format
248   'version' => '2',
249   'services' => version_1_config,
250 }
251 default['docker-grid']['registry']['docker-compose']['config'] = \
252   node['docker-grid']['registry']['docker-compose']['config_format_version'] == '2' ? version_2_config : version_1_config
253 # ./etc/config.yml
254 # See: https://docs.docker.com/registry/configuration/#/overriding-the-entire-configuration-file
255 default['docker-grid']['registry']['docker-compose']['registry-config'] = nil