OSDN Git Service

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