Enabled: false
Metrics/AbcSize:
Enabled: false
+Metrics/CyclomaticComplexity:
+ Max: 7
+Metrics/MethodLength:
+ Max: 17
Style/BlockComments:
Enabled: false
Style/BlockDelimiters:
Max: 4
#Style/AccessorMethodName:
# Enabled: false
-#Metrics/MethodLength:
-# Max: 15
#Style/ModuleLength:
# Max: 150
# docker-grid CHANGELOG
+1.3.3
+-----
+- adds docker-ce-18.09 support.
+
1.3.2
-----
- adds the latest Ubuntu support.
'.foodcritic',
'.rubocop.yml',
'Berksfile',
+ 'chefignore',
'concourse.yml',
'fly-vars.yml',
'fly-vars.local.yml',
[
'Rakefile',
+ 'chefignore',
'concourse.yml',
'fly-vars.yml',
'Gemfile',
# limitations under the License.
#
+::Chef::Node::Attribute.send(:include, DockerGrid::Helper)
+
platform = node['platform']
default['docker-grid']['install_flavor'] = 'dockerproject' # or 'os-repository'
# 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'
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
--- /dev/null
+# 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/*
--- /dev/null
+#
+# 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
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']
return
end
+::Chef::Recipe.send(:include, DockerGrid::Helper)
::Chef::Recipe.send(:include, PlatformUtils::Helper)
::Chef::Recipe.send(:include, PlatformUtils::VirtUtils)
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
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?