# https://dcos.io/docs/1.8/administration/installing/custom/system-requirements/
-install_flavor = node['docker-grid']['install_flavor']
platform = node['platform']
platform_family = node['platform_family']
platform_version = node['platform_version']
+install_flavor = node['docker-grid']['install_flavor']
+override_apt_line = node['docker-grid']['apt_repo']['override_apt_line']
+if !override_apt_line.nil? && !override_apt_line.empty? \
+ && override_apt_line.include?(node['docker-grid']['dockerproject']['apt_new_repo_url'])
+ Chef::Log.warn('This docker-grid::engine recipe uses the Docker new repository by the `override_apt_line` attribute.')
+ node.force_override['docker-grid']['dockerproject']['enable_new_repo'] = true
+end
+enable_new_repo = node['docker-grid']['dockerproject']['enable_new_repo']
+docker_ver = node['docker-grid']['engine']['version']
+docker_ver = '' if docker_ver.nil? || docker_ver == 'latest'
+storage_driver = node['docker-grid']['engine']['storage-driver']
+userns_remap = node['docker-grid']['engine']['userns-remap']
+
if node['docker-grid']['engine']['skip_setup']
log 'Skip the Docker Engine setup.'
return
::Chef::Recipe.send(:include, PlatformUtils::Helper)
::Chef::Recipe.send(:include, PlatformUtils::VirtUtils)
-docker_ver = node['docker-grid']['engine']['version']
-docker_ver = '' if docker_ver.nil?
-
[
'bridge-utils',
].each {|pkg|
end
end
-storage_driver = node['docker-grid']['engine']['storage-driver']
-
if storage_driver == 'overlay2'
if !docker_ver.empty? && Gem::Version.create(docker_ver.tr('~', '-')) < Gem::Version.create('1.12')
# tr('~', '-') for Ubuntu.
end
load_kernel_module('overlay') if storage_driver =~ /overlay2?/
-userns_remap = node['docker-grid']['engine']['userns-remap']
if !userns_remap.nil? && !userns_remap.empty?
if !docker_ver.empty? && Gem::Version.create(docker_ver.tr('~', '-')) < Gem::Version.create('1.10')
# tr('~', '-') for Ubuntu.
append_subusers([remap_user], notifies_conf)
end
+file '/etc/systemd/system/docker.service.d/override.conf' do
+ action :nothing
+end
+
bash 'clean_up_docker0_bridge' do
code <<-"EOH"
if brctl show | grep docker0; then
case platform_family
when 'rhel'
+ ex_enablerepo = node['docker-grid']['dockerproject']['yum_new_repo_extra_enablerepo']
+
+ if storage_driver == 'devicemapper'
+ [
+ #'yum-utils',
+ 'device-mapper-persistent-data',
+ 'lvm2',
+ ].each {|pkg|
+ resources(package: pkg) rescue package pkg do
+ action :install
+ end
+ }
+ end
+
if install_flavor == 'dockerproject'
# https://dcos.io/docs/1.8/administration/installing/custom/system-requirements/install-docker-centos/
- template '/etc/yum.repos.d/docker.repo' do
- source 'etc/yum.repos.d/docker.repo'
- owner 'root'
- group 'root'
- mode '0644'
+ old_repo_action = nil
+ new_repo_action = nil
+ pkgs = nil
+ if enable_new_repo
+ old_repo_action = :delete
+ new_repo_action = :create
+ pkgs = [
+ 'docker-ce',
+ ]
+ else
+ old_repo_action = :create
+ new_repo_action = :delete
+ pkgs = [
+ 'docker-engine-selinux',
+ 'docker-engine',
+ ]
end
[
+ 'docker.repo',
+ 'docker-ce.repo',
+ ].each {|repo_file|
+ template "/etc/yum.repos.d/#{repo_file}" do
+ source "etc/yum.repos.d/#{repo_file}"
+ owner 'root'
+ group 'root'
+ mode '0644'
+ action repo_file == 'docker.repo' ? old_repo_action : new_repo_action
+ end
+ }
+
+ [
'docker',
- 'container-selinux',
'docker-common',
+ #'container-selinux',
+ 'docker-selinux',
].each {|pkg|
resources(package: pkg) rescue package pkg do
- action :remove
+ action platform_family == 'debian' ? :purge : :remove
+ notifies :delete, 'file[/etc/systemd/system/docker.service.d/override.conf]', :immediately
notifies :run, 'bash[clean_up_docker0_bridge]', :immediately
end
}
- [
- 'docker-engine-selinux',
- 'docker-engine',
- ].each {|pkg|
+ pkgs.each {|pkg|
resources(yum_package: pkg) rescue yum_package pkg do
allow_downgrade true
action :install
version docker_ver unless docker_ver.empty?
- # dockerrepo is disabled by default to prevent automatic update.
- options '--enablerepo=dockerrepo'
- notifies :run, 'bash[clean_up_docker0_bridge]', :before if pkg == 'docker-engine'
+ # for the new repository
+ options "--enablerepo=#{ex_enablerepo}" if enable_new_repo && !ex_enablerepo.nil? && !ex_enablerepo.empty?
+ # old dockerrepo is disabled by default to prevent automatic update.
+ options '--enablerepo=dockerrepo' unless enable_new_repo
+ notifies :run, 'bash[clean_up_docker0_bridge]', :before if pkg == 'docker-engine' || pkg == 'docker-ce'
end
}
else
'docker-engine',
].each {|pkg|
resources(package: pkg) rescue package pkg do
- action :remove
+ action platform_family == 'debian' ? :purge : :remove
+ notifies :delete, 'file[/etc/systemd/system/docker.service.d/override.conf]', :immediately
notifies :run, 'bash[clean_up_docker0_bridge]', :immediately
end
}
- file '/etc/systemd/system/docker.service.d/override.conf' do
- action :delete
- end
-
[
'docker',
].each {|pkg|
pkg_name = node['docker-grid']['dockerproject']['package_name']
apt_repo_config = node['docker-grid']['apt_repo']
+ apt_key_add_cmd = nil
+ apt_key_name = nil
+ if enable_new_repo
+ apt_key_add_cmd = "curl -fsSL https://download.docker.com/linux/#{platform}/gpg | apt-key add -"
+ apt_key_name = 'Docker Release (CE deb)'
+ else
+ apt_key_add_cmd = "apt-key adv --keyserver #{apt_repo_config['keyserver']} --recv-keys #{apt_repo_config['recv-keys']}"
+ apt_key_name = 'Docker Release Tool (releasedocker)'
+ end
bash 'apt-key_adv_docker_tools_key' do
code <<-"EOH"
- apt-key adv --keyserver #{apt_repo_config['keyserver']} --recv-keys #{apt_repo_config['recv-keys']}
- #apt-get update
+ #{apt_key_add_cmd}
EOH
action :nothing
- not_if 'apt-key list | grep -i docker'
+ not_if "apt-key list 2>&1 | grep '#{apt_key_name}'"
end
template '/etc/apt/sources.list.d/docker.list' do
end
resources(package: pkg_name_removed) rescue package pkg_name_removed do
- action :remove
+ action platform_family == 'debian' ? :purge : :remove
+ notifies :delete, 'file[/etc/systemd/system/docker.service.d/override.conf]', :immediately
notifies :run, 'bash[clean_up_docker0_bridge]', :immediately
end
resources(package: pkg_name) rescue package pkg_name do
action :install
+ options "-o Dpkg::Options::='--force-confnew'" if platform_family == 'debian'
options '--allow-downgrades' if platform == 'debian' || platform_version >= '16.04' # LTS (xenial)
options '--force-yes' if platform_version == '14.04' # LTS (trusty)
version docker_ver unless docker_ver.empty?
notifies :run, 'bash[clean_up_docker0_bridge]', :before
+ notifies :run, 'bash[apt-key_adv_docker_tools_key]', :before
+ notifies :run, "execute[#{apt_get_update}]", :before
end
end
docker_opts = []
-
-storage_driver = node['docker-grid']['engine']['storage-driver']
docker_opts.push("--storage-driver=#{storage_driver}") if !storage_driver.nil? && !storage_driver.empty?
-
-userns_remap = node['docker-grid']['engine']['userns-remap']
docker_opts.push("--userns-remap=#{userns_remap}") if !userns_remap.nil? && !userns_remap.empty?
extra_options = node['docker-grid']['engine']['daemon_extra_options']
append true
end
-template '/usr/local/bin/docker_images_cleanup' do
- source 'usr/local/bin/docker_images_cleanup'
- owner 'root'
- group 'root'
- mode '0755'
- action :create
-end
+# utility scripts
+[
+ 'docker_containers_cleanup',
+ 'docker_images_cleanup',
+ 'docker_volumes_cleanup',
+].each {|script|
+ template "/usr/local/bin/#{script}" do
+ source "usr/local/bin/#{script}"
+ owner 'root'
+ group 'root'
+ mode '0755'
+ action :create
+ end
+}