kitchen-dokken 2.12.0 → 2.15.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/lib/kitchen/driver/dokken.rb +58 -27
- data/lib/kitchen/driver/dokken_version.rb +1 -1
- data/lib/kitchen/helpers.rb +18 -0
- data/lib/kitchen/provisioner/dokken.rb +2 -1
- metadata +5 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d549607487cae2cf1d58c9fadfed6e5c0649d085b27dc0841abf32d4a23670df
|
|
4
|
+
data.tar.gz: 4be3556b19ae6795d6c70d196913ed79f7d14971dc386f539a0321683ecdf49b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ee6f97ad4f722b828f9d0508a69224ef7ae4514b39280a3c84ae14351626939e04d7fdae779c4280efcc4d88210a37fad02dab74ad638432d8aa1e929e40e1e7
|
|
7
|
+
data.tar.gz: 5035e7f732b10ed7f9407555d612441c509985acd6d33d577d23c02c0529cd80be0f93c2c668fc0355135ed765e9844d075adfaf417de441a501858588042e2a
|
|
@@ -48,7 +48,10 @@ module Kitchen
|
|
|
48
48
|
default_config :entrypoint, nil
|
|
49
49
|
default_config :env, nil
|
|
50
50
|
default_config :hostname, "dokken"
|
|
51
|
+
default_config :hostname_aliases, nil
|
|
51
52
|
default_config :image_prefix, nil
|
|
53
|
+
default_config :ipv6, false
|
|
54
|
+
default_config :ipv6_subnet, "2001:db8:1::/64" # "2001:db8::/32 Range reserved for documentation"
|
|
52
55
|
default_config :links, nil
|
|
53
56
|
default_config :memory_limit, 0
|
|
54
57
|
default_config :network_mode, "dokken"
|
|
@@ -169,8 +172,10 @@ module Kitchen
|
|
|
169
172
|
end
|
|
170
173
|
|
|
171
174
|
def work_image_dockerfile
|
|
175
|
+
from = registry_image_path(platform_image)
|
|
176
|
+
debug("driver - Building work image from #{from}")
|
|
172
177
|
dockerfile_contents = [
|
|
173
|
-
"FROM #{
|
|
178
|
+
"FROM #{from}",
|
|
174
179
|
"LABEL X-Built-By=kitchen-dokken X-Built-From=#{platform_image}",
|
|
175
180
|
]
|
|
176
181
|
Array(config[:intermediate_instructions]).each do |c|
|
|
@@ -287,7 +292,8 @@ module Kitchen
|
|
|
287
292
|
config = {
|
|
288
293
|
"name" => runner_container_name,
|
|
289
294
|
"Cmd" => Shellwords.shellwords(self[:pid_one_command]),
|
|
290
|
-
|
|
295
|
+
# locally built image, must use short-name
|
|
296
|
+
"Image" => short_image_path(work_image),
|
|
291
297
|
"Hostname" => self[:hostname],
|
|
292
298
|
"Env" => self[:env],
|
|
293
299
|
"ExposedPorts" => exposed_ports,
|
|
@@ -310,7 +316,7 @@ module Kitchen
|
|
|
310
316
|
"NetworkingConfig" => {
|
|
311
317
|
"EndpointsConfig" => {
|
|
312
318
|
self[:network_mode] => {
|
|
313
|
-
"Aliases" => Array(self[:hostname]),
|
|
319
|
+
"Aliases" => Array(self[:hostname]).concat(Array(self[:hostname_aliases])),
|
|
314
320
|
},
|
|
315
321
|
},
|
|
316
322
|
},
|
|
@@ -329,7 +335,8 @@ module Kitchen
|
|
|
329
335
|
debug "driver - creating #{data_container_name}"
|
|
330
336
|
config = {
|
|
331
337
|
"name" => data_container_name,
|
|
332
|
-
|
|
338
|
+
# locally built image, must use short-name
|
|
339
|
+
"Image" => short_image_path(data_image),
|
|
333
340
|
"HostConfig" => {
|
|
334
341
|
"PortBindings" => port_bindings,
|
|
335
342
|
"PublishAllPorts" => true,
|
|
@@ -352,9 +359,9 @@ module Kitchen
|
|
|
352
359
|
begin
|
|
353
360
|
lockfile.lock
|
|
354
361
|
with_retries { ::Docker::Network.get("dokken", {}, docker_connection) }
|
|
355
|
-
rescue
|
|
362
|
+
rescue ::Docker::Error::NotFoundError
|
|
356
363
|
begin
|
|
357
|
-
with_retries { ::Docker::Network.create("dokken",
|
|
364
|
+
with_retries { ::Docker::Network.create("dokken", network_settings) }
|
|
358
365
|
rescue ::Docker::Error => e
|
|
359
366
|
debug "driver - error :#{e}:"
|
|
360
367
|
end
|
|
@@ -388,14 +395,14 @@ module Kitchen
|
|
|
388
395
|
config = {
|
|
389
396
|
"name" => chef_container_name,
|
|
390
397
|
"Cmd" => "true",
|
|
391
|
-
"Image" =>
|
|
398
|
+
"Image" => registry_image_path(chef_image),
|
|
392
399
|
"HostConfig" => {
|
|
393
400
|
"NetworkMode" => self[:network_mode],
|
|
394
401
|
},
|
|
395
402
|
}
|
|
396
403
|
chef_container = create_container(config)
|
|
397
404
|
state[:chef_container] = chef_container.json
|
|
398
|
-
rescue ::Docker::Error => e
|
|
405
|
+
rescue ::Docker::Error, StandardError => e
|
|
399
406
|
raise "driver - #{chef_container_name} failed to create #{e}"
|
|
400
407
|
end
|
|
401
408
|
ensure
|
|
@@ -404,12 +411,12 @@ module Kitchen
|
|
|
404
411
|
end
|
|
405
412
|
|
|
406
413
|
def pull_platform_image
|
|
407
|
-
debug "driver - pulling #{
|
|
414
|
+
debug "driver - pulling #{short_image_path(platform_image)}"
|
|
408
415
|
config[:pull_platform_image] ? pull_image(platform_image) : pull_if_missing(platform_image)
|
|
409
416
|
end
|
|
410
417
|
|
|
411
418
|
def pull_chef_image
|
|
412
|
-
debug "driver - pulling #{
|
|
419
|
+
debug "driver - pulling #{short_image_path(chef_image)}"
|
|
413
420
|
config[:pull_chef_image] ? pull_image(chef_image) : pull_if_missing(chef_image)
|
|
414
421
|
end
|
|
415
422
|
|
|
@@ -422,7 +429,7 @@ module Kitchen
|
|
|
422
429
|
|
|
423
430
|
def container_exist?(name)
|
|
424
431
|
return true if ::Docker::Container.get(name, {}, docker_connection)
|
|
425
|
-
rescue
|
|
432
|
+
rescue StandardError, ::Docker::Error::NotFoundError
|
|
426
433
|
false
|
|
427
434
|
end
|
|
428
435
|
|
|
@@ -440,10 +447,45 @@ module Kitchen
|
|
|
440
447
|
[repo, tag]
|
|
441
448
|
end
|
|
442
449
|
|
|
450
|
+
# Return the 'repo' half of a docker image path. Agnostic about if a
|
|
451
|
+
# registry is included, this effectively is just "before the colon"
|
|
452
|
+
#
|
|
453
|
+
# @param image [String] the docker image path to parse
|
|
454
|
+
# @return [String] the repo portion of `image`
|
|
443
455
|
def repo(image)
|
|
444
456
|
parse_image_name(image)[0]
|
|
445
457
|
end
|
|
446
458
|
|
|
459
|
+
# Return the 'tag' of a docker image path. Will be `latest` if there
|
|
460
|
+
# is no explicit tag in the image path.
|
|
461
|
+
#
|
|
462
|
+
# @param image [String] the docker image path to parse
|
|
463
|
+
# @return [String] the tag of `image`
|
|
464
|
+
def tag(image)
|
|
465
|
+
parse_image_name(image)[1]
|
|
466
|
+
end
|
|
467
|
+
|
|
468
|
+
# Ensures an explicit tag on an image path.
|
|
469
|
+
#
|
|
470
|
+
# @param image [String] the docker image path to parse
|
|
471
|
+
# @return [String] `repo`:`tag`
|
|
472
|
+
def short_image_path(image)
|
|
473
|
+
"#{repo(image)}:#{tag(image)}"
|
|
474
|
+
end
|
|
475
|
+
|
|
476
|
+
# Qualifies the results of `short_image_path` with any registry the
|
|
477
|
+
# user has requested
|
|
478
|
+
#
|
|
479
|
+
# @param image [String] the docker image path to parse
|
|
480
|
+
# @return [String] The most fully-qualified registry path we cn make
|
|
481
|
+
def registry_image_path(image)
|
|
482
|
+
if config[:docker_registry]
|
|
483
|
+
"#{config[:docker_registry]}/#{short_image_path(image)}"
|
|
484
|
+
else
|
|
485
|
+
short_image_path(image)
|
|
486
|
+
end
|
|
487
|
+
end
|
|
488
|
+
|
|
447
489
|
def create_container(args)
|
|
448
490
|
with_retries { @container = ::Docker::Container.get(args["name"], {}, docker_connection) }
|
|
449
491
|
rescue
|
|
@@ -511,10 +553,6 @@ module Kitchen
|
|
|
511
553
|
end
|
|
512
554
|
end
|
|
513
555
|
|
|
514
|
-
def tag(image)
|
|
515
|
-
parse_image_name(image)[1]
|
|
516
|
-
end
|
|
517
|
-
|
|
518
556
|
def chef_container_name
|
|
519
557
|
"chef-#{chef_version}"
|
|
520
558
|
end
|
|
@@ -547,7 +585,7 @@ module Kitchen
|
|
|
547
585
|
end
|
|
548
586
|
|
|
549
587
|
def pull_if_missing(image)
|
|
550
|
-
return if ::Docker::Image.exist?(
|
|
588
|
+
return if ::Docker::Image.exist?(registry_image_path(image), {}, docker_connection)
|
|
551
589
|
|
|
552
590
|
pull_image image
|
|
553
591
|
end
|
|
@@ -557,21 +595,14 @@ module Kitchen
|
|
|
557
595
|
val.sub(%r{https?://}, "").split("/").first
|
|
558
596
|
end
|
|
559
597
|
|
|
560
|
-
def image_path(image)
|
|
561
|
-
fqimage = "#{repo(image)}:#{tag(image)}"
|
|
562
|
-
if config[:docker_registry]
|
|
563
|
-
fqimage = "#{config[:docker_registry]}/#{fqimage}"
|
|
564
|
-
end
|
|
565
|
-
fqimage
|
|
566
|
-
end
|
|
567
|
-
|
|
568
598
|
def pull_image(image)
|
|
599
|
+
path = registry_image_path(image)
|
|
569
600
|
with_retries do
|
|
570
|
-
if Docker::Image.exist?(
|
|
571
|
-
original_image = Docker::Image.get(
|
|
601
|
+
if Docker::Image.exist?(path, {}, docker_connection)
|
|
602
|
+
original_image = Docker::Image.get(path, {}, docker_connection)
|
|
572
603
|
end
|
|
573
604
|
|
|
574
|
-
new_image = Docker::Image.create({ "fromImage" =>
|
|
605
|
+
new_image = Docker::Image.create({ "fromImage" => path }, {}, docker_connection)
|
|
575
606
|
|
|
576
607
|
!(original_image && original_image.id.start_with?(new_image.id))
|
|
577
608
|
end
|
data/lib/kitchen/helpers.rb
CHANGED
|
@@ -117,6 +117,8 @@ VOLUME /opt/verifier
|
|
|
117
117
|
end
|
|
118
118
|
|
|
119
119
|
def docker_info
|
|
120
|
+
::Docker.url = default_docker_host
|
|
121
|
+
|
|
120
122
|
@docker_info ||= ::Docker.info
|
|
121
123
|
rescue Excon::Error::Socket
|
|
122
124
|
puts "kitchen-dokken could not connect to the docker host at #{default_docker_host}. Is docker running?"
|
|
@@ -175,6 +177,21 @@ VOLUME /opt/verifier
|
|
|
175
177
|
coerce_exposed_ports(config[:ports])
|
|
176
178
|
end
|
|
177
179
|
|
|
180
|
+
def network_settings
|
|
181
|
+
if self[:ipv6]
|
|
182
|
+
{
|
|
183
|
+
"EnableIPv6" => true,
|
|
184
|
+
"IPAM" => {
|
|
185
|
+
"Config" => [{
|
|
186
|
+
"Subnet" => self[:ipv6_subnet],
|
|
187
|
+
}],
|
|
188
|
+
},
|
|
189
|
+
}
|
|
190
|
+
else
|
|
191
|
+
{}
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
178
195
|
def port_bindings
|
|
179
196
|
coerce_port_bindings(config[:ports])
|
|
180
197
|
end
|
|
@@ -244,6 +261,7 @@ VOLUME /opt/verifier
|
|
|
244
261
|
end
|
|
245
262
|
|
|
246
263
|
def remote_docker_host?
|
|
264
|
+
return false if config[:docker_info]["OperatingSystem"].include?("Docker Desktop")
|
|
247
265
|
return false if config[:docker_info]["OperatingSystem"].include?("Boot2Docker")
|
|
248
266
|
return true if /^tcp:/.match?(config[:docker_host_url])
|
|
249
267
|
|
|
@@ -109,12 +109,13 @@ module Kitchen
|
|
|
109
109
|
cmd << " -c /opt/kitchen/client.rb"
|
|
110
110
|
cmd << " -j /opt/kitchen/dna.json"
|
|
111
111
|
cmd << "--profile-ruby" if config[:profile_ruby]
|
|
112
|
+
cmd << "--slow-report" if config[:slow_resource_report]
|
|
112
113
|
|
|
113
114
|
chef_cmd(cmd)
|
|
114
115
|
end
|
|
115
116
|
|
|
116
117
|
def write_run_command(command)
|
|
117
|
-
File.write("#{dokken_kitchen_sandbox}/run_command", command)
|
|
118
|
+
File.write("#{dokken_kitchen_sandbox}/run_command", command, mode: "wb")
|
|
118
119
|
end
|
|
119
120
|
|
|
120
121
|
def runner_container_name
|
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.15.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: 2021-
|
|
11
|
+
date: 2021-10-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: docker-api
|
|
@@ -53,7 +53,7 @@ dependencies:
|
|
|
53
53
|
version: '1.15'
|
|
54
54
|
- - "<"
|
|
55
55
|
- !ruby/object:Gem::Version
|
|
56
|
-
version: '
|
|
56
|
+
version: '4'
|
|
57
57
|
type: :runtime
|
|
58
58
|
prerelease: false
|
|
59
59
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -63,7 +63,7 @@ dependencies:
|
|
|
63
63
|
version: '1.15'
|
|
64
64
|
- - "<"
|
|
65
65
|
- !ruby/object:Gem::Version
|
|
66
|
-
version: '
|
|
66
|
+
version: '4'
|
|
67
67
|
description: A Test Kitchen Driver for Docker & Chef Infra optimized for rapid testing
|
|
68
68
|
using Chef Infra docker images
|
|
69
69
|
email:
|
|
@@ -97,7 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
97
97
|
- !ruby/object:Gem::Version
|
|
98
98
|
version: '0'
|
|
99
99
|
requirements: []
|
|
100
|
-
rubygems_version: 3.
|
|
100
|
+
rubygems_version: 3.2.22
|
|
101
101
|
signing_key:
|
|
102
102
|
specification_version: 4
|
|
103
103
|
summary: A Test Kitchen Driver for Docker & Chef Infra optimized for rapid testing
|