kitchen-dokken 1.1.1 → 2.0.1

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
- SHA256:
3
- metadata.gz: 58e2db230012534363f80d718b772aa80f0b83508d897fc98f9512b2d185a537
4
- data.tar.gz: 125305326fa90977a660ad490be77d4c584f608805cbfde32c33f7efb2d9d08b
2
+ SHA1:
3
+ metadata.gz: 7c5b7b7002c7d29ca102d308c4181c17b6784a23
4
+ data.tar.gz: 2fd2ed37b36d7e06fc2052457ea7c55794c0a361
5
5
  SHA512:
6
- metadata.gz: ed015f54fc91069db6e59a420e0799fab5894ca514071842493f6d2345e92ae8c5aa6d69ba3f8e9c414ecc5c2e7a5bf131fcdca9763bae2d66b3f2399049769b
7
- data.tar.gz: b47b38e0bf2d5b7bbf65fd6a027767e6a8e832acd583371acb6f145022800e73edcec8df94d7bee13a07a155f1aadd48a4eea38770a7765e3e8407374b931f21
6
+ metadata.gz: 1a7a73124810ce381907b0be9d087a5de2a1fcad14c9d7f995f475d622bfd0a2c38ce82fb0b47bdee4ccef37ec487356d84e9e5fcf5fd7bcd1aaa4c47484d7c6
7
+ data.tar.gz: d9a383aae0f51ab4c6c860c63716a93eec01635a2209e890a6d277919a523c7a9600351a19082cb31774f08dc975c61712a65f0fc5204fc330ef358d4f949e0e
data/CHANGELOG.md ADDED
@@ -0,0 +1,3 @@
1
+ ## 0.1.0 / Unreleased
2
+
3
+ * Initial release
@@ -19,9 +19,9 @@ require 'digest'
19
19
  require 'kitchen'
20
20
  require 'tmpdir'
21
21
  require 'docker'
22
- require_relative 'dokken/helpers'
22
+ require_relative '../helpers'
23
23
 
24
- include Dokken::Driver::Helpers
24
+ include Dokken::Helpers
25
25
 
26
26
  # FIXME: - make true
27
27
  Excon.defaults[:ssl_verify_peer] = false
@@ -35,8 +35,8 @@ module Kitchen
35
35
  default_config :pid_one_command, 'sh -c "trap exit 0 SIGTERM; while :; do sleep 1; done"'
36
36
  default_config :image_prefix, nil
37
37
  default_config :chef_image, 'chef/chef'
38
- default_config :chef_version, 'latest'
39
- default_config :data_image, 'someara/kitchen-cache:latest'
38
+ default_config :chef_version, 'current'
39
+ default_config :data_image, 'dokken/kitchen-cache:latest'
40
40
  default_config :docker_host_url, default_docker_host
41
41
  default_config :dns, nil
42
42
  default_config :dns_search, nil
@@ -64,8 +64,12 @@ module Kitchen
64
64
  create_chef_container state
65
65
 
66
66
  # data
67
- make_data_image
68
- start_data_container state
67
+ dokken_create_sandbox
68
+
69
+ if remote_docker_host?
70
+ make_data_image
71
+ start_data_container state
72
+ end
69
73
 
70
74
  # work image
71
75
  build_work_image state
@@ -78,8 +82,11 @@ module Kitchen
78
82
  end
79
83
 
80
84
  def destroy(_state)
81
- stop_data_container
82
- delete_data_container
85
+ if remote_docker_host?
86
+ stop_data_container
87
+ delete_data_container
88
+ end
89
+
83
90
  stop_runner_container
84
91
  delete_runner_container
85
92
  delete_work_image
@@ -87,6 +94,11 @@ module Kitchen
87
94
 
88
95
  private
89
96
 
97
+ def remote_docker_host?
98
+ return true if config[:docker_host_url] =~ /^tcp:/
99
+ false
100
+ end
101
+
90
102
  def api_retries
91
103
  config[:api_retries]
92
104
  end
@@ -110,22 +122,18 @@ module Kitchen
110
122
  end
111
123
 
112
124
  def build_work_image(state)
113
- # require 'pry' ; binding.pry
114
-
125
+ info('Building work image..')
115
126
  return if ::Docker::Image.exist?(work_image, {}, docker_connection)
116
127
 
117
128
  begin
118
129
  @intermediate_image = ::Docker::Image.build(
119
130
  work_image_dockerfile,
120
131
  {
121
- # 'nocache' => true,
122
- # 'forcerm' => true,
123
- # 'q' => true,
124
- 't' => work_image
132
+ 't' => work_image,
125
133
  },
126
134
  docker_connection
127
135
  )
128
- rescue Exception => e
136
+ rescue
129
137
  raise "work_image build failed: #{e}"
130
138
  end
131
139
 
@@ -146,11 +154,6 @@ module Kitchen
146
154
  state[:image_prefix] = image_prefix
147
155
  end
148
156
 
149
- def instance_name
150
- prefix = (Digest::SHA2.hexdigest FileUtils.pwd)[0,10]
151
- "#{prefix}-#{instance.name}"
152
- end
153
-
154
157
  def delete_chef_container
155
158
  debug "driver - deleting container #{chef_container_name}"
156
159
  delete_container chef_container_name
@@ -189,6 +192,13 @@ module Kitchen
189
192
  instance_name
190
193
  end
191
194
 
195
+ def dokken_binds
196
+ ret = []
197
+ ret << "#{dokken_sandbox_path}:/opt/kitchen" unless dokken_sandbox_path.nil?
198
+ ret << config[:binds] unless config[:binds].nil?
199
+ ret
200
+ end
201
+
192
202
  def start_runner_container(state)
193
203
  debug "driver - starting #{runner_container_name}"
194
204
  runner_container = run_container(
@@ -199,16 +209,19 @@ module Kitchen
199
209
  'ExposedPorts' => exposed_ports({}, config[:forward]),
200
210
  'HostConfig' => {
201
211
  'Privileged' => config[:privileged],
202
- 'VolumesFrom' => [chef_container_name, data_container_name],
203
- 'Binds' => Array(config[:binds]),
212
+ 'VolumesFrom' => [
213
+ chef_container_name,
214
+ # data_container_name
215
+ ],
216
+ 'Binds' => dokken_binds,
204
217
  'Dns' => config[:dns],
205
- 'DnsSearch'=> config[:dns_search],
218
+ 'DnsSearch' => config[:dns_search],
206
219
  'Links' => Array(config[:links]),
207
220
  'CapAdd' => Array(config[:cap_add]),
208
221
  'CapDrop' => Array(config[:cap_drop]),
209
222
  'SecurityOpt' => Array(config[:security_opt]),
210
223
  'NetworkMode' => config[:network_mode],
211
- 'PortBindings' => port_forwards({}, config[:forward])
224
+ 'PortBindings' => port_forwards({}, config[:forward]),
212
225
  }
213
226
  )
214
227
  state[:runner_container] = runner_container.json
@@ -221,23 +234,19 @@ module Kitchen
221
234
  'Image' => "#{repo(data_image)}:#{tag(data_image)}",
222
235
  'HostConfig' => {
223
236
  'PortBindings' => port_forwards({}, '22'),
224
- 'PublishAllPorts' => true
237
+ 'PublishAllPorts' => true,
225
238
  }
226
239
  )
227
- # require 'pry' ; binding.pry
228
240
  state[:data_container] = data_container.json
229
241
  end
230
242
 
231
243
  def make_data_image
232
- debug "driver - pulling #{data_image}"
233
- pull_if_missing data_image
234
- # -- or --
235
- # debug 'driver - calling create_data_image'
236
- # create_data_image
244
+ debug 'driver - calling create_data_image'
245
+ create_data_image
237
246
  end
238
247
 
239
248
  def create_chef_container(state)
240
- c = ::Docker::Container.get(chef_container_name, {}, docker_connection)
249
+ ::Docker::Container.get(chef_container_name, {}, docker_connection)
241
250
  rescue ::Docker::Error::NotFoundError
242
251
  begin
243
252
  debug "driver - creating volume container #{chef_container_name} from #{chef_image}"
@@ -265,7 +274,7 @@ module Kitchen
265
274
  def delete_image(name)
266
275
  with_retries { @image = ::Docker::Image.get(name, {}, docker_connection) }
267
276
  with_retries { @image.remove(force: true) }
268
- rescue ::Docker::Error => e
277
+ rescue ::Docker::Error
269
278
  puts "Image #{name} not found. Nothing to delete."
270
279
  end
271
280
 
@@ -305,7 +314,7 @@ module Kitchen
305
314
  def stop_container(name)
306
315
  with_retries { @container = ::Docker::Container.get(name, {}, docker_connection) }
307
316
  with_retries do
308
- @container.stop(force: true)
317
+ @container.stop(force: false)
309
318
  wait_running_state(name, false)
310
319
  end
311
320
  rescue ::Docker::Error::NotFoundError
@@ -344,6 +353,7 @@ module Kitchen
344
353
  end
345
354
 
346
355
  def chef_version
356
+ return 'current' if config[:chef_version] == 'latest'
347
357
  config[:chef_version]
348
358
  end
349
359
 
@@ -361,7 +371,7 @@ module Kitchen
361
371
 
362
372
  def exposed_ports(config, rules)
363
373
  Array(rules).each do |prt_string|
364
- guest, host = prt_string.to_s.split(':').reverse
374
+ guest, _host = prt_string.to_s.split(':').reverse
365
375
  config["#{guest}/tcp"] = {}
366
376
  end
367
377
  config
@@ -371,7 +381,7 @@ module Kitchen
371
381
  Array(rules).each do |prt_string|
372
382
  guest, host = prt_string.to_s.split(':').reverse
373
383
  config["#{guest}/tcp"] = [{
374
- HostPort: host || ''
384
+ HostPort: host || '',
375
385
  }]
376
386
  end
377
387
  config
@@ -19,6 +19,6 @@
19
19
  module Kitchen
20
20
  module Driver
21
21
  # Version string for Dokken Kitchen driver
22
- DOKKEN_VERSION = '1.1.1'.freeze
22
+ DOKKEN_VERSION = '2.0.1'.freeze
23
23
  end
24
24
  end
@@ -0,0 +1,127 @@
1
+ module Dokken
2
+ module Helpers
3
+ def insecure_ssh_public_key
4
+ <<-EOF
5
+ ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCoJwyW7qNhw+NTuOjC4+RVpESl+JBXebXzB7JqxRgKAbymq6B39azEAiNx5NzHkWcQmOyQNhFpKFSAufegcXRS4ctS1LcElEoXe9brDAqKEBSkmnXYfZXMNIG0Enw4+5W/rZxHFCAlsUSAHYtYZEs+3CgbIWuHhZ95C8UC6nGLWHNZOjcbsYZFrnFfO0qg0ene2w8LKhxqj5X0MRSdCIn1IwyxIbl5NND5Yk1Hx8JKsJtTiNTdxssiMgmM5bvTbYQUSf8pbGrRI30VQKBgQ8/UkidZbaTfvzWXYpwcDUERSbzEYCvkUytTemZIv6uhpPxqkfjl6KEOOml/iGqquPEr test-kitchen-rsa
6
+ EOF
7
+ end
8
+
9
+ def insecure_ssh_private_key
10
+ <<-EOF
11
+ -----BEGIN RSA PRIVATE KEY-----
12
+ MIIEpAIBAAKCAQEAqCcMlu6jYcPjU7jowuPkVaREpfiQV3m18weyasUYCgG8pqug
13
+ d/WsxAIjceTcx5FnEJjskDYRaShUgLn3oHF0UuHLUtS3BJRKF3vW6wwKihAUpJp1
14
+ 2H2VzDSBtBJ8OPuVv62cRxQgJbFEgB2LWGRLPtwoGyFrh4WfeQvFAupxi1hzWTo3
15
+ G7GGRa5xXztKoNHp3tsPCyocao+V9DEUnQiJ9SMMsSG5eTTQ+WJNR8fCSrCbU4jU
16
+ 3cbLIjIJjOW7022EFEn/KWxq0SN9FUCgYEPP1JInWW2k3781l2KcHA1BEUm8xGAr
17
+ 5FMrU3pmSL+roaT8apH45eihDjppf4hqqrjxKwIDAQABAoIBAEj7Cb/IOykHd/ay
18
+ XnOXrVZuQU03oI4WyR19zbYBbPmK33IHM1JdUmqP8wpPpnMHbJALj0DX9p6JXoOw
19
+ MwVzuGTwkuqUYAqgwbeHjDPfugNKD2uRjmwztXw3ncOl8jxZFRloJFfFKF6znWNt
20
+ bzkh7naN3upHiv/6wsgqj4tAbZ9oRC1crO6bsNr3P6YooiG5RRNpHepiyXphyhN6
21
+ We1p5ZOQ/pUSE0Ca4wTlUhJHTUPMz7VFs/8CH0loRIsGPBROarPkoLVF+/UNyX8e
22
+ +BGMhoUtQH2XvjEzWUl5jKJOnvKRIV+0j/upWXsPQKF5glVPmPrTVUAxThfu6rAa
23
+ 4Z3JveECgYEA0Pz3Hl0SlPR79r2qofh1ZNa8zvQDL+iLopULwDiil5qlUxJ+DgOl
24
+ 1kWXLhjdg/NfoTBHvBjdJu274YJgaGQOfCy5747YDVsakKOm4bI9+Jr2agshPyE6
25
+ f1RNmGL8K8fNtpGq4G14o+pSQOPNrEfcFKgm3sosZWJAWaA64hmtiXcCgYEAzfp6
26
+ FbodfUypAV5Zd6PCO2eJMjLdvGaNuH/Umo80WNV7XZ6iJ6MUeQe+YwxFJigjC3ii
27
+ ifLUj3kL7+wu7sEtkzS3zNd34KfhQ5fLADttfFgjjfm7IxlDD4ABaUgjwZM2gfXi
28
+ xCwRhwwNgilF6qABJ1CLt8JSqKubkqvO1P1gQu0CgYEA0GA6AcNpYK344Eey1/bF
29
+ DntyHKN+fglPGReldM7Dh4gBabgZid2nP+N5XtQaIpPKeQyLqgfckhEecTau68dA
30
+ Dh4Gcs6pq394GFmkbotrcPMJ2SgpySlXi1fCWrvvlbON8IiDqWxdiop74wmArFOm
31
+ I86ZmzBYXeo+IV869vAFcPcCgYBrvvyh5OuMIc++YYZXaRgvTueblLQc22CDBItI
32
+ FmUBmxqfTF3ycgJBlWVoFoENhq1eUMplctrx+hXeeSPLzM10VX1X79ZLdEYHv513
33
+ D58kDk7684mKwKotr34NfqkFl2ZJ8T+f8pVwmUNvtPtX0j8IO7/6bfIjPTFyNeFJ
34
+ 1QjHuQKBgQC/LE05M4eeWXihZ7c7fyWHLyddcPdH48LRF9UH9yjKF84jXRT91uMv
35
+ XuIb2Qt4MLHABySsk653LDw/jTIGV26c068nZryq5OUPxk67Xgod54jKgOwjgjZS
36
+ X8N2N9ZNnORJqK374yGj1jWUU66mQhPvn49QpG8P2HEoh2RQjNvyHA==
37
+ -----END RSA PRIVATE KEY-----
38
+ EOF
39
+ end
40
+
41
+ def data_dockerfile
42
+ <<-EOF
43
+ FROM centos:7
44
+ MAINTAINER Sean OMeara \"sean@sean.io\"
45
+
46
+ ENV LANG en_US.UTF-8
47
+
48
+ RUN yum -y install tar rsync openssh-server passwd git
49
+ RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''
50
+
51
+ RUN mkdir -p /root/.ssh/
52
+ COPY authorized_keys /root/.ssh/authorized_keys
53
+
54
+ EXPOSE 22
55
+ CMD [ "/usr/sbin/sshd", "-D", "-p", "22", "-o", "UseDNS=no", "-o", "UsePrivilegeSeparation=no", "-o", "MaxAuthTries=60" ]
56
+
57
+ VOLUME /opt/kitchen
58
+ VOLUME /opt/verifier
59
+ EOF
60
+ end
61
+
62
+ def create_data_image
63
+ return if ::Docker::Image.exist?(data_image)
64
+
65
+ tmpdir = Dir.tmpdir
66
+ FileUtils.mkdir_p "#{tmpdir}/dokken"
67
+ File.write("#{tmpdir}/dokken/Dockerfile", data_dockerfile)
68
+ File.write("#{tmpdir}/dokken/authorized_keys", insecure_ssh_public_key)
69
+
70
+ i = ::Docker::Image.build_from_dir(
71
+ "#{tmpdir}/dokken",
72
+ 'nocache' => true,
73
+ 'rm' => true
74
+ )
75
+ i.tag('repo' => repo(data_image), 'tag' => tag(data_image), 'force' => true)
76
+ end
77
+
78
+ def default_docker_host
79
+ if ENV['DOCKER_HOST']
80
+ ENV['DOCKER_HOST']
81
+ elsif File.exist?('/var/run/docker.sock')
82
+ 'unix:///var/run/docker.sock'
83
+ # TODO: Docker for Windows also operates over a named pipe at
84
+ # //./pipe/docker_engine that can be used if named pipe support is
85
+ # added to the docker-api gem.
86
+ else
87
+ 'tcp://127.0.0.1:2375'
88
+ end
89
+ end
90
+
91
+ def dokken_create_sandbox
92
+ info("Creating local sandbox in #{dokken_sandbox_path}")
93
+ FileUtils.mkdir_p(dokken_sandbox_path)
94
+ File.chmod(0755, dokken_sandbox_path)
95
+ end
96
+
97
+ def dokken_sandbox_path
98
+ "#{Dir.home}/.dokken/sandbox/#{instance_name}"
99
+ end
100
+
101
+ def instance_name
102
+ prefix = (Digest::SHA2.hexdigest FileUtils.pwd)[0, 10]
103
+ "#{prefix}-#{instance.name}"
104
+ end
105
+ end
106
+ end
107
+
108
+ module Kitchen
109
+ module Provisioner
110
+ class Base
111
+ def create_sandbox
112
+ info("Creating local sandbox in #{sandbox_path}")
113
+ FileUtils.mkdir_p(sandbox_path)
114
+ File.chmod(0755, sandbox_path)
115
+ end
116
+
117
+ def sandbox_path
118
+ "#{Dir.home}/.dokken/sandbox/#{instance_name}"
119
+ end
120
+
121
+ def instance_name
122
+ prefix = (Digest::SHA2.hexdigest FileUtils.pwd)[0, 10]
123
+ "#{prefix}-#{instance.name}"
124
+ end
125
+ end
126
+ end
127
+ end
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  #
3
- # Author:: Sean OMeara (<sean@chef.io>)
3
+ # Author:: Sean OMeara (<sean@sean.io>)
4
4
  #
5
5
  # Copyright (C) 2015, Sean OMeara
6
6
  #
@@ -18,10 +18,13 @@
18
18
 
19
19
  require 'kitchen'
20
20
  require 'kitchen/provisioner/chef_zero'
21
+ require_relative '../helpers'
22
+
23
+ include Dokken::Helpers
21
24
 
22
25
  module Kitchen
23
26
  module Provisioner
24
- # @author Sean OMeara <sean@chef.io>
27
+ # @author Sean OMeara <sean@sean.io>
25
28
  class Dokken < Kitchen::Provisioner::ChefZero
26
29
  kitchen_provisioner_api_version 2
27
30
 
@@ -32,23 +35,18 @@ module Kitchen
32
35
  # (see Base#call)
33
36
  def call(state)
34
37
  create_sandbox
35
- sandbox_dirs = Dir.glob(File.join(sandbox_path, '*'))
36
-
37
38
  instance.transport.connection(state) do |conn|
38
- info("Transferring files to #{instance.to_str}")
39
- conn.upload(sandbox_dirs, config[:root_path])
40
- debug('Transfer complete')
41
39
  conn.execute(run_command)
42
40
  end
43
41
  rescue Kitchen::Transport::TransportFailed => ex
44
42
  raise ActionFailed, ex.message
45
- ensure
46
- cleanup_sandbox
43
+ # ensure
44
+ # cleanup_sandbox
47
45
  end
48
46
 
49
47
  private
50
48
 
51
- # magic method name because we're subclassing ChefZero
49
+ # patching Kitchen::Provisioner::ChefZero#run_command
52
50
  def run_command
53
51
  cmd = '/opt/chef/embedded/bin/chef-client'
54
52
  cmd << ' -z'
@@ -19,9 +19,9 @@ require 'kitchen'
19
19
  require 'net/scp'
20
20
  require 'tmpdir'
21
21
  require 'digest/sha1'
22
- require_relative 'dokken/helpers'
22
+ require_relative '../helpers'
23
23
 
24
- include Dokken::Transport::Helpers
24
+ include Dokken::Helpers
25
25
 
26
26
  module Kitchen
27
27
  module Transport
@@ -35,7 +35,7 @@ module Kitchen
35
35
  #
36
36
  # @author Sean OMeara <sean@chef.io>
37
37
  class Dokken < Kitchen::Transport::Base
38
- kitchen_transport_api_version 1
38
+ kitchen_transport_api_version 2
39
39
 
40
40
  plugin_version Kitchen::VERSION
41
41
 
@@ -43,7 +43,7 @@ module Kitchen
43
43
  default_config :read_timeout, 3600
44
44
  default_config :write_timeout, 3600
45
45
  default_config :host_ip_override do |transport|
46
- transport.docker_for_mac_or_win? ? "localhost" : false
46
+ transport.docker_for_mac_or_win? ? 'localhost' : false
47
47
  end
48
48
 
49
49
  # (see Base#connection)
@@ -72,72 +72,61 @@ module Kitchen
72
72
  @exit_code = o[2]
73
73
  end
74
74
 
75
- if @exit_code != 0
76
- raise Transport::DockerExecFailed,
77
- "Docker Exec (#{@exit_code}) for command: [#{command}]"
78
- end
79
-
80
- # Disabling this for now.. the Docker ZFS driver won't let us
81
- # commit running containers.
82
- #
83
- # with_retries { @old_image = ::Docker::Image.get(work_image, {}, docker_connection) }
84
- # with_retries { @new_image = @runner.commit }
85
- # with_retries { @new_image.tag('repo' => work_image, 'tag' => 'latest', 'force' => 'true') }
86
- # with_retries { @old_image.remove }
75
+ raise Transport::DockerExecFailed, "Docker Exec (#{@exit_code}) for command: [#{command}]" if @exit_code != 0
87
76
  end
88
77
 
89
- def upload(locals, remote)
90
- port = options[:data_container][:NetworkSettings][:Ports][:"22/tcp"][0][:HostPort]
91
-
92
- if options[:host_ip_override]
93
- # Allow connecting to any ip/hostname to support sibling containers
94
- ip = options[:host_ip_override]
95
- elsif options[:docker_host_url] =~ /unix:/
96
- if options[:data_container][:NetworkSettings][:Ports][:"22/tcp"][0][:HostIp] = '0.0.0.0'
97
- ip = options[:data_container][:NetworkSettings][:IPAddress]
98
- port = '22'
99
- else
100
- # we should read the proper mapped ip, since this allows us to upload the files
101
- ip = options[:data_container][:NetworkSettings][:Ports][:"22/tcp"][0][:HostIp]
102
- end
103
- elsif options[:docker_host_url] =~ /tcp:/
104
- ip = options[:docker_host_url].split('tcp://')[1].split(':')[0]
105
- else
106
- raise Kitchen::UserError, 'docker_host_url must be tcp:// or unix://'
107
- end
108
-
109
- tmpdir = Dir.tmpdir
110
- FileUtils.mkdir_p "#{tmpdir}/dokken"
111
- File.write("#{tmpdir}/dokken/id_rsa", insecure_ssh_private_key)
112
- FileUtils.chmod(0600, "#{tmpdir}/dokken/id_rsa")
113
-
114
- begin
115
- rsync_cmd = '/usr/bin/rsync -a -e'
116
- rsync_cmd << ' \''
117
- rsync_cmd << 'ssh -2'
118
- rsync_cmd << " -i #{tmpdir}/dokken/id_rsa"
119
- rsync_cmd << ' -o CheckHostIP=no'
120
- rsync_cmd << ' -o Compression=no'
121
- rsync_cmd << ' -o PasswordAuthentication=no'
122
- rsync_cmd << ' -o StrictHostKeyChecking=no'
123
- rsync_cmd << ' -o UserKnownHostsFile=/dev/null'
124
- rsync_cmd << ' -o LogLevel=ERROR'
125
- rsync_cmd << " -p #{port}"
126
- rsync_cmd << '\''
127
- rsync_cmd << " #{locals.join(' ')} root@#{ip}:#{remote}"
128
- %x(#{rsync_cmd})
129
- rescue Errno::ENOENT
130
- debug 'Rsync is not installed. Falling back to SCP.'
131
- locals.each do |local|
132
- Net::SCP.upload!(ip,
133
- 'root',
134
- local,
135
- remote,
136
- recursive: true,
137
- ssh: { port: port, keys: ["#{tmpdir}/dokken/id_rsa"] })
138
- end
139
- end
140
- end
78
+ # def upload(locals, remote)
79
+ # port = options[:data_container][:NetworkSettings][:Ports][:"22/tcp"][0][:HostPort]
80
+
81
+ # if options[:host_ip_override]
82
+ # # Allow connecting to any ip/hostname to support sibling containers
83
+ # ip = options[:host_ip_override]
84
+ # elsif options[:docker_host_url] =~ /unix:/
85
+ # if options[:data_container][:NetworkSettings][:Ports][:"22/tcp"][0][:HostIp] == '0.0.0.0'
86
+ # ip = options[:data_container][:NetworkSettings][:IPAddress]
87
+ # port = '22'
88
+ # else
89
+ # # we should read the proper mapped ip, since this allows us to upload the files
90
+ # ip = options[:data_container][:NetworkSettings][:Ports][:"22/tcp"][0][:HostIp]
91
+ # end
92
+ # elsif options[:docker_host_url] =~ /tcp:/
93
+ # ip = options[:docker_host_url].split('tcp://')[1].split(':')[0]
94
+ # else
95
+ # raise Kitchen::UserError, 'docker_host_url must be tcp:// or unix://'
96
+ # end
97
+
98
+ # tmpdir = Dir.tmpdir
99
+ # FileUtils.mkdir_p "#{tmpdir}/dokken"
100
+ # File.write("#{tmpdir}/dokken/id_rsa", insecure_ssh_private_key)
101
+ # FileUtils.chmod(0600, "#{tmpdir}/dokken/id_rsa")
102
+
103
+ # begin
104
+ # rsync_cmd = '/usr/bin/rsync -a -e'
105
+ # rsync_cmd << ' \''
106
+ # rsync_cmd << 'ssh -2'
107
+ # rsync_cmd << " -i #{tmpdir}/dokken/id_rsa"
108
+ # rsync_cmd << ' -o CheckHostIP=no'
109
+ # rsync_cmd << ' -o Compression=no'
110
+ # rsync_cmd << ' -o PasswordAuthentication=no'
111
+ # rsync_cmd << ' -o StrictHostKeyChecking=no'
112
+ # rsync_cmd << ' -o UserKnownHostsFile=/dev/null'
113
+ # rsync_cmd << ' -o LogLevel=ERROR'
114
+ # rsync_cmd << " -p #{port}"
115
+ # rsync_cmd << '\''
116
+ # rsync_cmd << " #{locals.join(' ')} root@#{ip}:#{remote}"
117
+ # `#{rsync_cmd}`
118
+ # rescue Errno::ENOENT
119
+ # debug 'Rsync is not installed. Falling back to SCP.'
120
+ # locals.each do |local|
121
+ # Net::SCP.upload!(ip,
122
+ # 'root',
123
+ # local,
124
+ # remote,
125
+ # recursive: true,
126
+ # ssh: { port: port, keys: ["#{tmpdir}/dokken/id_rsa"] })
127
+ # end
128
+ # end
129
+ # end
141
130
 
142
131
  def login_command
143
132
  @runner = options[:instance_name].to_s
@@ -180,7 +169,10 @@ module Kitchen
180
169
  #
181
170
  # @return [TrueClass,FalseClass]
182
171
  def docker_for_mac_or_win?
183
- ::Docker.info(::Docker::Connection.new(config[:docker_host_url], {}))['Name'] == "moby"
172
+ # require 'pry' ; binding.pry
173
+ ::Docker.info(::Docker::Connection.new(config[:docker_host_url], {}))['Name'] == 'moby'
174
+ rescue
175
+ false
184
176
  end
185
177
 
186
178
  private
@@ -191,7 +183,7 @@ module Kitchen
191
183
  # @param data [Hash] merged configuration and mutable state data
192
184
  # @return [Hash] hash of connection options
193
185
  # @api private
194
- def connection_options(data) # rubocop:disable Metrics/MethodLength
186
+ def connection_options(data)
195
187
  opts = {}
196
188
  opts[:host_ip_override] = config[:host_ip_override]
197
189
  opts[:docker_host_url] = config[:docker_host_url]
@@ -213,7 +205,6 @@ module Kitchen
213
205
  @connection.close
214
206
  end
215
207
 
216
- @connection_options = options
217
208
  @connection = Kitchen::Transport::Dokken::Connection.new(options, &block)
218
209
  end
219
210
 
metadata CHANGED
@@ -1,35 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kitchen-dokken
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean OMeara
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-31 00:00:00.000000000 Z
11
+ date: 2017-01-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: test-kitchen
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.13'
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: '3.0'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
- - - ">="
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
26
  version: '1.13'
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: '3.0'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: docker-api
35
29
  requirement: !ruby/object:Gem::Requirement
@@ -51,13 +45,13 @@ executables: []
51
45
  extensions: []
52
46
  extra_rdoc_files: []
53
47
  files:
48
+ - CHANGELOG.md
54
49
  - LICENSE
55
50
  - lib/kitchen/driver/dokken.rb
56
- - lib/kitchen/driver/dokken/helpers.rb
57
51
  - lib/kitchen/driver/dokken_version.rb
52
+ - lib/kitchen/helpers.rb
58
53
  - lib/kitchen/provisioner/dokken.rb
59
54
  - lib/kitchen/transport/dokken.rb
60
- - lib/kitchen/transport/dokken/helpers.rb
61
55
  homepage: https://github.com/someara/kitchen-dokken
62
56
  licenses:
63
57
  - Apache-2.0
@@ -77,7 +71,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
77
71
  - !ruby/object:Gem::Version
78
72
  version: '0'
79
73
  requirements: []
80
- rubygems_version: 3.0.3
74
+ rubyforge_project:
75
+ rubygems_version: 2.6.8
81
76
  signing_key:
82
77
  specification_version: 4
83
78
  summary: A Test Kitchen Driver that talks to the Docker Remote API and uses Volumes
@@ -1,75 +0,0 @@
1
- module Dokken
2
- module Driver
3
- module Helpers
4
- def insecure_ssh_public_key
5
- <<-EOF
6
- ssh-dss AAAAB3NzaC1kc3MAAACBANmw8lqXnnGoQ0LusVNr/716mQhEgxb8RYQbg+HP0w//XXVZki2iSC7/LhQEdYgUZaBYJKpBNQ3FSIvyfM5RksicEF10jv/QQ+gsQKHf/jyWTLSiiaSJiwhDrkNW94V/T2pczXlK2j5UiyGKA6UDmSeiS6Ve969nqLJLb77xWOlXAAAAFQCsaq9PvaFa+SXUfWYV9JrDskPtywAAAIBmTuJyTAqdy+xPiI7AFI+BCuWpjrczBs/aw3R5ArNaRf3/PBUumpAUCePJ6UPcw5vU74AloCYvcUnwU8IbZ/Oj6A5NGTo6HvIajP2Y8E17cjsMTXzTPbuT1SqkrlVcsQtJpHU/+WBGoUJeWg66/CjUp/Nx2YK+6QJzoALBLyJW+AAAAIEAyi7XX3Ev12AXgpwRPPbfVltJ9H5Hpll34gc2ORhmCSL6RE42BpAXuzI7lbGun2dXFsCdDm0DQz3h4JHtTHePd6xXqyPpUda4ktLVtEWMm0XIQNE8P5zP0gcfqVe4prOYeBLwrvAkyeNY5wosgzGHrQ+/hFwW3s8liEjZaFDhCWY= test-kitchen
7
- EOF
8
- end
9
-
10
- def insecure_ssh_private_key
11
- <<-EOF
12
- -----BEGIN DSA PRIVATE KEY-----
13
- MIIBuwIBAAKBgQDZsPJal55xqENC7rFTa/+9epkIRIMW/EWEG4Phz9MP/111WZIt
14
- okgu/y4UBHWIFGWgWCSqQTUNxUiL8nzOUZLInBBddI7/0EPoLECh3/48lky0oomk
15
- iYsIQ65DVveFf09qXM15Sto+VIshigOlA5knokulXvevZ6iyS2++8VjpVwIVAKxq
16
- r0+9oVr5JdR9ZhX0msOyQ+3LAoGAZk7ickwKncvsT4iOwBSPgQrlqY63MwbP2sN0
17
- eQKzWkX9/zwVLpqQFAnjyelD3MOb1O+AJaAmL3FJ8FPCG2fzo+gOTRk6Oh7yGoz9
18
- mPBNe3I7DE180z27k9UqpK5VXLELSaR1P/lgRqFCXloOuvwo1KfzcdmCvukCc6AC
19
- wS8iVvgCgYEAyi7XX3Ev12AXgpwRPPbfVltJ9H5Hpll34gc2ORhmCSL6RE42BpAX
20
- uzI7lbGun2dXFsCdDm0DQz3h4JHtTHePd6xXqyPpUda4ktLVtEWMm0XIQNE8P5zP
21
- 0gcfqVe4prOYeBLwrvAkyeNY5wosgzGHrQ+/hFwW3s8liEjZaFDhCWYCFASgG6eP
22
- vVnsIrCx2rI5/KEQZ+oG
23
- -----END DSA PRIVATE KEY-----
24
- EOF
25
- end
26
-
27
- def data_dockerfile
28
- <<-EOF
29
- FROM centos:7
30
- MAINTAINER Sean OMeara \"sean@sean.io\"
31
-
32
- ENV LANG en_US.UTF-8
33
-
34
- RUN yum -y install tar rsync openssh-server passwd git
35
- RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''
36
- RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ''
37
-
38
- RUN mkdir -p /root/.ssh/
39
- COPY authorized_keys /root/.ssh/authorized_keys
40
-
41
- EXPOSE 22
42
- CMD [ "/usr/sbin/sshd", "-D", "-p", "22", "-o", "UseDNS=no", "-o", "UsePrivilegeSeparation=no" ]
43
-
44
- VOLUME /opt/kitchen
45
- VOLUME /opt/verifier
46
- EOF
47
- end
48
-
49
- def create_data_image
50
- return if ::Docker::Image.exist?(data_image)
51
-
52
- tmpdir = Dir.tmpdir
53
- FileUtils.mkdir_p "#{tmpdir}/dokken"
54
- File.write("#{tmpdir}/dokken/Dockerfile", data_dockerfile)
55
- File.write("#{tmpdir}/dokken/authorized_keys", insecure_ssh_public_key)
56
-
57
- i = ::Docker::Image.build_from_dir("#{tmpdir}/dokken", 'nocache' => true, 'rm' => true)
58
- i.tag('repo' => repo(data_image), 'tag' => tag(data_image), 'force' => true)
59
- end
60
-
61
- def default_docker_host
62
- if ENV['DOCKER_HOST']
63
- ENV['DOCKER_HOST']
64
- elsif File.exist?('/var/run/docker.sock')
65
- 'unix:///var/run/docker.sock'
66
- # TODO: Docker for Windows also operates over a named pipe at
67
- # //./pipe/docker_engine that can be used if named pipe support is
68
- # added to the docker-api gem.
69
- else
70
- 'tcp://127.0.0.1:2375'
71
- end
72
- end
73
- end
74
- end
75
- end
@@ -1,22 +0,0 @@
1
- module Dokken
2
- module Transport
3
- module Helpers
4
- def insecure_ssh_private_key
5
- <<-EOF
6
- -----BEGIN DSA PRIVATE KEY-----
7
- MIIBuwIBAAKBgQDZsPJal55xqENC7rFTa/+9epkIRIMW/EWEG4Phz9MP/111WZIt
8
- okgu/y4UBHWIFGWgWCSqQTUNxUiL8nzOUZLInBBddI7/0EPoLECh3/48lky0oomk
9
- iYsIQ65DVveFf09qXM15Sto+VIshigOlA5knokulXvevZ6iyS2++8VjpVwIVAKxq
10
- r0+9oVr5JdR9ZhX0msOyQ+3LAoGAZk7ickwKncvsT4iOwBSPgQrlqY63MwbP2sN0
11
- eQKzWkX9/zwVLpqQFAnjyelD3MOb1O+AJaAmL3FJ8FPCG2fzo+gOTRk6Oh7yGoz9
12
- mPBNe3I7DE180z27k9UqpK5VXLELSaR1P/lgRqFCXloOuvwo1KfzcdmCvukCc6AC
13
- wS8iVvgCgYEAyi7XX3Ev12AXgpwRPPbfVltJ9H5Hpll34gc2ORhmCSL6RE42BpAX
14
- uzI7lbGun2dXFsCdDm0DQz3h4JHtTHePd6xXqyPpUda4ktLVtEWMm0XIQNE8P5zP
15
- 0gcfqVe4prOYeBLwrvAkyeNY5wosgzGHrQ+/hFwW3s8liEjZaFDhCWYCFASgG6eP
16
- vVnsIrCx2rI5/KEQZ+oG
17
- -----END DSA PRIVATE KEY-----
18
- EOF
19
- end
20
- end
21
- end
22
- end