kitchen-dokken 2.19.1 → 2.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +19 -0
- data/Rakefile +9 -0
- data/kitchen-dokken.gemspec +23 -0
- data/lib/kitchen/driver/dokken.rb +34 -13
- data/lib/kitchen/driver/dokken_version.rb +1 -1
- data/lib/kitchen/helpers.rb +15 -3
- data/lib/kitchen/provisioner/dokken.rb +1 -1
- data/lib/kitchen/transport/dokken.rb +8 -2
- metadata +6 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7968068f2971454ab8aae38e6a448c513bb094b908fdbd98272b545ed4eb84ed
|
|
4
|
+
data.tar.gz: cff7edf63103c4337eddd245b1ee8a247516c1cb67c45d14747e143b652d1522
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3b82a6d24f3ceb8619c8ee4ac3b0f72156efa678dead489fbe812ae3bb8114a864a89ed794aa70dd0a5e7d0f94daf7cd7cdabbca69302c8df0f1ef9f9e4af2a3
|
|
7
|
+
data.tar.gz: be4ebb93a209623830ec4333d82dd82d845ae1e5077c65a60a5bb771665eef897d97d8c84536e21c498a2ef6722357cacd40d0e7691ce9ba852a624a8edd774b
|
data/Gemfile
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
source "https://rubygems.org"
|
|
2
|
+
|
|
3
|
+
# Specify your gem's dependencies in kitchen-dokken.gemspec
|
|
4
|
+
gemspec
|
|
5
|
+
|
|
6
|
+
group :test do
|
|
7
|
+
gem "berkshelf"
|
|
8
|
+
gem "kitchen-inspec"
|
|
9
|
+
gem "rake", ">= 11.0"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
group :development do
|
|
13
|
+
gem "pry"
|
|
14
|
+
gem "pry-byebug"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
group :chefstyle do
|
|
18
|
+
gem "chefstyle", "2.2.3"
|
|
19
|
+
end
|
data/Rakefile
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
lib = File.expand_path("lib", __dir__)
|
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
3
|
+
require "kitchen/driver/dokken_version"
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |spec|
|
|
6
|
+
spec.name = "kitchen-dokken"
|
|
7
|
+
spec.version = Kitchen::Driver::DOKKEN_VERSION
|
|
8
|
+
spec.authors = ["Sean OMeara"]
|
|
9
|
+
spec.email = ["sean@sean.io"]
|
|
10
|
+
spec.description = "A Test Kitchen Driver for Docker & Chef Infra optimized for rapid testing using Chef Infra docker images"
|
|
11
|
+
spec.summary = "A Test Kitchen Driver for Docker & Chef Infra optimized for rapid testing using Chef Infra docker images"
|
|
12
|
+
spec.homepage = "https://github.com/test-kitchen/kitchen-dokken"
|
|
13
|
+
spec.license = "Apache-2.0"
|
|
14
|
+
|
|
15
|
+
spec.files = %w{LICENSE kitchen-dokken.gemspec Gemfile Rakefile} + Dir.glob("lib/**/*")
|
|
16
|
+
spec.require_paths = ["lib"]
|
|
17
|
+
|
|
18
|
+
spec.required_ruby_version = ">= 2.7"
|
|
19
|
+
|
|
20
|
+
spec.add_dependency "docker-api", ">= 1.33", "< 3"
|
|
21
|
+
spec.add_dependency "lockfile", "~> 2.1"
|
|
22
|
+
spec.add_dependency "test-kitchen", ">= 1.15", "< 4"
|
|
23
|
+
end
|
|
@@ -69,6 +69,7 @@ module Kitchen
|
|
|
69
69
|
default_config :userns_host, false
|
|
70
70
|
default_config :volumes, nil
|
|
71
71
|
default_config :write_timeout, 3600
|
|
72
|
+
default_config :user_ns_mode, nil
|
|
72
73
|
default_config :creds_file, nil
|
|
73
74
|
default_config :docker_config_creds, false
|
|
74
75
|
|
|
@@ -90,7 +91,7 @@ module Kitchen
|
|
|
90
91
|
# data
|
|
91
92
|
dokken_create_sandbox
|
|
92
93
|
|
|
93
|
-
if remote_docker_host?
|
|
94
|
+
if remote_docker_host? || running_inside_docker?
|
|
94
95
|
make_data_image
|
|
95
96
|
start_data_container state
|
|
96
97
|
end
|
|
@@ -106,7 +107,7 @@ module Kitchen
|
|
|
106
107
|
end
|
|
107
108
|
|
|
108
109
|
def destroy(_state)
|
|
109
|
-
if remote_docker_host?
|
|
110
|
+
if remote_docker_host? || running_inside_docker?
|
|
110
111
|
stop_data_container
|
|
111
112
|
delete_data_container
|
|
112
113
|
end
|
|
@@ -232,15 +233,13 @@ module Kitchen
|
|
|
232
233
|
end
|
|
233
234
|
|
|
234
235
|
def work_image
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
instance_name
|
|
236
|
+
[image_prefix, instance_name].compact.join("/").downcase
|
|
238
237
|
end
|
|
239
238
|
|
|
240
239
|
def dokken_binds
|
|
241
240
|
ret = []
|
|
242
|
-
ret << "#{dokken_kitchen_sandbox}:/opt/kitchen" unless dokken_kitchen_sandbox.nil? || remote_docker_host?
|
|
243
|
-
ret << "#{dokken_verifier_sandbox}:/opt/verifier" unless dokken_verifier_sandbox.nil? || remote_docker_host?
|
|
241
|
+
ret << "#{dokken_kitchen_sandbox}:/opt/kitchen" unless dokken_kitchen_sandbox.nil? || remote_docker_host? || running_inside_docker?
|
|
242
|
+
ret << "#{dokken_verifier_sandbox}:/opt/verifier" unless dokken_verifier_sandbox.nil? || remote_docker_host? || running_inside_docker?
|
|
244
243
|
ret << Array(config[:binds]) unless config[:binds].nil?
|
|
245
244
|
ret.flatten
|
|
246
245
|
end
|
|
@@ -289,7 +288,7 @@ module Kitchen
|
|
|
289
288
|
def dokken_volumes_from
|
|
290
289
|
ret = []
|
|
291
290
|
ret << chef_container_name
|
|
292
|
-
ret << data_container_name if remote_docker_host?
|
|
291
|
+
ret << data_container_name if remote_docker_host? || running_inside_docker?
|
|
293
292
|
ret
|
|
294
293
|
end
|
|
295
294
|
|
|
@@ -337,6 +336,15 @@ module Kitchen
|
|
|
337
336
|
if self[:userns_host]
|
|
338
337
|
config["HostConfig"]["UsernsMode"] = "host"
|
|
339
338
|
end
|
|
339
|
+
|
|
340
|
+
if self[:privileged]
|
|
341
|
+
if self[:user_ns_mode] != "host"
|
|
342
|
+
debug "driver - privileged mode is not supported with user namespaces enabled"
|
|
343
|
+
debug "driver - changing UsernsMode from '#{self[:user_ns_mode]}' to 'host'"
|
|
344
|
+
end
|
|
345
|
+
config["HostConfig"]["UsernsMode"] = "host"
|
|
346
|
+
end
|
|
347
|
+
|
|
340
348
|
runner_container = run_container(config)
|
|
341
349
|
state[:runner_container] = runner_container.json
|
|
342
350
|
end
|
|
@@ -441,11 +449,23 @@ module Kitchen
|
|
|
441
449
|
@docker_config_creds = {}
|
|
442
450
|
config_file = ::File.join(::Dir.home, ".docker", "config.json")
|
|
443
451
|
if ::File.exist?(config_file)
|
|
444
|
-
JSON.load_file!(config_file)
|
|
445
|
-
|
|
452
|
+
config = JSON.load_file!(config_file)
|
|
453
|
+
if config["auths"]
|
|
454
|
+
config["auths"].each do |k, v|
|
|
455
|
+
next if v["auth"].nil?
|
|
456
|
+
|
|
457
|
+
username, password = Base64.decode64(v["auth"]).split(":")
|
|
458
|
+
@docker_config_creds[k] = { serveraddress: k, username: username, password: password }
|
|
459
|
+
end
|
|
460
|
+
end
|
|
446
461
|
|
|
447
|
-
|
|
448
|
-
|
|
462
|
+
if config["credHelpers"]
|
|
463
|
+
config["credHelpers"].each do |k, v|
|
|
464
|
+
@docker_config_creds[k] = Proc.new do
|
|
465
|
+
c = JSON.parse(`echo #{k} | docker-credential-#{v} get`)
|
|
466
|
+
{ serveraddress: c["ServerURL"], username: c["Username"], password: c["Secret"] }
|
|
467
|
+
end
|
|
468
|
+
end
|
|
449
469
|
end
|
|
450
470
|
else
|
|
451
471
|
debug("~/.docker/config.json does not exist")
|
|
@@ -462,7 +482,8 @@ module Kitchen
|
|
|
462
482
|
# NOTE: Try to use DockerHub auth if exact registry match isn't found
|
|
463
483
|
default_registry = "https://index.docker.io/v1/"
|
|
464
484
|
if docker_config_creds.key?(image_registry)
|
|
465
|
-
docker_config_creds[image_registry]
|
|
485
|
+
c = docker_config_creds[image_registry]
|
|
486
|
+
c.respond_to?(:call) ? c.call : c
|
|
466
487
|
elsif docker_config_creds.key?(default_registry)
|
|
467
488
|
docker_config_creds[default_registry]
|
|
468
489
|
end
|
data/lib/kitchen/helpers.rb
CHANGED
|
@@ -3,6 +3,7 @@ module Dokken
|
|
|
3
3
|
# https://stackoverflow.com/questions/517219/ruby-see-if-a-port-is-open
|
|
4
4
|
require "socket" unless defined?(Socket)
|
|
5
5
|
require "timeout" unless defined?(Timeout)
|
|
6
|
+
require "resolv" unless defined?(Resolv)
|
|
6
7
|
|
|
7
8
|
def port_open?(ip, port)
|
|
8
9
|
begin
|
|
@@ -170,7 +171,7 @@ module Dokken
|
|
|
170
171
|
|
|
171
172
|
def instance_name
|
|
172
173
|
prefix = (Digest::SHA2.hexdigest FileUtils.pwd)[0, 10]
|
|
173
|
-
"#{prefix}-#{instance.name}"
|
|
174
|
+
"#{prefix}-#{instance.name}".downcase
|
|
174
175
|
end
|
|
175
176
|
|
|
176
177
|
def exposed_ports
|
|
@@ -268,6 +269,17 @@ module Dokken
|
|
|
268
269
|
false
|
|
269
270
|
end
|
|
270
271
|
|
|
272
|
+
def running_inside_docker?
|
|
273
|
+
File.file?("/.dockerenv")
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
def running_inside_docker_desktop?
|
|
277
|
+
Resolv.getaddress "host.docker.internal."
|
|
278
|
+
true
|
|
279
|
+
rescue
|
|
280
|
+
false
|
|
281
|
+
end
|
|
282
|
+
|
|
271
283
|
def sandbox_path
|
|
272
284
|
"#{Dir.home}/.dokken/verifier_sandbox/#{instance_name}"
|
|
273
285
|
end
|
|
@@ -300,7 +312,7 @@ module Kitchen
|
|
|
300
312
|
|
|
301
313
|
def instance_name
|
|
302
314
|
prefix = (Digest::SHA2.hexdigest FileUtils.pwd)[0, 10]
|
|
303
|
-
"#{prefix}-#{instance.name}"
|
|
315
|
+
"#{prefix}-#{instance.name}".downcase
|
|
304
316
|
end
|
|
305
317
|
end
|
|
306
318
|
end
|
|
@@ -322,7 +334,7 @@ module Kitchen
|
|
|
322
334
|
|
|
323
335
|
def instance_name
|
|
324
336
|
prefix = (Digest::SHA2.hexdigest FileUtils.pwd)[0, 10]
|
|
325
|
-
"#{prefix}-#{instance.name}"
|
|
337
|
+
"#{prefix}-#{instance.name}".downcase
|
|
326
338
|
end
|
|
327
339
|
|
|
328
340
|
def call(state)
|
|
@@ -58,7 +58,7 @@ module Kitchen
|
|
|
58
58
|
create_sandbox
|
|
59
59
|
write_run_command(run_command)
|
|
60
60
|
instance.transport.connection(state) do |conn|
|
|
61
|
-
if remote_docker_host?
|
|
61
|
+
if remote_docker_host? || running_inside_docker?
|
|
62
62
|
info("Transferring files to #{instance.to_str}")
|
|
63
63
|
conn.upload(sandbox_dirs, config[:root_path])
|
|
64
64
|
end
|
|
@@ -45,7 +45,13 @@ module Kitchen
|
|
|
45
45
|
default_config :write_timeout, 3600
|
|
46
46
|
default_config :login_command, "docker"
|
|
47
47
|
default_config :host_ip_override do |transport|
|
|
48
|
-
|
|
48
|
+
if running_inside_docker_desktop?
|
|
49
|
+
"host.docker.internal"
|
|
50
|
+
elsif transport.docker_for_mac_or_win?
|
|
51
|
+
"localhost"
|
|
52
|
+
else
|
|
53
|
+
false
|
|
54
|
+
end
|
|
49
55
|
end
|
|
50
56
|
|
|
51
57
|
# (see Base#connection)
|
|
@@ -212,7 +218,7 @@ module Kitchen
|
|
|
212
218
|
#
|
|
213
219
|
# @return [TrueClass,FalseClass]
|
|
214
220
|
def docker_for_mac_or_win?
|
|
215
|
-
::Docker.info(::Docker::Connection.new(config[:docker_host_url], {}))["Name"] == "
|
|
221
|
+
::Docker.info(::Docker::Connection.new(config[:docker_host_url], {}))["Name"] == "docker-desktop"
|
|
216
222
|
rescue
|
|
217
223
|
false
|
|
218
224
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kitchen-dokken
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.20.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sean OMeara
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-
|
|
11
|
+
date: 2023-11-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: docker-api
|
|
@@ -72,7 +72,10 @@ executables: []
|
|
|
72
72
|
extensions: []
|
|
73
73
|
extra_rdoc_files: []
|
|
74
74
|
files:
|
|
75
|
+
- Gemfile
|
|
75
76
|
- LICENSE
|
|
77
|
+
- Rakefile
|
|
78
|
+
- kitchen-dokken.gemspec
|
|
76
79
|
- lib/kitchen/driver/dokken.rb
|
|
77
80
|
- lib/kitchen/driver/dokken_version.rb
|
|
78
81
|
- lib/kitchen/helpers.rb
|
|
@@ -97,7 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
97
100
|
- !ruby/object:Gem::Version
|
|
98
101
|
version: '0'
|
|
99
102
|
requirements: []
|
|
100
|
-
rubygems_version: 3.
|
|
103
|
+
rubygems_version: 3.4.10
|
|
101
104
|
signing_key:
|
|
102
105
|
specification_version: 4
|
|
103
106
|
summary: A Test Kitchen Driver for Docker & Chef Infra optimized for rapid testing
|