2 # Cookbook Name:: docker-grid
5 # Copyright 2016-2017, whitestar
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
11 # http://www.apache.org/licenses/LICENSE-2.0
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.
20 # https://dcos.io/docs/1.8/administration/installing/custom/system-requirements/
22 ::Chef::Recipe.send(:include, PlatformUtils::Helper)
23 ::Chef::Recipe.send(:include, PlatformUtils::VirtUtils)
25 docker_ver = node['docker-grid']['engine']['version']
30 resources(package: pkg) rescue package pkg do
35 bash 'systemctl_daemon-reload' do
37 systemctl daemon-reload
42 # https://docs.docker.com/engine/userguide/storagedriver/selectadriver/
43 if shell_out("cat /etc/mtab | grep -E '\s+/\s+zfs\s+'").exitstatus == 0
44 if container_guest_node?
45 Chef::Log.warn('This node is running in the Linux container with ZFS, set the storage-driver to vfs as a fallback.')
46 node.override['docker-grid']['engine']['storage-driver'] = 'vfs'
48 Chef::Log.warn('This node is running on ZFS, set the storage-driver to zfs.')
49 node.override['docker-grid']['engine']['storage-driver'] = 'zfs'
53 storage_driver = node['docker-grid']['engine']['storage-driver']
55 if storage_driver == 'overlay2'
56 unless Gem::Version.create(docker_ver.tr('~', '-')) >= Gem::Version.create('1.12')
57 # tr('~', '-') for Ubuntu.
58 Chef::Application.fatal!('Docker version must be 1.12 or later for overlay2 storage driver.') # and exit.
61 load_kernel_module('overlay') if storage_driver =~ /overlay2?/
63 userns_remap = node['docker-grid']['engine']['userns-remap']
64 if !userns_remap.nil? && !userns_remap.empty?
65 unless Gem::Version.create(docker_ver.tr('~', '-')) >= Gem::Version.create('1.10')
66 # tr('~', '-') for Ubuntu.
67 Chef::Application.fatal!('Docker version must be 1.10 or later for userns-remap.') # and exit.
70 include_recipe 'platform_utils::kernel_user_namespace'
72 remap_user = userns_remap == 'default' ? 'dockremap' : userns_remap
75 'resource' => 'service[docker]',
78 ::Chef::Recipe.send(:include, PlatformUtils::Helper)
79 append_subusers([remap_user], notifies_conf)
82 bash 'clean_up_docker0_bridge' do
84 if brctl show | grep docker0; then
85 ip link set docker0 down
88 # https://github.com/docker/docker/issues/23630
89 if [ -d /var/lib/docker/network ]; then
90 rm -rf /var/lib/docker/network
96 directory '/etc/systemd/system/docker.service.d' do
103 template '/etc/systemd/system/docker.service.d/override.conf' do
104 source 'etc/systemd/system/docker.service.d/override.conf'
108 not_if { node['docker-grid']['install_flavor'] == 'os-repository' && node['platform_family'] == 'rhel' }
109 notifies :run, 'bash[systemctl_daemon-reload]', :immediately
110 notifies :restart, 'service[docker]'
113 case node['platform_family']
115 if node['docker-grid']['install_flavor'] == 'dockerproject'
116 # https://dcos.io/docs/1.8/administration/installing/custom/system-requirements/install-docker-centos/
117 template '/etc/yum.repos.d/docker.repo' do
118 source 'etc/yum.repos.d/docker.repo'
129 resources(package: pkg) rescue package pkg do
131 notifies :run, 'bash[clean_up_docker0_bridge]', :immediately
136 'docker-engine-selinux',
139 resources(yum_package: pkg) rescue yum_package pkg do
143 # dockerrepo is disabled by default to prevent automatic update.
144 options '--enablerepo=dockerrepo'
145 notifies :run, 'bash[clean_up_docker0_bridge]', :before if pkg == 'docker-engine'
151 'docker-engine-selinux',
154 resources(package: pkg) rescue package pkg do
156 notifies :run, 'bash[clean_up_docker0_bridge]', :immediately
160 file '/etc/systemd/system/docker.service.d/override.conf' do
167 resources(yum_package: pkg) rescue yum_package pkg do
171 notifies :run, 'bash[clean_up_docker0_bridge]', :before
175 template '/etc/sysconfig/docker' do
176 source 'etc/sysconfig/docker'
180 notifies :restart, 'service[docker]'
184 # https://docs.docker.com/engine/installation/linux/ubuntulinux/
186 'apt-transport-https',
190 if storage_driver == 'aufs' \
191 && !container_guest_node?
193 "linux-image-extra-#{node['os_version']}",
194 'linux-image-extra-virtual',
199 resources(package: pkg) rescue package pkg do
204 apt_get_update = 'apt-get_update'
205 resources(execute: apt_get_update) rescue execute apt_get_update do
206 command 'apt-get update'
210 if node['docker-grid']['install_flavor'] == 'dockerproject'
211 pkg_name_removed = 'docker.io'
212 pkg_name = 'docker-engine'
214 apt_repo_config = node['docker-grid']['apt_repo']
215 bash 'apt-key_adv_docker_tools_key' do
217 apt-key adv --keyserver #{apt_repo_config['keyserver']} --recv-keys #{apt_repo_config['recv-keys']}
221 not_if 'apt-key list | grep -i docker'
224 template '/etc/apt/sources.list.d/docker.list' do
225 source 'etc/apt/sources.list.d/docker.list'
229 notifies :run, 'bash[apt-key_adv_docker_tools_key]', :before
230 notifies :run, "execute[#{apt_get_update}]", :immediately
234 pkg_name_removed = 'docker-engine'
235 pkg_name = 'docker.io'
238 # Pinning Docker version
239 template '/etc/apt/preferences.d/docker.pref' do
240 source 'etc/apt/preferences.d/docker.pref'
249 resources(package: pkg_name_removed) rescue package pkg_name_removed do
251 notifies :run, 'bash[clean_up_docker0_bridge]', :immediately
254 resources(package: pkg_name) rescue package pkg_name do
256 options '--allow-downgrades'
258 notifies :run, 'bash[clean_up_docker0_bridge]', :before
263 action [:start, :enable]
264 subscribes :restart, 'execute[update-ca-certificates]', :delayed
267 users = node['docker-grid']['engine']['users_allow']
269 members users unless users.empty?