lib/kitchen/driver/docker.rb in kitchen-docker-2.10.0 vs lib/kitchen/driver/docker.rb in kitchen-docker-2.11.0
- old
+ new
@@ -1,164 +1,165 @@
-#
-# Copyright (C) 2014, Sean Porter
-#
-# 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.
-
-require 'kitchen'
-require 'json'
-require 'securerandom'
-require 'net/ssh'
-
-require 'kitchen/driver/base'
-
-require_relative '../docker/container/linux'
-require_relative '../docker/container/windows'
-require_relative '../docker/helpers/cli_helper'
-require_relative '../docker/helpers/container_helper'
-
-module Kitchen
- module Driver
- # Docker driver for Kitchen.
- #
- # @author Sean Porter <portertech@gmail.com>
- class Docker < Kitchen::Driver::Base
- include Kitchen::Docker::Helpers::CliHelper
- include Kitchen::Docker::Helpers::ContainerHelper
- include ShellOut
-
- default_config :binary, 'docker'
- default_config :build_options, nil
- default_config :cap_add, nil
- default_config :cap_drop, nil
- default_config :disable_upstart, true
- default_config :env_variables, nil
- default_config :interactive, false
- default_config :private_key, File.join(Dir.pwd, '.kitchen', 'docker_id_rsa')
- default_config :privileged, false
- default_config :public_key, File.join(Dir.pwd, '.kitchen', 'docker_id_rsa.pub')
- default_config :publish_all, false
- default_config :remove_images, false
- default_config :run_options, nil
- default_config :security_opt, nil
- default_config :tls, false
- default_config :tls_cacert, nil
- default_config :tls_cert, nil
- default_config :tls_key, nil
- default_config :tls_verify, false
- default_config :tty, false
- default_config :use_cache, true
- default_config :use_internal_docker_network, false
- default_config :use_sudo, false
- default_config :wait_for_transport, true
-
- default_config :build_context do |driver|
- !driver.remote_socket?
- end
-
- default_config :image do |driver|
- driver.default_image
- end
-
- default_config :instance_name do |driver|
- # Borrowed from kitchen-rackspace
- [
- driver.instance.name.gsub(/\W/, ''),
- (Etc.getlogin || 'nologin').gsub(/\W/, ''),
- Socket.gethostname.gsub(/\W/, '')[0..20],
- Array.new(8) { rand(36).to_s(36) }.join
- ].join('-')
- end
-
- default_config :platform do |driver|
- driver.default_platform
- end
-
- default_config :run_command do |driver|
- if driver.windows_os?
- # Launch arbitrary process to keep the Windows container alive
- # If running in interactive mode, launch powershell.exe instead
- if driver[:interactive]
- 'powershell.exe'
- else
- 'ping -t localhost'
- end
- else
- '/usr/sbin/sshd -D -o UseDNS=no -o UsePAM=no -o PasswordAuthentication=yes '\
- '-o UsePrivilegeSeparation=no -o PidFile=/tmp/sshd.pid'
- end
- end
-
- default_config :socket do |driver|
- socket = 'unix:///var/run/docker.sock'
- socket = 'npipe:////./pipe/docker_engine' if driver.windows_os?
- ENV['DOCKER_HOST'] || socket
- end
-
- default_config :username do |driver|
- # Return nil to prevent username from being added to Docker
- # command line args for Windows if a username was not specified
- if driver.windows_os?
- nil
- else
- 'kitchen'
- end
- end
-
- def verify_dependencies
- run_command("#{config[:binary]} >> #{dev_null} 2>&1", quiet: true, use_sudo: config[:use_sudo])
- rescue
- raise UserError, 'You must first install the Docker CLI tool https://www.docker.com/get-started'
- end
-
- def create(state)
- container.create(state)
-
- wait_for_transport(state)
- end
-
- def destroy(state)
- container.destroy(state)
- end
-
- def wait_for_transport(state)
- if config[:wait_for_transport]
- instance.transport.connection(state) do |conn|
- conn.wait_until_ready
- end
- end
- end
-
- def default_image
- platform, release = instance.platform.name.split('-')
- if platform == 'centos' && release
- release = 'centos' + release.split('.').first
- end
- release ? [platform, release].join(':') : platform
- end
-
- def default_platform
- instance.platform.name.split('-').first
- end
-
- protected
-
- def container
- @container ||= if windows_os?
- Kitchen::Docker::Container::Windows.new(config)
- else
- Kitchen::Docker::Container::Linux.new(config)
- end
- @container
- end
- end
- end
-end
+#
+# Copyright (C) 2014, Sean Porter
+#
+# 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.
+
+require 'kitchen'
+require 'json'
+require 'securerandom'
+require 'net/ssh'
+
+require 'kitchen/driver/base'
+
+require_relative '../docker/container/linux'
+require_relative '../docker/container/windows'
+require_relative '../docker/helpers/cli_helper'
+require_relative '../docker/helpers/container_helper'
+
+module Kitchen
+ module Driver
+ # Docker driver for Kitchen.
+ #
+ # @author Sean Porter <portertech@gmail.com>
+ class Docker < Kitchen::Driver::Base
+ include Kitchen::Docker::Helpers::CliHelper
+ include Kitchen::Docker::Helpers::ContainerHelper
+ include ShellOut
+
+ default_config :binary, 'docker'
+ default_config :build_options, nil
+ default_config :cap_add, nil
+ default_config :cap_drop, nil
+ default_config :disable_upstart, true
+ default_config :env_variables, nil
+ default_config :isolation, nil
+ default_config :interactive, false
+ default_config :private_key, File.join(Dir.pwd, '.kitchen', 'docker_id_rsa')
+ default_config :privileged, false
+ default_config :public_key, File.join(Dir.pwd, '.kitchen', 'docker_id_rsa.pub')
+ default_config :publish_all, false
+ default_config :remove_images, false
+ default_config :run_options, nil
+ default_config :security_opt, nil
+ default_config :tls, false
+ default_config :tls_cacert, nil
+ default_config :tls_cert, nil
+ default_config :tls_key, nil
+ default_config :tls_verify, false
+ default_config :tty, false
+ default_config :use_cache, true
+ default_config :use_internal_docker_network, false
+ default_config :use_sudo, false
+ default_config :wait_for_transport, true
+
+ default_config :build_context do |driver|
+ !driver.remote_socket?
+ end
+
+ default_config :image do |driver|
+ driver.default_image
+ end
+
+ default_config :instance_name do |driver|
+ # Borrowed from kitchen-rackspace
+ [
+ driver.instance.name.gsub(/\W/, ''),
+ (Etc.getlogin || 'nologin').gsub(/\W/, ''),
+ Socket.gethostname.gsub(/\W/, '')[0..20],
+ Array.new(8) { rand(36).to_s(36) }.join
+ ].join('-').downcase
+ end
+
+ default_config :platform do |driver|
+ driver.default_platform
+ end
+
+ default_config :run_command do |driver|
+ if driver.windows_os?
+ # Launch arbitrary process to keep the Windows container alive
+ # If running in interactive mode, launch powershell.exe instead
+ if driver[:interactive]
+ 'powershell.exe'
+ else
+ 'ping -t localhost'
+ end
+ else
+ '/usr/sbin/sshd -D -o UseDNS=no -o UsePAM=no -o PasswordAuthentication=yes '\
+ '-o UsePrivilegeSeparation=no -o PidFile=/tmp/sshd.pid'
+ end
+ end
+
+ default_config :socket do |driver|
+ socket = 'unix:///var/run/docker.sock'
+ socket = 'npipe:////./pipe/docker_engine' if driver.windows_os?
+ ENV['DOCKER_HOST'] || socket
+ end
+
+ default_config :username do |driver|
+ # Return nil to prevent username from being added to Docker
+ # command line args for Windows if a username was not specified
+ if driver.windows_os?
+ nil
+ else
+ 'kitchen'
+ end
+ end
+
+ def verify_dependencies
+ run_command("#{config[:binary]} >> #{dev_null} 2>&1", quiet: true, use_sudo: config[:use_sudo])
+ rescue
+ raise UserError, 'You must first install the Docker CLI tool https://www.docker.com/get-started'
+ end
+
+ def create(state)
+ container.create(state)
+
+ wait_for_transport(state)
+ end
+
+ def destroy(state)
+ container.destroy(state)
+ end
+
+ def wait_for_transport(state)
+ if config[:wait_for_transport]
+ instance.transport.connection(state) do |conn|
+ conn.wait_until_ready
+ end
+ end
+ end
+
+ def default_image
+ platform, release = instance.platform.name.split('-')
+ if platform == 'centos' && release
+ release = 'centos' + release.split('.').first
+ end
+ release ? [platform, release].join(':') : platform
+ end
+
+ def default_platform
+ instance.platform.name.split('-').first
+ end
+
+ protected
+
+ def container
+ @container ||= if windows_os?
+ Kitchen::Docker::Container::Windows.new(config)
+ else
+ Kitchen::Docker::Container::Linux.new(config)
+ end
+ @container
+ end
+ end
+ end
+end