From c4336a0421a8acab76814f742bf5d52d96556376 Mon Sep 17 00:00:00 2001 From: Ashique Saidalavi Date: Wed, 8 Jan 2025 04:46:38 +0530 Subject: [PATCH 1/2] Fixed the issue with the remote docker host url on windows Signed-off-by: Ashique Saidalavi --- lib/kitchen/helpers.rb | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/lib/kitchen/helpers.rb b/lib/kitchen/helpers.rb index dca6f3a..dd7ab89 100644 --- a/lib/kitchen/helpers.rb +++ b/lib/kitchen/helpers.rb @@ -4,6 +4,8 @@ module Helpers require "socket" unless defined?(Socket) require "timeout" unless defined?(Timeout) require "resolv" unless defined?(Resolv) + require "rubygems/package" + require "stringio" def port_open?(ip, port) begin @@ -91,17 +93,46 @@ def data_dockerfile(registry) def create_data_image(registry) return if ::Docker::Image.exist?(data_image) + docker_file_content = data_dockerfile(registry) + keys_content = insecure_ssh_public_key + i = if remote_docker_host? + build_docker_image_from_tar(docker_file_content, keys_content) + else + build_docker_image_from_dir(docker_file_content, keys_content) + end + + i.tag("repo" => repo(data_image), "tag" => tag(data_image), "force" => true) + end + + def build_docker_image_from_tar(docker_file_content, keys_content) + tar_io = StringIO.new + Gem::Package::TarWriter.new(tar_io) do |tar| + tar.add_file_simple('Dockerfile', 0644, docker_file_content.bytesize) do |io| + io.write docker_file_content + end + + tar.add_file_simple('authorized_keys', 0644, keys_content.bytesize) do |io| + io.write keys_content + end + end + + tar_io.rewind + + # Pass the tarball to Docker + Docker::Image.build_from_tar(tar_io) + end + + def build_docker_image_from_dir(docker_file_content, keys_content) tmpdir = Dir.tmpdir FileUtils.mkdir_p "#{tmpdir}/dokken" - File.write("#{tmpdir}/dokken/Dockerfile", data_dockerfile(registry)) - File.write("#{tmpdir}/dokken/authorized_keys", insecure_ssh_public_key) + File.write("#{tmpdir}/dokken/Dockerfile", docker_file_content) + File.write("#{tmpdir}/dokken/authorized_keys", keys_content) - i = ::Docker::Image.build_from_dir( + ::Docker::Image.build_from_dir( "#{tmpdir}/dokken", "nocache" => true, "rm" => true ) - i.tag("repo" => repo(data_image), "tag" => tag(data_image), "force" => true) end def default_docker_host From ca14d5121e608e2845690a86985a16778efdf4ce Mon Sep 17 00:00:00 2001 From: Ashique Saidalavi Date: Tue, 21 Jan 2025 19:19:10 +0000 Subject: [PATCH 2/2] Fixed the windows issues Signed-off-by: Ashique Saidalavi --- lib/kitchen/driver/dokken.rb | 2 +- lib/kitchen/helpers.rb | 13 +++++++------ lib/kitchen/transport/dokken.rb | 4 ++-- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/lib/kitchen/driver/dokken.rb b/lib/kitchen/driver/dokken.rb index ad3910e..b3bf7c6 100644 --- a/lib/kitchen/driver/dokken.rb +++ b/lib/kitchen/driver/dokken.rb @@ -404,7 +404,7 @@ def make_dokken_network debug "driver - error :#{e}:" end ensure - lockfile.unlock + lockfile.unlock if lockfile.locked? end end diff --git a/lib/kitchen/helpers.rb b/lib/kitchen/helpers.rb index dd7ab89..80f4cdc 100644 --- a/lib/kitchen/helpers.rb +++ b/lib/kitchen/helpers.rb @@ -4,8 +4,8 @@ module Helpers require "socket" unless defined?(Socket) require "timeout" unless defined?(Timeout) require "resolv" unless defined?(Resolv) - require "rubygems/package" - require "stringio" + require "rubygems/package" unless defined?(Gem::Package) + require "stringio" unless defined?(StringIO) def port_open?(ip, port) begin @@ -107,18 +107,17 @@ def create_data_image(registry) def build_docker_image_from_tar(docker_file_content, keys_content) tar_io = StringIO.new Gem::Package::TarWriter.new(tar_io) do |tar| - tar.add_file_simple('Dockerfile', 0644, docker_file_content.bytesize) do |io| + tar.add_file_simple("Dockerfile", 0644, docker_file_content.bytesize) do |io| io.write docker_file_content end - tar.add_file_simple('authorized_keys', 0644, keys_content.bytesize) do |io| + tar.add_file_simple("authorized_keys", 0644, keys_content.bytesize) do |io| io.write keys_content end end tar_io.rewind - # Pass the tarball to Docker Docker::Image.build_from_tar(tar_io) end @@ -187,7 +186,9 @@ def home_dir # refs: # https://github.com/docker/machine/issues/1814 # https://github.com/docker/toolbox/issues/607 - return Dir.home.sub "C:/Users", "/c/Users" if Dir.home =~ /^C:/ && remote_docker_host? + # + # home_dir method is no longer used in other than the lockfiles and sandbox dir. + # return Dir.home.sub "C:/Users", "/c/Users" if Dir.home =~ /^C:/ && remote_docker_host? Dir.home end diff --git a/lib/kitchen/transport/dokken.rb b/lib/kitchen/transport/dokken.rb index 9e0b75e..dd5dd4e 100644 --- a/lib/kitchen/transport/dokken.rb +++ b/lib/kitchen/transport/dokken.rb @@ -170,14 +170,14 @@ def upload(locals, remote) remote, recursive: true, ssh: { port: ssh_port, keys: ["#{tmpdir}/id_rsa"] }) + debug "Copied #{local} to #{remote}" end end end def login_command @runner = options[:instance_name].to_s - cols = `tput cols` - lines = `tput lines` + lines, cols = IO.console.winsize args = ["exec", "-e", "COLUMNS=#{cols}", "-e", "LINES=#{lines}", "-it", @runner, "/bin/bash", "-login", "-i"] LoginCommand.new(options[:login_command], args) end