kitchen-dokken 2.4.3 → 2.5.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/CHANGELOG.md +19 -0
- data/lib/kitchen/driver/dokken.rb +11 -30
- data/lib/kitchen/driver/dokken_version.rb +1 -1
- data/lib/kitchen/helpers.rb +72 -0
- data/lib/kitchen/transport/dokken.rb +20 -3
- 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: 5cb3ca939dbea3ff17317f0e2dc84221cbafab95
|
4
|
+
data.tar.gz: a0e116039de06714f0f0968be5742499b76534a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13b58476cfb34012b99105568d87ce7fd165467e0bc3abcae79978f838612707ab00fabd8335eca7cbeb487a232feec29018f629aba49825b691bdcc69d9d886
|
7
|
+
data.tar.gz: 17c563f9084e427b20de70820bc25a91e0c1f9628cf30ab23691306a3e99b0219439b87eb174005062e6531da96d24a0c64add832595bbbd96f96fcc819a36a1
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,24 @@
|
|
1
1
|
# Dokken Changelog
|
2
2
|
|
3
|
+
# 2.5.0
|
4
|
+
- Adding support for exposing ports.
|
5
|
+
- Port systax matches docker-compose
|
6
|
+
|
7
|
+
```
|
8
|
+
driver:
|
9
|
+
hostname: www.computers.biz
|
10
|
+
port "1234"
|
11
|
+
```
|
12
|
+
...or something like
|
13
|
+
|
14
|
+
```
|
15
|
+
driver:
|
16
|
+
hostname: www.computers.biz
|
17
|
+
ports:
|
18
|
+
- '1234'
|
19
|
+
- '4321:4321/udp'
|
20
|
+
```
|
21
|
+
|
3
22
|
# 2.4.3
|
4
23
|
- Using better paths for lockfiles
|
5
24
|
|
@@ -42,9 +42,8 @@ module Kitchen
|
|
42
42
|
default_config :data_image, 'dokken/kitchen-cache:latest'
|
43
43
|
default_config :dns, nil
|
44
44
|
default_config :dns_search, nil
|
45
|
-
|
45
|
+
default_config :ports, nil
|
46
46
|
default_config :docker_host_url, default_docker_host
|
47
|
-
default_config :forward, nil
|
48
47
|
default_config :hostname, 'dokken'
|
49
48
|
default_config :image_prefix, nil
|
50
49
|
default_config :links, nil
|
@@ -57,7 +56,7 @@ module Kitchen
|
|
57
56
|
default_config :write_timeout, 3600
|
58
57
|
|
59
58
|
# (see Base#create)
|
60
|
-
def create(state)
|
59
|
+
def create(state)
|
61
60
|
# image to config
|
62
61
|
pull_platform_image
|
63
62
|
|
@@ -100,6 +99,12 @@ module Kitchen
|
|
100
99
|
|
101
100
|
private
|
102
101
|
|
102
|
+
class PartialHash < Hash
|
103
|
+
def ==(other)
|
104
|
+
other.is_a?(Hash) && all? { |key, val| other.key?(key) && other[key] == val }
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
103
108
|
def api_retries
|
104
109
|
config[:api_retries]
|
105
110
|
end
|
@@ -195,12 +200,6 @@ module Kitchen
|
|
195
200
|
instance_name
|
196
201
|
end
|
197
202
|
|
198
|
-
class PartialHash < Hash
|
199
|
-
def ==(other)
|
200
|
-
other.is_a?(Hash) && all? { |key, val| other.key?(key) && other[key] == val }
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
203
|
def dokken_binds
|
205
204
|
ret = []
|
206
205
|
ret << "#{dokken_kitchen_sandbox}:/opt/kitchen" unless dokken_kitchen_sandbox.nil? || remote_docker_host?
|
@@ -248,7 +247,7 @@ module Kitchen
|
|
248
247
|
'Cmd' => Shellwords.shellwords(self[:pid_one_command]),
|
249
248
|
'Image' => "#{repo(work_image)}:#{tag(work_image)}",
|
250
249
|
'Hostname' => self[:hostname],
|
251
|
-
'ExposedPorts' => exposed_ports
|
250
|
+
'ExposedPorts' => exposed_ports,
|
252
251
|
'Volumes' => dokken_volumes,
|
253
252
|
'HostConfig' => {
|
254
253
|
'Privileged' => self[:privileged],
|
@@ -261,7 +260,7 @@ module Kitchen
|
|
261
260
|
'CapDrop' => Array(self[:cap_drop]),
|
262
261
|
'SecurityOpt' => Array(self[:security_opt]),
|
263
262
|
'NetworkMode' => self[:network_mode],
|
264
|
-
'PortBindings' =>
|
263
|
+
'PortBindings' => port_bindings,
|
265
264
|
},
|
266
265
|
'NetworkingConfig' => {
|
267
266
|
'EndpointsConfig' => {
|
@@ -281,7 +280,7 @@ module Kitchen
|
|
281
280
|
'name' => data_container_name,
|
282
281
|
'Image' => "#{repo(data_image)}:#{tag(data_image)}",
|
283
282
|
'HostConfig' => {
|
284
|
-
'PortBindings' =>
|
283
|
+
'PortBindings' => port_bindings,
|
285
284
|
'PublishAllPorts' => true,
|
286
285
|
'NetworkMode' => 'bridge',
|
287
286
|
},
|
@@ -487,24 +486,6 @@ module Kitchen
|
|
487
486
|
release ? [platform, release].join(':') : platform
|
488
487
|
end
|
489
488
|
|
490
|
-
def exposed_ports(config, rules)
|
491
|
-
Array(rules).each do |prt_string|
|
492
|
-
guest, _host = prt_string.to_s.split(':').reverse
|
493
|
-
config["#{guest}/tcp"] = {}
|
494
|
-
end
|
495
|
-
config
|
496
|
-
end
|
497
|
-
|
498
|
-
def port_forwards(config, rules)
|
499
|
-
Array(rules).each do |prt_string|
|
500
|
-
guest, host = prt_string.to_s.split(':').reverse
|
501
|
-
config["#{guest}/tcp"] = [{
|
502
|
-
HostPort: host || '',
|
503
|
-
}]
|
504
|
-
end
|
505
|
-
config
|
506
|
-
end
|
507
|
-
|
508
489
|
def pull_if_missing(image)
|
509
490
|
return if ::Docker::Image.exist?("#{repo(image)}:#{tag(image)}", {}, docker_connection)
|
510
491
|
pull_image image
|
data/lib/kitchen/helpers.rb
CHANGED
@@ -168,6 +168,78 @@ EOF
|
|
168
168
|
"#{prefix}-#{instance.name}"
|
169
169
|
end
|
170
170
|
|
171
|
+
def exposed_ports
|
172
|
+
coerce_exposed_ports(config[:ports])
|
173
|
+
end
|
174
|
+
|
175
|
+
def port_bindings
|
176
|
+
coerce_port_bindings(config[:ports])
|
177
|
+
end
|
178
|
+
|
179
|
+
def coerce_exposed_ports(v)
|
180
|
+
case v
|
181
|
+
when Hash, nil
|
182
|
+
v
|
183
|
+
else
|
184
|
+
x = Array(v).map { |a| parse_port(a) }
|
185
|
+
x.flatten!
|
186
|
+
x.each_with_object({}) do |y, h|
|
187
|
+
h[y['container_port']] = {}
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
def coerce_port_bindings(v)
|
193
|
+
case v
|
194
|
+
when Hash, nil
|
195
|
+
v
|
196
|
+
else
|
197
|
+
x = Array(v).map { |a| parse_port(a) }
|
198
|
+
x.flatten!
|
199
|
+
x.each_with_object({}) do |y, h|
|
200
|
+
h[y['container_port']] = [] unless h[y['container_port']]
|
201
|
+
h[y['container_port']] << {
|
202
|
+
'HostIp' => y['host_ip'],
|
203
|
+
'HostPort' => y['host_port'],
|
204
|
+
}
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
def parse_port(v)
|
210
|
+
parts = v.split(':')
|
211
|
+
case parts.length
|
212
|
+
when 3
|
213
|
+
host_ip = parts[0]
|
214
|
+
host_port = parts[1]
|
215
|
+
container_port = parts[2]
|
216
|
+
when 2
|
217
|
+
host_ip = '0.0.0.0'
|
218
|
+
host_port = parts[0]
|
219
|
+
container_port = parts[1]
|
220
|
+
when 1
|
221
|
+
host_ip = ''
|
222
|
+
host_port = ''
|
223
|
+
container_port = parts[0]
|
224
|
+
end
|
225
|
+
port_range, protocol = container_port.split('/')
|
226
|
+
if port_range.include?('-')
|
227
|
+
port_range = container_port.split('-')
|
228
|
+
port_range.map!(&:to_i)
|
229
|
+
Chef::Log.fatal("FATAL: Invalid port range! #{container_port}") if port_range[0] > port_range[1]
|
230
|
+
port_range = (port_range[0]..port_range[1]).to_a
|
231
|
+
end
|
232
|
+
# qualify the port-binding protocol even when it is implicitly tcp #427.
|
233
|
+
protocol = 'tcp' if protocol.nil?
|
234
|
+
Array(port_range).map do |port|
|
235
|
+
{
|
236
|
+
'host_ip' => host_ip,
|
237
|
+
'host_port' => host_port,
|
238
|
+
'container_port' => "#{port}/#{protocol}",
|
239
|
+
}
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
171
243
|
def remote_docker_host?
|
172
244
|
# return false if config[:docker_info]['OperatingSystem'].include?('Boot2Docker')
|
173
245
|
return true if config[:docker_host_url] =~ /^tcp:/
|
@@ -94,16 +94,33 @@ module Kitchen
|
|
94
94
|
|
95
95
|
elsif options[:docker_host_url] =~ /tcp:/
|
96
96
|
name = options[:data_container][:Name]
|
97
|
+
|
98
|
+
# DOCKER_HOST
|
99
|
+
docker_host_url_ip = options[:docker_host_url].split('tcp://')[1].split(':')[0]
|
100
|
+
|
101
|
+
# mapped IP of data container
|
97
102
|
candidate_ip = ::Docker::Container.all.select do |x|
|
98
103
|
x.info['Names'][0].eql?(name)
|
99
104
|
end.first.info['NetworkSettings']['Networks']['dokken']['IPAddress']
|
100
105
|
|
101
|
-
|
106
|
+
# mapped port
|
107
|
+
candidate_ssh_port = options[:data_container][:NetworkSettings][:Ports][:"22/tcp"][0][:HostPort]
|
108
|
+
|
109
|
+
debug "candidate_ip - #{candidate_ip}"
|
110
|
+
debug "candidate_ssh_port - #{candidate_ssh_port}"
|
111
|
+
|
112
|
+
if port_open?(candidate_ip, candidate_ssh_port)
|
113
|
+
debug "candidate_ip - #{candidate_ip}/#{candidate_ssh_port} open"
|
114
|
+
ssh_ip = candidate_ip
|
115
|
+
ssh_port = candidate_ssh_port
|
116
|
+
|
117
|
+
elsif port_open?(candidate_ip, '22')
|
102
118
|
ssh_ip = candidate_ip
|
103
119
|
ssh_port = '22'
|
120
|
+
debug "candidate_ip - #{candidate_ip}/22 open"
|
104
121
|
else
|
105
|
-
ssh_ip =
|
106
|
-
ssh_port =
|
122
|
+
ssh_ip = docker_host_url_ip
|
123
|
+
ssh_port = candidate_ssh_port
|
107
124
|
end
|
108
125
|
else
|
109
126
|
raise Kitchen::UserError, 'docker_host_url must be tcp:// or unix://'
|
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.5.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: 2017-06-
|
11
|
+
date: 2017-06-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: test-kitchen
|