kitchen-dokken 1.0.10 → 1.1.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 +36 -38
- data/lib/kitchen/driver/dokken/helpers.rb +13 -0
- data/lib/kitchen/driver/dokken_version.rb +1 -1
- data/lib/kitchen/transport/dokken.rb +32 -19
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 707daf8c414917ae605188884d923058053f9f4b
|
|
4
|
+
data.tar.gz: ea40c4ea169ff72a5bcf34f067e52d3a4df32728
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d486fddd26b5ffc192155f8b5202992fd2b7b39c3a4fcc4cfa5d5dd76d02ad61d969a38c59446f217cc33fe8948ee9c07b687639b6553e452b1ee68751fa6c82
|
|
7
|
+
data.tar.gz: 3c967d89c1e5b4829bf3d46e3e649cdce5be514e373b5522e8518cc8ef556cf8ad0aabb4f46be3345fb2d45dee01fdb1c1007a8599253f5025176346357370b9
|
|
@@ -37,7 +37,7 @@ module Kitchen
|
|
|
37
37
|
default_config :chef_image, 'chef/chef'
|
|
38
38
|
default_config :chef_version, 'latest'
|
|
39
39
|
default_config :data_image, 'someara/kitchen-cache:latest'
|
|
40
|
-
default_config :docker_host_url,
|
|
40
|
+
default_config :docker_host_url, default_docker_host
|
|
41
41
|
default_config :dns, nil
|
|
42
42
|
default_config :dns_search, nil
|
|
43
43
|
default_config :read_timeout, 3600
|
|
@@ -99,8 +99,8 @@ module Kitchen
|
|
|
99
99
|
end
|
|
100
100
|
|
|
101
101
|
def delete_work_image
|
|
102
|
-
return unless ::Docker::Image.exist?(work_image, docker_connection)
|
|
103
|
-
with_retries { @work_image = ::Docker::Image.get(work_image, docker_connection) }
|
|
102
|
+
return unless ::Docker::Image.exist?(work_image, {}, docker_connection)
|
|
103
|
+
with_retries { @work_image = ::Docker::Image.get(work_image, {}, docker_connection) }
|
|
104
104
|
|
|
105
105
|
begin
|
|
106
106
|
with_retries { @work_image.remove(force: true) }
|
|
@@ -112,28 +112,24 @@ module Kitchen
|
|
|
112
112
|
def build_work_image(state)
|
|
113
113
|
# require 'pry' ; binding.pry
|
|
114
114
|
|
|
115
|
-
return if ::Docker::Image.exist?(work_image, docker_connection)
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
)
|
|
131
|
-
end
|
|
132
|
-
rescue Exception => e
|
|
133
|
-
raise "work_image build failed: #{e}"
|
|
134
|
-
end
|
|
135
|
-
state[:work_image] = work_image
|
|
115
|
+
return if ::Docker::Image.exist?(work_image, {}, docker_connection)
|
|
116
|
+
|
|
117
|
+
begin
|
|
118
|
+
@intermediate_image = ::Docker::Image.build(
|
|
119
|
+
work_image_dockerfile,
|
|
120
|
+
{
|
|
121
|
+
# 'nocache' => true,
|
|
122
|
+
# 'forcerm' => true,
|
|
123
|
+
# 'q' => true,
|
|
124
|
+
't' => work_image
|
|
125
|
+
},
|
|
126
|
+
docker_connection
|
|
127
|
+
)
|
|
128
|
+
rescue Exception => e
|
|
129
|
+
raise "work_image build failed: #{e}"
|
|
136
130
|
end
|
|
131
|
+
|
|
132
|
+
state[:work_image] = work_image
|
|
137
133
|
end
|
|
138
134
|
|
|
139
135
|
def work_image_dockerfile
|
|
@@ -223,8 +219,10 @@ module Kitchen
|
|
|
223
219
|
data_container = run_container(
|
|
224
220
|
'name' => data_container_name,
|
|
225
221
|
'Image' => "#{repo(data_image)}:#{tag(data_image)}",
|
|
226
|
-
'
|
|
227
|
-
|
|
222
|
+
'HostConfig' => {
|
|
223
|
+
'PortBindings' => port_forwards({}, '22'),
|
|
224
|
+
'PublishAllPorts' => true
|
|
225
|
+
}
|
|
228
226
|
)
|
|
229
227
|
# require 'pry' ; binding.pry
|
|
230
228
|
state[:data_container] = data_container.json
|
|
@@ -239,7 +237,7 @@ module Kitchen
|
|
|
239
237
|
end
|
|
240
238
|
|
|
241
239
|
def create_chef_container(state)
|
|
242
|
-
c = ::Docker::Container.get(chef_container_name)
|
|
240
|
+
c = ::Docker::Container.get(chef_container_name, {}, docker_connection)
|
|
243
241
|
rescue ::Docker::Error::NotFoundError
|
|
244
242
|
begin
|
|
245
243
|
debug "driver - creating volume container #{chef_container_name} from #{chef_image}"
|
|
@@ -265,14 +263,14 @@ module Kitchen
|
|
|
265
263
|
end
|
|
266
264
|
|
|
267
265
|
def delete_image(name)
|
|
268
|
-
with_retries { @image = ::Docker::Image.get(name, docker_connection) }
|
|
266
|
+
with_retries { @image = ::Docker::Image.get(name, {}, docker_connection) }
|
|
269
267
|
with_retries { @image.remove(force: true) }
|
|
270
268
|
rescue ::Docker::Error => e
|
|
271
269
|
puts "Image #{name} not found. Nothing to delete."
|
|
272
270
|
end
|
|
273
271
|
|
|
274
272
|
def container_exist?(name)
|
|
275
|
-
return true if ::Docker::Container.get(name)
|
|
273
|
+
return true if ::Docker::Container.get(name, {}, docker_connection)
|
|
276
274
|
rescue
|
|
277
275
|
false
|
|
278
276
|
end
|
|
@@ -284,17 +282,17 @@ module Kitchen
|
|
|
284
282
|
def create_container(args)
|
|
285
283
|
with_retries do
|
|
286
284
|
@container = ::Docker::Container.create(args.clone, docker_connection)
|
|
287
|
-
@container = ::Docker::Container.get(args['name'])
|
|
285
|
+
@container = ::Docker::Container.get(args['name'], {}, docker_connection)
|
|
288
286
|
end
|
|
289
287
|
rescue ::Docker::Error::ConflictError
|
|
290
|
-
with_retries { @container = ::Docker::Container.get(args['name']) }
|
|
288
|
+
with_retries { @container = ::Docker::Container.get(args['name'], {}, docker_connection) }
|
|
291
289
|
end
|
|
292
290
|
|
|
293
291
|
def run_container(args)
|
|
294
292
|
create_container(args)
|
|
295
293
|
with_retries do
|
|
296
294
|
@container.start
|
|
297
|
-
@container = ::Docker::Container.get(args['name'])
|
|
295
|
+
@container = ::Docker::Container.get(args['name'], {}, docker_connection)
|
|
298
296
|
wait_running_state(args['name'], true)
|
|
299
297
|
end
|
|
300
298
|
@container
|
|
@@ -305,7 +303,7 @@ module Kitchen
|
|
|
305
303
|
end
|
|
306
304
|
|
|
307
305
|
def stop_container(name)
|
|
308
|
-
with_retries { @container = ::Docker::Container.get(name, docker_connection) }
|
|
306
|
+
with_retries { @container = ::Docker::Container.get(name, {}, docker_connection) }
|
|
309
307
|
with_retries do
|
|
310
308
|
@container.stop(force: true)
|
|
311
309
|
wait_running_state(name, false)
|
|
@@ -315,21 +313,21 @@ module Kitchen
|
|
|
315
313
|
end
|
|
316
314
|
|
|
317
315
|
def delete_container(name)
|
|
318
|
-
with_retries { @container = ::Docker::Container.get(name, docker_connection) }
|
|
316
|
+
with_retries { @container = ::Docker::Container.get(name, {}, docker_connection) }
|
|
319
317
|
with_retries { @container.delete(force: true, v: true) }
|
|
320
318
|
rescue ::Docker::Error::NotFoundError
|
|
321
319
|
debug "Container #{name} not found. Nothing to delete."
|
|
322
320
|
end
|
|
323
321
|
|
|
324
322
|
def wait_running_state(name, v)
|
|
325
|
-
@container = ::Docker::Container.get(name)
|
|
323
|
+
@container = ::Docker::Container.get(name, {}, docker_connection)
|
|
326
324
|
i = 0
|
|
327
325
|
tries = 20
|
|
328
326
|
until container_state['Running'] == v || container_state['FinishedAt'] != '0001-01-01T00:00:00Z'
|
|
329
327
|
i += 1
|
|
330
328
|
break if i == tries
|
|
331
329
|
sleep 0.1
|
|
332
|
-
@container = ::Docker::Container.get(name)
|
|
330
|
+
@container = ::Docker::Container.get(name, {}, docker_connection)
|
|
333
331
|
end
|
|
334
332
|
end
|
|
335
333
|
|
|
@@ -380,13 +378,13 @@ module Kitchen
|
|
|
380
378
|
end
|
|
381
379
|
|
|
382
380
|
def pull_if_missing(image)
|
|
383
|
-
return if ::Docker::Image.exist?("#{repo(image)}:#{tag(image)}", docker_connection)
|
|
381
|
+
return if ::Docker::Image.exist?("#{repo(image)}:#{tag(image)}", {}, docker_connection)
|
|
384
382
|
pull_image image
|
|
385
383
|
end
|
|
386
384
|
|
|
387
385
|
def pull_image(image)
|
|
388
386
|
with_retries do
|
|
389
|
-
::Docker::Image.create({ 'fromImage' => "#{repo(image)}:#{tag(image)}" }, docker_connection)
|
|
387
|
+
::Docker::Image.create({ 'fromImage' => "#{repo(image)}:#{tag(image)}" }, nil, docker_connection)
|
|
390
388
|
end
|
|
391
389
|
end
|
|
392
390
|
|
|
@@ -57,6 +57,19 @@ EOF
|
|
|
57
57
|
i = ::Docker::Image.build_from_dir("#{tmpdir}/dokken", 'nocache' => true, 'rm' => true)
|
|
58
58
|
i.tag('repo' => repo(data_image), 'tag' => tag(data_image), 'force' => true)
|
|
59
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
|
|
60
73
|
end
|
|
61
74
|
end
|
|
62
75
|
end
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
# limitations under the License.
|
|
17
17
|
|
|
18
18
|
require 'kitchen'
|
|
19
|
+
require 'net/scp'
|
|
19
20
|
require 'tmpdir'
|
|
20
21
|
require 'digest/sha1'
|
|
21
22
|
require_relative 'dokken/helpers'
|
|
@@ -38,11 +39,11 @@ module Kitchen
|
|
|
38
39
|
|
|
39
40
|
plugin_version Kitchen::VERSION
|
|
40
41
|
|
|
41
|
-
default_config :docker_host_url,
|
|
42
|
+
default_config :docker_host_url, default_docker_host
|
|
42
43
|
default_config :read_timeout, 3600
|
|
43
44
|
default_config :write_timeout, 3600
|
|
44
45
|
default_config :host_ip_override do |transport|
|
|
45
|
-
transport.
|
|
46
|
+
transport.docker_for_mac_or_win? ? "localhost" : false
|
|
46
47
|
end
|
|
47
48
|
|
|
48
49
|
# (see Base#connection)
|
|
@@ -110,20 +111,32 @@ module Kitchen
|
|
|
110
111
|
File.write("#{tmpdir}/dokken/id_rsa", insecure_ssh_private_key)
|
|
111
112
|
FileUtils.chmod(0600, "#{tmpdir}/dokken/id_rsa")
|
|
112
113
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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
|
|
127
140
|
end
|
|
128
141
|
|
|
129
142
|
def login_command
|
|
@@ -163,11 +176,11 @@ module Kitchen
|
|
|
163
176
|
end
|
|
164
177
|
end
|
|
165
178
|
|
|
166
|
-
# Detect whether or not we are running in Docker for Mac
|
|
179
|
+
# Detect whether or not we are running in Docker for Mac or Windows
|
|
167
180
|
#
|
|
168
181
|
# @return [TrueClass,FalseClass]
|
|
169
|
-
def
|
|
170
|
-
Docker.info[
|
|
182
|
+
def docker_for_mac_or_win?
|
|
183
|
+
::Docker.info(::Docker::Connection.new(config[:docker_host_url], {}))['Name'] == "moby"
|
|
171
184
|
end
|
|
172
185
|
|
|
173
186
|
private
|
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: 1.0
|
|
4
|
+
version: 1.1.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: 2016-12-
|
|
11
|
+
date: 2016-12-28 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: test-kitchen
|