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::VirtUtils)
24 bash 'systemctl_daemon-reload' do
26 systemctl daemon-reload
31 if container_guest_node? && shell_out("cat /etc/mtab | grep -E '\s+/\s+zfs\s+'").exitstatus == 0
32 Chef::Log.warn('This node is running in the Linux container with ZFS, set the storage-driver to vfs as a fallback.')
33 node.override['docker-grid']['engine']['storage-driver'] = 'vfs'
36 if node['docker-grid']['engine']['storage-driver'] == 'overlay'
37 bash 'load_overlayfs_kernel_module' do
41 not_if 'lsmod | grep overlay'
44 template '/etc/modules-load.d/overlay.conf' do
45 source 'etc/modules-load.d/overlay.conf'
52 log 'reboot_message' do
53 message 'Please reboot this machine because of kernel boot option modified.'
58 userns_remap = node['docker-grid']['engine']['userns-remap']
59 if !userns_remap.nil? && !userns_remap.empty?
60 unless Gem::Version.create(node['docker-grid']['engine']['version'].tr('~', '-')) >= Gem::Version.create('1.10')
61 # tr('~', '-') for Ubuntu.
62 Chef::Application.fatal!('Docker version must be 1.10 or later for userns-remap.') # and exit.
64 # By default user namespace feature is inactive in RHEL family (>= 7.2).
65 if node['platform_family'] == 'rhel' && !container_guest_node?
66 unless Gem::Version.create(node['platform_version']) >= Gem::Version.create('7.2')
67 Chef::Application.fatal!('Platform version must be 7.2 or later for kernel user namespace feature.') # and exit.
70 bash 'enable_user_namespace_feature_of_kernerl' do
72 grubby --args='user_namespace.enable=1' --update-kernel=/boot/vmlinuz-#{node['kernel']['release']}
74 not_if "grubby --info=/boot/vmlinuz-#{node['kernel']['release']} | grep 'user_namespace.enable=1'"
75 notifies :write, 'log[reboot_message]'
79 remap_user = userns_remap == 'default' ? 'dockremap' : userns_remap
82 'resource' => 'service[docker]',
85 ::Chef::Recipe.send(:include, PlatformUtils::Helper)
86 append_subusers([remap_user], notifies_conf)
89 directory '/etc/systemd/system/docker.service.d' do
96 template '/etc/systemd/system/docker.service.d/override.conf' do
97 source 'etc/systemd/system/docker.service.d/override.conf'
101 notifies :run, 'bash[systemctl_daemon-reload]'
102 notifies :restart, 'service[docker]'
105 case node['platform_family']
107 # https://dcos.io/docs/1.8/administration/installing/custom/system-requirements/install-docker-centos/
108 template '/etc/yum.repos.d/docker.repo' do
109 source 'etc/yum.repos.d/docker.repo'
116 'docker-engine-selinux',
119 resources(package: pkg) rescue package pkg do
121 version node['docker-grid']['engine']['version']
122 # dockerrepo is disabled by default to prevent automatic update.
123 options '--enablerepo=dockerrepo'
127 # https://docs.docker.com/engine/installation/linux/ubuntulinux/
129 'apt-transport-https',
133 if node['docker-grid']['engine']['storage-driver'] == 'aufs' \
134 && !container_guest_node?
136 "linux-image-extra-#{node['os_version']}",
137 'linux-image-extra-virtual',
142 resources(package: pkg) rescue package pkg do
147 apt_get_update = 'apt-get_update'
148 resources(execute: apt_get_update) rescue execute apt_get_update do
149 command 'apt-get update'
153 apt_repo_config = node['docker-grid']['apt_repo']
154 bash 'apt-key_adv_docker_tools_key' do
156 apt-key adv --keyserver #{apt_repo_config['keyserver']} --recv-keys #{apt_repo_config['recv-keys']}
160 not_if 'apt-key list | grep -i docker'
163 template '/etc/apt/sources.list.d/docker.list' do
164 source 'etc/apt/sources.list.d/docker.list'
168 notifies :run, 'bash[apt-key_adv_docker_tools_key]', :before
169 notifies :run, "execute[#{apt_get_update}]", :immediately
172 # Pinning Docker version
173 template '/etc/apt/preferences.d/docker.pref' do
174 source 'etc/apt/preferences.d/docker.pref'
183 resources(package: pkg) rescue package pkg do
185 version node['docker-grid']['engine']['version']
191 action [:start, :enable]
192 subscribes :restart, 'execute[update-ca-certificates]', :delayed
195 users = node['docker-grid']['engine']['users_allow']
197 members users unless users.empty?