2 # Cookbook Name:: docker-grid
5 # Copyright 2016, 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 bash 'systemctl_daemon-reload' do
24 systemctl daemon-reload
29 if node['docker-grid']['engine']['storage-driver'] == 'overlay'
30 bash 'load_overlayfs_kernel_module' do
34 not_if 'lsmod | grep overlay'
37 template '/etc/modules-load.d/overlay.conf' do
38 source 'etc/modules-load.d/overlay.conf'
45 log 'reboot_message' do
46 message 'Please reboot this machine because of kernel boot option modified.'
51 userns_remap = node['docker-grid']['engine']['userns-remap']
52 if !userns_remap.nil? && !userns_remap.empty?
53 unless Gem::Version.create(node['docker-grid']['engine']['version'].tr('~', '-')) >= Gem::Version.create('1.10')
54 # tr('~', '-') for Ubuntu.
55 Chef::Application.fatal!('Docker version must be 1.10 or later for userns-remap.') # and exit.
57 # By default user namespace feature is inactive in RHEL family (>= 7.2).
58 if node['platform_family'] == 'rhel'
59 unless Gem::Version.create(node['platform_version']) >= Gem::Version.create('7.2')
60 Chef::Application.fatal!('Platform version must be 7.2 or later for kernel user namespace feature.') # and exit.
63 bash 'enable_user_namespace_feature_of_kernerl' do
65 grubby --args='user_namespace.enable=1' --update-kernel=/boot/vmlinuz-#{node['kernel']['release']}
67 not_if "grubby --info=/boot/vmlinuz-#{node['kernel']['release']} | grep 'user_namespace.enable=1'"
68 notifies :write, 'log[reboot_message]'
77 subid_files.each {|subid_file|
83 not_if { File.exist?(subid_file) }
88 remap_user = userns_remap == 'default' ? 'dockremap' : userns_remap
89 ruby_block 'adds_subid_entries' do
91 not_if "cat /etc/subuid | grep #{remap_user}"
92 not_if "cat /etc/subgid | grep #{remap_user}"
93 notifies :restart, 'service[docker]'
95 subid_files.each {|subid_file|
96 max_start_id = 100_000
101 File.open(subid_file) {|file|
102 file.each_line {|line|
103 entry = line.split(':')
104 if entry[0] == remap_user
108 if entry[1].to_i >= max_start_id
109 max_start_id = entry[1].to_i
110 offset = entry[2].to_i
116 this_recipe.log "#{remap_user} already exists in #{subid_file}"
118 File.open(subid_file, 'a') {|file|
119 entry_str = "#{remap_user}:#{max_start_id + offset}:65536"
120 this_recipe.log "#{remap_user} (#{entry_str}) is added in #{subid_file}"
132 directory '/etc/systemd/system/docker.service.d' do
139 template '/etc/systemd/system/docker.service.d/override.conf' do
140 source 'etc/systemd/system/docker.service.d/override.conf'
144 notifies :run, 'bash[systemctl_daemon-reload]'
145 notifies :restart, 'service[docker]'
148 case node['platform_family']
150 # https://dcos.io/docs/1.8/administration/installing/custom/system-requirements/install-docker-centos/
151 template '/etc/yum.repos.d/docker.repo' do
152 source 'etc/yum.repos.d/docker.repo'
159 'docker-engine-selinux',
162 resources(package: pkg) rescue package pkg do
164 version node['docker-grid']['engine']['version']
165 # dockerrepo is disabled by default to prevent automatic update.
166 options '--enablerepo=dockerrepo'
170 # https://docs.docker.com/engine/installation/linux/ubuntulinux/
172 'apt-transport-https',
176 if node['docker-grid']['engine']['storage-driver'] == 'aufs'
178 "linux-image-extra-#{node['os_version']}",
179 'linux-image-extra-virtual',
184 resources(package: pkg) rescue package pkg do
189 template '/etc/apt/sources.list.d/docker.list' do
190 source 'etc/apt/sources.list.d/docker.list'
196 apt_repo_config = node['docker-grid']['apt_repo']
197 bash 'apt-key_adv_docker_tools_key' do
199 apt-key adv --keyserver #{apt_repo_config['keyserver']} --recv-keys #{apt_repo_config['recv-keys']}
202 not_if 'apt-key list | grep -i docker'
205 # Pinning Docker version
206 template '/etc/apt/preferences.d/docker.pref' do
207 source 'etc/apt/preferences.d/docker.pref'
216 resources(package: pkg) rescue package pkg do
218 version node['docker-grid']['engine']['version']
224 action [:start, :enable]
225 subscribes :restart, 'execute[update-ca-certificates]', :delayed
228 users = node['docker-grid']['engine']['users_allow']
230 members users unless users.empty?