OSDN Git Service

- adds the `['docker-grid']['dockerproject']['apt_new_repo_sections']` attribute.
[metasearch/grid-chef-repo.git] / cookbooks / docker-grid / recipes / engine.rb
index 7746007..d7f9654 100644 (file)
 
 # 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
@@ -32,9 +44,6 @@ end
 ::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|
@@ -61,8 +70,6 @@ if shell_out("cat /etc/mtab | grep -E '\s+/\s+zfs\s+'").exitstatus.zero?
   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.
@@ -71,7 +78,6 @@ if storage_driver == 'overlay2'
 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.
@@ -90,6 +96,10 @@ if !userns_remap.nil? && !userns_remap.empty?
   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
@@ -106,37 +116,76 @@ end
 
 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
@@ -146,15 +195,12 @@ when 'rhel'
       '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|
@@ -216,13 +262,21 @@ when 'debian'
     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
@@ -252,25 +306,25 @@ when 'debian'
   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']
@@ -333,10 +387,17 @@ group 'docker' do
   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
+}