OSDN Git Service

adds docker-ce-18.09 support. docker-grid-1.3.3
authorwhitestar <whitestar@users.osdn.me>
Sat, 10 Nov 2018 05:43:52 +0000 (14:43 +0900)
committerwhitestar <whitestar@users.osdn.me>
Sat, 10 Nov 2018 05:43:52 +0000 (14:43 +0900)
cookbooks/docker-grid/.rubocop.yml
cookbooks/docker-grid/CHANGELOG.md
cookbooks/docker-grid/Rakefile
cookbooks/docker-grid/attributes/default.rb
cookbooks/docker-grid/chefignore [new file with mode: 0644]
cookbooks/docker-grid/libraries/helper.rb [new file with mode: 0644]
cookbooks/docker-grid/recipes/engine.rb
cookbooks/docker-grid/version

index f2cde45..8d4f520 100644 (file)
@@ -10,6 +10,10 @@ Lint/UnusedBlockArgument:
   Enabled: false
 Metrics/AbcSize:
   Enabled: false
+Metrics/CyclomaticComplexity:
+  Max: 7
+Metrics/MethodLength:
+  Max: 17
 Style/BlockComments:
   Enabled: false
 Style/BlockDelimiters:
@@ -35,7 +39,5 @@ Metrics/BlockNesting:
   Max: 4
 #Style/AccessorMethodName:
 #  Enabled: false
-#Metrics/MethodLength:
-#  Max: 15
 #Style/ModuleLength:
 #  Max: 150
index f3a1545..ce7346e 100644 (file)
@@ -1,5 +1,9 @@
 # docker-grid CHANGELOG
 
+1.3.3
+-----
+- adds docker-ce-18.09 support.
+
 1.3.2
 -----
 - adds the latest Ubuntu support.
index f1c82d7..1ba86c6 100644 (file)
@@ -14,6 +14,7 @@ task :init do
     '.foodcritic',
     '.rubocop.yml',
     'Berksfile',
+    'chefignore',
     'concourse.yml',
     'fly-vars.yml',
     'fly-vars.local.yml',
@@ -36,6 +37,7 @@ task :update do
 
   [
     'Rakefile',
+    'chefignore',
     'concourse.yml',
     'fly-vars.yml',
     'Gemfile',
index 36b03e2..fd917d0 100644 (file)
@@ -17,6 +17,8 @@
 # limitations under the License.
 #
 
+::Chef::Node::Attribute.send(:include, DockerGrid::Helper)
+
 platform = node['platform']
 
 default['docker-grid']['install_flavor'] = 'dockerproject'  # or 'os-repository'
@@ -99,9 +101,9 @@ default['docker-grid']['engine']['autopilot'] = {
 # os-repository: yum list docker
 #   http://mirror.centos.org/centos/7.3.1611/extras/x86_64/Packages/
 default['docker-grid']['engine']['version_on_centos'] = '17.12.1.ce-1'
-# dockerproject: 18.06.0~ce~3-0, 18.03.1~ce-0, 17.12.1~ce-0, 1.13.1-0
+# dockerproject: 5:18.09.0~3-0, 18.06.1~ce~3-0, 18.03.1~ce-0, 17.12.1~ce-0, 1.13.1-0
 default['docker-grid']['engine']['version_on_debian'] = '17.12.1~ce-0'
-# dockerproject: 18.06.0~ce~3-0, 18.03.1~ce-0, 17.12.1~ce-0
+# dockerproject: 5:18.09.0~3-0, 18.06.1~ce~3-0, 18.03.1~ce-0, 17.12.1~ce-0
 # os-repository: http://packages.ubuntu.com/search?keywords=docker.io&searchon=names
 default['docker-grid']['engine']['version_on_ubuntu'] = '17.12.1~ce-0'
 
@@ -110,38 +112,19 @@ case platform
 when 'centos', 'redhat'
   version_on_centos = node['docker-grid']['engine']['version_on_centos']
   if !version_on_centos.nil? && !version_on_centos.empty? && version_on_centos != 'latest'
-    suffix = ''
-    if Gem::Version.create(version_on_centos) < Gem::Version.create('18.06.0.ce-3')
-      suffix = ".#{node['platform']}"
-    end
-    version_on_centos = "#{version_on_centos}.el#{node['platform_version'].to_i}#{suffix}"
+    version_on_centos = docker_full_ver(node, version_on_centos)
   end
 when 'debian'
   version_on_debian = node['docker-grid']['engine']['version_on_debian']
-  if !version_on_debian.nil? && !version_on_debian.empty? && version_on_debian != 'latest'
-    version_on_debian = \
-      if node['docker-grid']['install_flavor'] == 'dockerproject'
-        if Gem::Version.create(version_on_debian.tr('~', '-')) >= Gem::Version.create('1.12.4-0')
-          "#{version_on_debian}~debian-#{node['lsb']['codename']}"
-        else
-          "#{version_on_debian}~#{node['lsb']['codename']}"
-        end
-      end
+  if !version_on_debian.nil? && !version_on_debian.empty? && version_on_debian != 'latest' \
+    && node['docker-grid']['install_flavor'] == 'dockerproject'
+    version_on_debian = docker_full_ver(node, version_on_debian)
   end
 when 'ubuntu'
   version_on_ubuntu = node['docker-grid']['engine']['version_on_ubuntu']
-  if !version_on_ubuntu.nil? && !version_on_ubuntu.empty? && version_on_ubuntu != 'latest'
-    version_on_ubuntu = \
-      if node['docker-grid']['install_flavor'] == 'dockerproject'
-        if Gem::Version.create(version_on_ubuntu.tr('~', '-')) >= Gem::Version.create('1.12.4-0')
-          "#{version_on_ubuntu}~ubuntu-#{node['lsb']['codename']}"
-        else
-          "#{version_on_ubuntu}~#{node['lsb']['codename']}"
-        end
-        # else
-        # e.g. 1.12.3-0ubuntu4~16.10.2, 1.12.3-0ubuntu4~16.04.2
-        # version_on_ubuntu
-      end
+  if !version_on_ubuntu.nil? && !version_on_ubuntu.empty? && version_on_ubuntu != 'latest' \
+    && node['docker-grid']['install_flavor'] == 'dockerproject'
+    version_on_ubuntu = docker_full_ver(node, version_on_ubuntu)
   end
 end
 
diff --git a/cookbooks/docker-grid/chefignore b/cookbooks/docker-grid/chefignore
new file mode 100644 (file)
index 0000000..10e314a
--- /dev/null
@@ -0,0 +1,20 @@
+# Put files/directories that should be ignored in this file.
+# Lines that start with '# ' are comments.
+
+Berksfile.lock
+
+# concourse
+concourse.yml
+fly-vars.yml
+fly-vars.local.yml
+
+# emacs
+*~
+
+.rubocop_todo.yml
+
+# vim
+*.sw[a-z]
+
+# subversion
+*/.svn/*
diff --git a/cookbooks/docker-grid/libraries/helper.rb b/cookbooks/docker-grid/libraries/helper.rb
new file mode 100644 (file)
index 0000000..077a6b8
--- /dev/null
@@ -0,0 +1,54 @@
+#
+# Cookbook Name:: docker-grid
+# Library:: Helper
+#
+# Copyright 2018, whitestar
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+module DockerGrid
+  # Helper methods
+  module Helper
+    def gem_ver(version)
+      # `.gsub(/^\d:/, '')` deletes an epoch prefix (e.g. '5:')
+      Gem::Version.create(version.gsub(/^\d:/, '').tr('~', '-'))
+    end
+
+    def docker_full_ver(node, version)
+      platform = node['platform']
+
+      case platform
+      when 'centos', 'redhat'
+        suffix = ''
+        suffix = ".#{platform}" if gem_ver(version) < gem_ver('18.06.0.ce-3')
+        "#{version}.el#{node['platform_version'].to_i}#{suffix}"
+      when 'debian', 'ubuntu'
+        # e.g.
+        #   5:18.09.0~3-0~ubuntu-xenial  # epoch ('5:') and codename suffix added
+        #   18.06.1~ce~3-0~ubuntu ...
+        #   17.06.0~ce-0~ubuntu          # codename suffix deleted
+        #   17.03.2~ce-0~ubuntu-xenial ...
+        #   1.12.3-0ubuntu4~16.10.2, 1.12.3-0ubuntu4~16.04.2
+        target_ver = gem_ver(version)
+        if target_ver < gem_ver('1.12.4-0')
+          "#{version}~#{node['lsb']['codename']}"
+        elsif target_ver < gem_ver('17.06') || target_ver > gem_ver('18.06.99')
+          "#{version}~#{platform}-#{node['lsb']['codename']}"
+        else  # 17.06 =< ver =< 18.06
+          "#{version}~#{platform}"
+        end
+      end
+    end
+  end
+end
index 34d5996..0c2e180 100644 (file)
@@ -35,6 +35,11 @@ enable_new_repo = node['docker-grid']['dockerproject']['enable_new_repo']
 engine_conf = node['docker-grid']['engine']
 docker_ver = engine_conf['version']
 docker_ver = '' if docker_ver.nil? || docker_ver == 'latest'
+if docker_ver.empty?
+  Chef::Log.warn('This docker-grid::engine installs the latest Docker engine.')
+else
+  Chef::Log.info("This docker-grid::engine installs the Docker engine: #{docker_ver}.")
+end
 storage_driver = engine_conf['storage-driver']
 userns_remap = engine_conf['userns-remap']
 
@@ -43,6 +48,7 @@ if engine_conf['skip_setup']
   return
 end
 
+::Chef::Recipe.send(:include, DockerGrid::Helper)
 ::Chef::Recipe.send(:include, PlatformUtils::Helper)
 ::Chef::Recipe.send(:include, PlatformUtils::VirtUtils)
 
@@ -74,16 +80,14 @@ if shell_out("cat /etc/mtab | grep -E '\s+/\s+zfs\s+'").exitstatus.zero?
 end
 
 if storage_driver == 'overlay2'
-  if !docker_ver.empty? && Gem::Version.create(docker_ver.tr('~', '-')) < Gem::Version.create('1.12')
-    # tr('~', '-') for Ubuntu.
+  if !docker_ver.empty? && gem_ver(docker_ver) < gem_ver('1.12')
     Chef::Application.fatal!('Docker version must be 1.12 or later for overlay2 storage driver.')  # and exit.
   end
 end
 load_kernel_module('overlay') if storage_driver =~ /overlay2?/
 
 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.
+  if !docker_ver.empty? && gem_ver(docker_ver) < gem_ver('1.10')
     Chef::Application.fatal!('Docker version must be 1.10 or later for userns-remap.')  # and exit.
   end
 
@@ -337,10 +341,14 @@ extra_options = engine_conf['daemon_extra_options']
 if platform_family == 'rhel' || platform == 'debian' || (platform == 'ubuntu' && platform_version == '14.04')
   # Note: docker_ver.empty? -> the latest version
   if docker_ver.empty? \
-    || Gem::Version.create(docker_ver.tr('~', '-')) >= Gem::Version.create('1.12')
+    || gem_ver(docker_ver) >= gem_ver('1.12')
     extra_options = extra_options.gsub(%r{-H\sfd://}, '')  # for frozen string.
   end
 end
+if docker_ver.empty? \
+  || gem_ver(docker_ver) > gem_ver('18.06.99')
+  extra_options = extra_options.gsub(%r{-H\sfd://}, '-H unix://')  # for frozen string.
+end
 
 docker_opts.push(extra_options) if !extra_options.nil? && !extra_options.empty?