kitchen-docker 2.3.0 → 2.4.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: 8ac895bb5b0be3d5089efcadf3f6c6067d5603ce
4
- data.tar.gz: 28f3c2dc7fcf14f09209cd81d2973dfee973299e
3
+ metadata.gz: 49be9eaec81f6c9277c620d4c99e7a50b99f930f
4
+ data.tar.gz: 1daa96d8e99245bec677921425fe125a21266544
5
5
  SHA512:
6
- metadata.gz: 5a33adf818806a487c6d2cf5584bfb09b3cffac4f178ddcdab6336e0cce961ee3375167127b6bef88015d516eec7894da4b62bb00ba07c654a0ac4bcb711b7b9
7
- data.tar.gz: 16a68010bcb5ec673ef1e7f9f0f6a179514fb53777287da82871e24de6c2784b0bccd3dddc7d89341dae2c94e97ac5b2783679d2ec14881080515ec7bcb80a89
6
+ metadata.gz: ed5cc8b3f3cd1d8300969bb4fe51c7dcd288dcc79a9744dcdd37150cd73231111ca3dec9ce1ff3f9797e40cbd55a809e97c38da69613ef47abfd872c95b722f6
7
+ data.tar.gz: a21bf725b1eb0082d32a8e6dd4e955f0847b667a8e015a08ba1a04a2c2e5abe1ebbe6241810ed3cffe7d9e8ee13e6b05032c9d04f0d4b8c1daf095a112ead259
@@ -1,3 +1,13 @@
1
+ ## 2.4.0
2
+
3
+ * [#148](https://github.com/portertech/kitchen-docker/issues/148) Restored support for older versions of Ruby.
4
+ * [#149](https://github.com/portertech/kitchen-docker/pulls/149) Handle connecting to a container directly as root.
5
+ * [#154](https://github.com/portertech/kitchen-docker/pulls/154) Improve container caching by reordering the build steps.
6
+ * [#176](https://github.com/portertech/kitchen-docker/pulls/176) Expose proxy environment variables to the container automatically.
7
+ * [#192](https://github.com/portertech/kitchen-docker/pulls/192) Set `$container=docker` for CentOS images.
8
+ * [#196](https://github.com/portertech/kitchen-docker/pulls/196) Mutex SSH key generation for use with `kitchen -c`.
9
+ * [#192](https://github.com/portertech/kitchen-docker/pulls/192) Don't wait when stopping a container.
10
+
1
11
  ## 2.3.0
2
12
 
3
13
  * `build_context` option (boolean) to enable/disable sending the build
data/README.md CHANGED
@@ -94,7 +94,11 @@ Examples:
94
94
  socket: tcp://docker.example.com:4242
95
95
  ```
96
96
 
97
- If you use [Boot2Docker](https://github.com/boot2docker/boot2docker), set your `DOCKER_HOST` environment variable properly (e.g. `export DOCKER_HOST=tcp://192.168.59.103:2375`) or you have to use the following:
97
+ If you use [Boot2Docker](https://github.com/boot2docker/boot2docker)
98
+ or [docker-machine](https://docs.docker.com/machine/get-started/) set
99
+ your `DOCKER_HOST` environment variable properly with `export
100
+ DOCKER_HOST=tcp://192.168.59.103:2375` or `eval "$(docker-machine env
101
+ $MACHINE)"` then use the following:
98
102
 
99
103
  ```yaml
100
104
  socket: tcp://192.168.59.103:2375
@@ -70,6 +70,8 @@ module Kitchen
70
70
  !driver.remote_socket?
71
71
  end
72
72
 
73
+ MUTEX_FOR_SSH_KEYS = Mutex.new
74
+
73
75
  def verify_dependencies
74
76
  run_command("#{config[:binary]} >> #{dev_null} 2>&1", :quiet => true)
75
77
  rescue
@@ -137,23 +139,42 @@ module Kitchen
137
139
  end
138
140
 
139
141
  def generate_keys
140
- if !File.exist?(config[:public_key]) || !File.exist?(config[:private_key])
141
- private_key = OpenSSL::PKey::RSA.new(2048)
142
- blobbed_key = Base64.encode64(private_key.to_blob).gsub("\n", '')
143
- public_key = "ssh-rsa #{blobbed_key} kitchen_docker_key"
144
- File.open(config[:private_key], 'w') do |file|
145
- file.write(private_key)
146
- file.chmod(0600)
147
- end
148
- File.open(config[:public_key], 'w') do |file|
149
- file.write(public_key)
150
- file.chmod(0600)
142
+ MUTEX_FOR_SSH_KEYS.synchronize do
143
+ if !File.exist?(config[:public_key]) || !File.exist?(config[:private_key])
144
+ private_key = OpenSSL::PKey::RSA.new(2048)
145
+ blobbed_key = Base64.encode64(private_key.to_blob).gsub("\n", '')
146
+ public_key = "ssh-rsa #{blobbed_key} kitchen_docker_key"
147
+ File.open(config[:private_key], 'w') do |file|
148
+ file.write(private_key)
149
+ file.chmod(0600)
150
+ end
151
+ File.open(config[:public_key], 'w') do |file|
152
+ file.write(public_key)
153
+ file.chmod(0600)
154
+ end
151
155
  end
152
156
  end
153
157
  end
154
158
 
155
159
  def build_dockerfile
156
160
  from = "FROM #{config[:image]}"
161
+
162
+ env_variables = ''
163
+ if config[:http_proxy]
164
+ env_variables << "ENV http_proxy #{config[:http_proxy]}\n"
165
+ env_variables << "ENV HTTP_PROXY #{config[:http_proxy]}\n"
166
+ end
167
+
168
+ if config[:https_proxy]
169
+ env_variables << "ENV https_proxy #{config[:https_proxy]}\n"
170
+ env_variables << "ENV HTTPS_PROXY #{config[:https_proxy]}\n"
171
+ end
172
+
173
+ if config[:no_proxy]
174
+ env_variables << "ENV no_proxy #{config[:no_proxy]}\n"
175
+ env_variables << "ENV NO_PROXY #{config[:no_proxy]}\n"
176
+ end
177
+
157
178
  platform = case config[:platform]
158
179
  when 'debian', 'ubuntu'
159
180
  disable_upstart = <<-eos
@@ -168,6 +189,7 @@ module Kitchen
168
189
  config[:disable_upstart] ? disable_upstart + packages : packages
169
190
  when 'rhel', 'centos', 'fedora'
170
191
  <<-eos
192
+ ENV container docker
171
193
  RUN yum clean all
172
194
  RUN yum install -y sudo openssh-server openssh-clients which curl
173
195
  RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''
@@ -201,27 +223,32 @@ module Kitchen
201
223
 
202
224
  username = config[:username]
203
225
  password = config[:password]
204
- public_key = IO.read(config[:public_key])
226
+ public_key = IO.read(config[:public_key]).strip
227
+ homedir = username == 'root' ? '/root' : "/home/#{username}"
205
228
 
206
229
  base = <<-eos
207
- RUN if ! getent passwd #{username}; then useradd -d /home/#{username} -m -s /bin/bash #{username}; fi
230
+ RUN if ! getent passwd #{username}; then \
231
+ useradd -d #{homedir} -m -s /bin/bash #{username}; \
232
+ fi
208
233
  RUN echo #{username}:#{password} | chpasswd
209
234
  RUN echo '#{username} ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
210
235
  RUN mkdir -p /etc/sudoers.d
211
236
  RUN echo '#{username} ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers.d/#{username}
212
237
  RUN chmod 0440 /etc/sudoers.d/#{username}
213
- RUN [ ! -d /home/#{username}/.ssh ] && mkdir /home/#{username}/.ssh
214
- RUN chown -R #{username} /home/#{username}/.ssh
215
- RUN chmod 0700 /home/#{username}/.ssh
216
- RUN echo '#{public_key}' >> /home/#{username}/.ssh/authorized_keys
217
- RUN chown #{username} /home/#{username}/.ssh/authorized_keys
218
- RUN chmod 0600 /home/#{username}/.ssh/authorized_keys
238
+ RUN mkdir -p #{homedir}/.ssh
239
+ RUN chown -R #{username} #{homedir}/.ssh
240
+ RUN chmod 0700 #{homedir}/.ssh
241
+ RUN touch #{homedir}/.ssh/authorized_keys
242
+ RUN chown #{username} #{homedir}/.ssh/authorized_keys
243
+ RUN chmod 0600 #{homedir}/.ssh/authorized_keys
219
244
  eos
220
245
  custom = ''
221
246
  Array(config[:provision_command]).each do |cmd|
222
247
  custom << "RUN #{cmd}\n"
223
248
  end
224
- [from, platform, base, custom].join("\n")
249
+ ssh_key = "RUN echo '#{public_key}' >> #{homedir}/.ssh/authorized_keys"
250
+ # Empty string to ensure the file ends with a newline.
251
+ [from, env_variables, platform, base, custom, ssh_key, ''].join("\n")
225
252
  end
226
253
 
227
254
  def dockerfile
@@ -249,10 +276,14 @@ module Kitchen
249
276
  cmd << " --no-cache" unless config[:use_cache]
250
277
  dockerfile_contents = dockerfile
251
278
  build_context = config[:build_context] ? '.' : '-'
252
- output = Tempfile.create('Dockerfile-kitchen-', Dir.pwd) do |file|
253
- file.write(dockerfile_contents)
279
+ file = Tempfile.new('Dockerfile-kitchen', Dir.pwd)
280
+ output = begin
281
+ file.write(dockerfile)
254
282
  file.close
255
283
  docker_command("#{cmd} -f #{file.path} #{build_context}", :input => dockerfile_contents)
284
+ ensure
285
+ file.close unless file.closed?
286
+ file.unlink
256
287
  end
257
288
  parse_image_id(output)
258
289
  end
@@ -322,7 +353,7 @@ module Kitchen
322
353
 
323
354
  def rm_container(state)
324
355
  container_id = state[:container_id]
325
- docker_command("stop #{container_id}")
356
+ docker_command("stop -t 0 #{container_id}")
326
357
  docker_command("rm #{container_id}")
327
358
  end
328
359
 
@@ -19,6 +19,6 @@ module Kitchen
19
19
  module Driver
20
20
 
21
21
  # Version string for Docker Kitchen driver
22
- DOCKER_VERSION = "2.3.0"
22
+ DOCKER_VERSION = "2.4.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: 2.3.0
4
+ version: 2.4.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: 2015-07-20 00:00:00.000000000 Z
11
+ date: 2016-05-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: test-kitchen
@@ -140,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
140
  version: '0'
141
141
  requirements: []
142
142
  rubyforge_project:
143
- rubygems_version: 2.2.2
143
+ rubygems_version: 2.6.2
144
144
  signing_key:
145
145
  specification_version: 4
146
146
  summary: A Docker Driver for Test Kitchen