kitchen-dokken 2.16.0 → 2.17.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8c1eb7ea3b8b7026368f17e936583541737f204457ac3717a1d30107635330f9
4
- data.tar.gz: 2606b5d2255543272111230715c7b6a050e3e58b7957d6335265d884059e52db
3
+ metadata.gz: f67251f6bccb051c90cfdc31f414a7319d9c915c2cca6a512cb73583488581e1
4
+ data.tar.gz: 3b1a1a6548831088fa4f775ccbb01d3f98e8d357f3495799fc841048668a8eb7
5
5
  SHA512:
6
- metadata.gz: 5c91016a21ae59923337c4e91fb61ef3920918da3340b24427392b325a812d016727c98482409eaeee9c825074a3b5559e669c4bc4ac5e67bd5bf5b6fdf43347
7
- data.tar.gz: 388e6ba61fc2c4d2ba88e28780e4b541dc7dffe426f4250d7a6a99b52bbb1c0c98f6c9ae6bc306bdd640273b41f2852e83a851556d5a226aa1912bc4a04f02ff
6
+ metadata.gz: 8cd2b0ad664f9cb28fd2788bb7cd41e0ae3316c7b67283be934b37b94d8d85e617bb171d67f1b595183cf533b4820e88ca72fabdb530343c5ba7bfb9b693193d
7
+ data.tar.gz: 1dc14374c7abf5a99de55559ded7537ab5e6e1b97c5f8d69f9724714b90f02f5536991c63da3368c31bfb7aa772609aab6adc48aa3ba09939408805e7321ab97
@@ -20,6 +20,7 @@ require "kitchen"
20
20
  require "tmpdir" unless defined?(Dir.mktmpdir)
21
21
  require "docker"
22
22
  require "lockfile"
23
+ require "base64" unless defined?(Base64)
23
24
  require_relative "../helpers"
24
25
 
25
26
  include Dokken::Helpers
@@ -66,9 +67,14 @@ module Kitchen
66
67
  default_config :userns_host, false
67
68
  default_config :volumes, nil
68
69
  default_config :write_timeout, 3600
70
+ default_config :creds_file, nil
71
+ default_config :docker_config_creds, false
69
72
 
70
73
  # (see Base#create)
71
74
  def create(state)
75
+ # Authenticate the private registry
76
+ authenticate!
77
+
72
78
  # image to config
73
79
  pull_platform_image
74
80
 
@@ -410,6 +416,50 @@ module Kitchen
410
416
  end
411
417
  end
412
418
 
419
+ def authenticate!
420
+ # No need to authenticate if the credentials are empty
421
+ return if docker_creds.empty?
422
+
423
+ ::Docker.authenticate! docker_creds
424
+ end
425
+
426
+ def docker_creds
427
+ @docker_creds ||= if config[:creds_file]
428
+ JSON.parse(IO.read(config[:creds_file]))
429
+ else
430
+ {}
431
+ end
432
+ end
433
+
434
+ def docker_config_creds
435
+ return @docker_config_creds if @docker_config_creds
436
+
437
+ @docker_config_creds = {}
438
+ config_file = ::File.join(::Dir.home, ".docker", "config.json")
439
+ JSON.load_file!(config_file)["auths"].each do |k, v|
440
+ next if v["auth"].nil?
441
+
442
+ username, password = Base64.decode64(v["auth"]).split(":")
443
+ @docker_config_creds[k] = { serveraddress: k, username: username, password: password }
444
+ end
445
+
446
+ @docker_config_creds
447
+ end
448
+
449
+ def docker_creds_for_image(image)
450
+ return docker_creds if config[:creds_file]
451
+
452
+ image_registry = image.split("/").first
453
+
454
+ # NOTE: Try to use DockerHub auth if exact registry match isn't found
455
+ default_registry = "https://index.docker.io/v1/"
456
+ if docker_config_creds.key?(image_registry)
457
+ docker_config_creds[image_registry]
458
+ elsif docker_config_creds.key?(default_registry)
459
+ docker_config_creds[default_registry]
460
+ end
461
+ end
462
+
413
463
  def pull_platform_image
414
464
  debug "driver - pulling #{short_image_path(platform_image)}"
415
465
  config[:pull_platform_image] ? pull_image(platform_image) : pull_if_missing(platform_image)
@@ -602,7 +652,7 @@ module Kitchen
602
652
  original_image = Docker::Image.get(path, {}, docker_connection)
603
653
  end
604
654
 
605
- new_image = Docker::Image.create({ "fromImage" => path }, {}, docker_connection)
655
+ new_image = Docker::Image.create({ "fromImage" => path }, docker_creds_for_image(image), docker_connection)
606
656
 
607
657
  !(original_image && original_image.id.start_with?(new_image.id))
608
658
  end
@@ -18,6 +18,6 @@
18
18
  module Kitchen
19
19
  module Driver
20
20
  # Version string for Dokken Kitchen driver
21
- DOKKEN_VERSION = "2.16.0".freeze
21
+ DOKKEN_VERSION = "2.17.2".freeze
22
22
  end
23
23
  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.16.0
4
+ version: 2.17.2
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-10-23 00:00:00.000000000 Z
11
+ date: 2022-06-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: docker-api
@@ -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.2.22
100
+ rubygems_version: 3.2.3
101
101
  signing_key:
102
102
  specification_version: 4
103
103
  summary: A Test Kitchen Driver for Docker & Chef Infra optimized for rapid testing