kitchen-dokken 2.16.0 → 2.17.2

Sign up to get free protection for your applications and to get access to all the features.
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