kitchen-docker 0.8.1 → 0.9.0

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
  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: