kitchen-docker 0.8.1 → 0.9.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4b5e818b27e08a0bb66eb3112149baa24693cf64
4
- data.tar.gz: c92c8f8040451353f0ae7adea878bcb7c53fde83
3
+ metadata.gz: 2739fe136af5fc12187dc12311614fc6ff543e5f
4
+ data.tar.gz: 8cf6f0f2da67f247289076f05e25030faa0ef616
5
5
  SHA512:
6
- metadata.gz: 77259418eef3c8aad3f7d4d9644c55dd00ea219929143e9ac7435f16489784b071405a6edb7e9824622fb4804cf6b02fd99a5cebc162f0582faaee6c1dbde027
7
- data.tar.gz: c24d8cbc1874ef7e1fbb7a7d8cc2e04817e60583ad07ab59b5952020866233a69cac81e5d64942ef461bdded29f7d6105c183ea82eeac6fa5f7c176e937c44a4
6
+ metadata.gz: 83cc959ba5834d55b19779a3c864a5682f63b010bf4d2aacb05ba465e997da4a2b43dccbb664ac47fef4e31dae5e3b8cc5f6867c9a882b5f9c630e57fd724b38
7
+ data.tar.gz: 87b9510146a4aaa80c79d942b4be82baff3fc93a0dac2d210098ff0cacbecc1fb883ab1400e909144bb898ba19c25071c4fa5e4266072e3e9473cfaa27842510
data/README.md CHANGED
@@ -61,6 +61,24 @@ platforms:
61
61
 
62
62
  ## Configuration
63
63
 
64
+ ### socket
65
+
66
+ The Docker daemon socket to use. By default, Docker it will listen on
67
+ `unix:///var/run/docker.sock`, and no configuration here is required. If
68
+ Docker is binding to another host/port or Unix socket, you will need to set
69
+ this option. If a TCP socket is set, its host will be used for SSH access
70
+ to containers.
71
+
72
+ Examples:
73
+
74
+ ```
75
+ socket: unix:///tmp/docker.sock
76
+ ```
77
+
78
+ ```
79
+ socket: tcp://docker.example.com:4242
80
+ ```
81
+
64
82
  ### image
65
83
 
66
84
  The Docker image to use as the base for the suite containers. You can find
@@ -146,13 +164,13 @@ Adds a data volume(s) to the suite container.
146
164
  Examples:
147
165
 
148
166
  ```
149
- volume: /ftp
167
+ volume: /ftp
150
168
  ```
151
169
 
152
170
  ```
153
- volume:
154
- - /ftp
155
- - /srv
171
+ volume:
172
+ - /ftp
173
+ - /srv
156
174
  ```
157
175
 
158
176
  ## dns
@@ -163,13 +181,13 @@ dockers defaults.
163
181
  Examples:
164
182
 
165
183
  ```
166
- dns: 8.8.8.8
184
+ dns: 8.8.8.8
167
185
  ```
168
186
 
169
187
  ```
170
- dns:
171
- - 8.8.8.8
172
- - 8.8.4.4
188
+ dns:
189
+ - 8.8.8.8
190
+ - 8.8.4.4
173
191
  ```
174
192
 
175
193
  ### forward
@@ -180,13 +198,13 @@ the host (public) port in the mappings, if not, Docker chooses for you.
180
198
  Examples:
181
199
 
182
200
  ```
183
- forward: 80
201
+ forward: 80
184
202
  ```
185
203
 
186
204
  ```
187
- forward:
188
- - 22:2222
189
- - 80:8080
205
+ forward:
206
+ - 22:2222
207
+ - 80:8080
190
208
  ```
191
209
 
192
210
  ## Development
@@ -26,15 +26,16 @@ module Kitchen
26
26
  # @author Sean Porter <portertech@gmail.com>
27
27
  class Docker < Kitchen::Driver::SSHBase
28
28
 
29
- default_config :port, '22'
30
29
  default_config :username, 'kitchen'
31
30
  default_config :password, 'kitchen'
32
31
  default_config :require_chef_omnibus, true
33
32
  default_config :remove_images, false
34
33
  default_config :use_sudo, true
34
+
35
35
  default_config :image do |driver|
36
36
  driver.default_image
37
37
  end
38
+
38
39
  default_config :platform do |driver|
39
40
  driver.default_platform
40
41
  end
@@ -58,8 +59,9 @@ module Kitchen
58
59
  def create(state)
59
60
  state[:image_id] = build_image(state) unless state[:image_id]
60
61
  state[:container_id] = run_container(state) unless state[:container_id]
61
- state[:hostname] = container_address(state) unless state[:hostname]
62
- wait_for_sshd(state[:hostname])
62
+ state[:hostname] = remote_socket? ? socket_uri.host : 'localhost'
63
+ state[:port] = container_ssh_port(state)
64
+ wait_for_sshd(state[:hostname], :port => state[:port])
63
65
  end
64
66
 
65
67
  def destroy(state)
@@ -71,6 +73,20 @@ module Kitchen
71
73
 
72
74
  protected
73
75
 
76
+ def socket_uri
77
+ URI.parse(config[:socket])
78
+ end
79
+
80
+ def remote_socket?
81
+ config[:socket] ? socket_uri.scheme == 'tcp' : false
82
+ end
83
+
84
+ def docker_command(cmd, options={})
85
+ docker = "docker"
86
+ docker << " -H #{config[:socket]}" if config[:socket]
87
+ run_command("#{docker} #{cmd}", options)
88
+ end
89
+
74
90
  def dockerfile
75
91
  from = "FROM #{config[:image]}"
76
92
  platform = case config[:platform]
@@ -119,13 +135,13 @@ module Kitchen
119
135
  end
120
136
 
121
137
  def build_image(state)
122
- output = run_command("docker build -", :input => dockerfile)
138
+ output = docker_command("build -", :input => dockerfile)
123
139
  parse_image_id(output)
124
140
  end
125
141
 
126
142
  def parse_container_id(output)
127
143
  container_id = output.chomp
128
- unless container_id.size == 12
144
+ unless [12, 64].include?(container_id.size)
129
145
  raise ActionFailed,
130
146
  'Could not parse Docker run output for container ID'
131
147
  end
@@ -133,7 +149,7 @@ module Kitchen
133
149
  end
134
150
 
135
151
  def build_run_command(image_id)
136
- cmd = 'docker run -d'
152
+ cmd = "run -d -p 22"
137
153
  Array(config[:forward]).each {|port| cmd << " -p #{port}"}
138
154
  Array(config[:dns]).each {|dns| cmd << " -dns #{dns}"}
139
155
  Array(config[:volume]).each {|volume| cmd << " -v #{volume}"}
@@ -145,36 +161,37 @@ module Kitchen
145
161
 
146
162
  def run_container(state)
147
163
  cmd = build_run_command(state[:image_id])
148
- output = run_command(cmd)
164
+ output = docker_command(cmd)
149
165
  parse_container_id(output)
150
166
  end
151
167
 
152
- def parse_container_ip(output)
168
+ def parse_container_ssh_port(output)
153
169
  begin
154
170
  info = Array(::JSON.parse(output)).first
155
- settings = info['NetworkSettings']
156
- settings['IpAddress'] || settings['IPAddress']
171
+ ports = info['NetworkSettings']['Ports']
172
+ ssh_port = ports['22/tcp'].detect {|port| port['HostIp'] == '0.0.0.0'}
173
+ ssh_port['HostPort'].to_i
157
174
  rescue
158
175
  raise ActionFailed,
159
- 'Could not parse Docker inspect output for container IP address'
176
+ 'Could not parse Docker inspect output for container SSH port'
160
177
  end
161
178
  end
162
179
 
163
- def container_address(state)
180
+ def container_ssh_port(state)
164
181
  container_id = state[:container_id]
165
- output = run_command("docker inspect #{container_id}")
166
- parse_container_ip(output)
182
+ output = docker_command("inspect #{container_id}")
183
+ parse_container_ssh_port(output)
167
184
  end
168
185
 
169
186
  def rm_container(state)
170
187
  container_id = state[:container_id]
171
- run_command("docker stop #{container_id}")
172
- run_command("docker rm #{container_id}")
188
+ docker_command("stop #{container_id}")
189
+ docker_command("rm #{container_id}")
173
190
  end
174
191
 
175
192
  def rm_image(state)
176
193
  image_id = state[:image_id]
177
- run_command("docker rmi #{image_id}")
194
+ docker_command("rmi #{image_id}")
178
195
  end
179
196
  end
180
197
  end
@@ -19,6 +19,6 @@ module Kitchen
19
19
  module Driver
20
20
 
21
21
  # Version string for Docker Kitchen driver
22
- DOCKER_VERSION = "0.8.1"
22
+ DOCKER_VERSION = "0.9.0"
23
23
  end
24
24
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kitchen-docker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Porter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-26 00:00:00.000000000 Z
11
+ date: 2013-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: test-kitchen
@@ -138,3 +138,4 @@ signing_key:
138
138
  specification_version: 4
139
139
  summary: A Test Kitchen Driver for Docker
140
140
  test_files: []
141
+ has_rdoc: