kitchen-docker_cli 0.2.0.beta → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +3 -2
- data/lib/kitchen/driver/docker_cli.rb +19 -11
- data/lib/kitchen/driver/docker_cli_version.rb +1 -1
- data/spec/kitchen/driver/docker_cli_spec.rb +31 -5
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f7f3a5f06608f5e262b3327dae9c4714a942701b
|
4
|
+
data.tar.gz: ab67af775455f5966a48f6a613e7075a9ca1dfb2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ca4f63b2b912704f62bdf0cdcc7f4e0ef84f8d42d8989102d7d0c7b244e3d9da490fadda5f8d32f7190377a52ccfd8340b2d9a0888b632cfe6ef042d1ac5dab1
|
7
|
+
data.tar.gz: 2dab5ee66aeda1bdeef838ddc63964a8332bcecec261e2f80a89a02150d5925a348b4d586f6a6f1714c1519407ea9a4c54489f3f5b3f095da376b39040fef07c
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
# <a name="title"></a> Kitchen::DockerCli [![Gem Version](https://badge.fury.io/rb/kitchen-docker_cli.svg)](http://badge.fury.io/rb/kitchen-docker_cli) [![Build Status](https://travis-ci.org/marcy-terui/kitchen-docker_cli.svg?branch=master)](https://travis-ci.org/marcy-terui/kitchen-docker_cli) [![Coverage Status](https://coveralls.io/repos/marcy-terui/kitchen-docker_cli/badge.png)](https://coveralls.io/r/marcy-terui/kitchen-docker_cli)
|
2
|
-
|
1
|
+
# <a name="title"></a> Kitchen::DockerCli [![Gem Version](https://badge.fury.io/rb/kitchen-docker_cli.svg)](http://badge.fury.io/rb/kitchen-docker_cli) [![Build Status](https://travis-ci.org/marcy-terui/kitchen-docker_cli.svg?branch=master)](https://travis-ci.org/marcy-terui/kitchen-docker_cli) [![Coverage Status](https://coveralls.io/repos/marcy-terui/kitchen-docker_cli/badge.png)](https://coveralls.io/r/marcy-terui/kitchen-docker_cli)
|
3
2
|
A Test Kitchen Driver for Docker command line interface.
|
4
3
|
|
5
4
|
This plugin is created with only Docker CLI functions.
|
@@ -10,6 +9,8 @@ Therefore, we can test with an environment that has no extra software such as ``
|
|
10
9
|
- Docker (>= 1.3)
|
11
10
|
This driver uses ```docker exec``` command.
|
12
11
|
|
12
|
+
- tar (GNU Tar)
|
13
|
+
|
13
14
|
## <a name="installation"></a> Installation and Setup
|
14
15
|
|
15
16
|
```sh
|
@@ -62,7 +62,8 @@ module Kitchen
|
|
62
62
|
|
63
63
|
execute(docker_exec_command(state[:container_id], provisioner.install_command, :tty => true)) if provisioner.install_command
|
64
64
|
execute(docker_exec_command(state[:container_id], provisioner.init_command, :tty => true)) if provisioner.init_command
|
65
|
-
execute(
|
65
|
+
execute(docker_pre_transfer_command(provisioner, state[:container_id]))
|
66
|
+
run_command(docker_transfer_command(provisioner, state[:container_id]))
|
66
67
|
execute(docker_exec_command(state[:container_id], provisioner.prepare_command, :tty => true)) if provisioner.prepare_command
|
67
68
|
execute(docker_exec_command(state[:container_id], provisioner.run_command, :tty => true)) if provisioner.run_command
|
68
69
|
|
@@ -113,6 +114,10 @@ module Kitchen
|
|
113
114
|
parse_container_id(output)
|
114
115
|
end
|
115
116
|
|
117
|
+
def docker_command(cmd)
|
118
|
+
"docker #{cmd}"
|
119
|
+
end
|
120
|
+
|
116
121
|
def docker_build_command
|
117
122
|
cmd = 'build'
|
118
123
|
cmd << ' --no-cache' if config[:no_cache]
|
@@ -120,7 +125,7 @@ module Kitchen
|
|
120
125
|
end
|
121
126
|
|
122
127
|
def docker_run_command(image)
|
123
|
-
cmd = "run -d
|
128
|
+
cmd = "run -d"
|
124
129
|
cmd << " --name #{config[:container_name]}" if config[:container_name]
|
125
130
|
cmd << ' -P' if config[:publish_all]
|
126
131
|
cmd << ' --privileged' if config[:privileged]
|
@@ -138,14 +143,18 @@ module Kitchen
|
|
138
143
|
exec_cmd << " #{container_id} #{cmd}"
|
139
144
|
end
|
140
145
|
|
141
|
-
def
|
142
|
-
cmd = "
|
143
|
-
cmd << " &&
|
144
|
-
cmd << " && cp -rp #{provisioner.sandbox_path}/*"
|
145
|
-
cmd << " #{provisioner[:root_path]}/"
|
146
|
+
def docker_pre_transfer_command(provisioner, container_id)
|
147
|
+
cmd = "mkdir -p #{provisioner[:root_path]}"
|
148
|
+
cmd << " && rm -rf #{provisioner[:root_path]}/*"
|
146
149
|
docker_exec_command(container_id, cmd)
|
147
150
|
end
|
148
151
|
|
152
|
+
def docker_transfer_command(provisioner, container_id)
|
153
|
+
remote_cmd = "tar x -C #{provisioner[:root_path]}"
|
154
|
+
local_cmd = "cd #{provisioner.sandbox_path} && tar cf - ./"
|
155
|
+
"#{local_cmd} | #{docker_command(docker_exec_command(container_id, remote_cmd, :interactive => true))}"
|
156
|
+
end
|
157
|
+
|
149
158
|
def parse_image_id(output)
|
150
159
|
unless output.chomp.match(/Successfully built ([0-9a-z]{12})$/)
|
151
160
|
raise ActionFailed, 'Could not parse IMAGE ID.'
|
@@ -165,10 +174,10 @@ module Kitchen
|
|
165
174
|
case config[:platform]
|
166
175
|
when 'debian', 'ubuntu'
|
167
176
|
file << 'RUN apt-get update'
|
168
|
-
file << 'RUN apt-get -y install sudo curl'
|
177
|
+
file << 'RUN apt-get -y install sudo curl tar'
|
169
178
|
when 'rhel', 'centos'
|
170
179
|
file << 'RUN yum clean all'
|
171
|
-
file << 'RUN yum -y install sudo curl'
|
180
|
+
file << 'RUN yum -y install sudo curl tar'
|
172
181
|
else
|
173
182
|
# TODO: Support other distribution
|
174
183
|
end
|
@@ -177,8 +186,7 @@ module Kitchen
|
|
177
186
|
end
|
178
187
|
|
179
188
|
def execute(cmd, opts = {})
|
180
|
-
cmd
|
181
|
-
run_command(cmd, opts)
|
189
|
+
run_command(docker_command(cmd), opts)
|
182
190
|
end
|
183
191
|
|
184
192
|
|
@@ -83,7 +83,9 @@ describe Kitchen::Driver::DockerCli, "converge" do
|
|
83
83
|
instance.stub(:provisioner).and_return(provisioner)
|
84
84
|
@docker_cli.stub(:instance).and_return(instance)
|
85
85
|
@docker_cli.stub(:docker_transfer_command)
|
86
|
+
@docker_cli.stub(:docker_pre_transfer_command)
|
86
87
|
@docker_cli.stub(:execute)
|
88
|
+
@docker_cli.stub(:run_command)
|
87
89
|
end
|
88
90
|
|
89
91
|
example do
|
@@ -222,7 +224,7 @@ describe Kitchen::Driver::DockerCli, "docker_run_command" do
|
|
222
224
|
let(:config) { {:command => '/bin/bash'} }
|
223
225
|
|
224
226
|
example do
|
225
|
-
cmd = "run -d
|
227
|
+
cmd = "run -d test /bin/bash"
|
226
228
|
expect(@docker_cli.docker_run_command('test')).to eq cmd
|
227
229
|
end
|
228
230
|
end
|
@@ -241,7 +243,7 @@ describe Kitchen::Driver::DockerCli, "docker_run_command" do
|
|
241
243
|
end
|
242
244
|
|
243
245
|
example do
|
244
|
-
cmd = "run -d
|
246
|
+
cmd = "run -d --name web -P --privileged -p 80:8080 -p 22:2222 -v /dev:/dev --link mysql:db test /bin/bash"
|
245
247
|
expect(@docker_cli.docker_run_command('test')).to eq cmd
|
246
248
|
end
|
247
249
|
end
|
@@ -308,7 +310,7 @@ describe Kitchen::Driver::DockerCli, "docker_file" do
|
|
308
310
|
example do
|
309
311
|
ret = "FROM centos/centos6\n"
|
310
312
|
ret << "RUN yum clean all\n"
|
311
|
-
ret << "RUN yum -y install sudo curl"
|
313
|
+
ret << "RUN yum -y install sudo curl tar"
|
312
314
|
expect(@docker_cli.send(:docker_file)).to eq ret
|
313
315
|
end
|
314
316
|
end
|
@@ -325,13 +327,24 @@ describe Kitchen::Driver::DockerCli, "docker_file" do
|
|
325
327
|
ret = "FROM ubuntu/12.04\n"
|
326
328
|
ret = "FROM ubuntu/12.04\n"
|
327
329
|
ret << "RUN apt-get update\n"
|
328
|
-
ret << "RUN apt-get -y install sudo curl\n"
|
330
|
+
ret << "RUN apt-get -y install sudo curl tar\n"
|
329
331
|
ret << "RUN test\nRUN test2"
|
330
332
|
expect(@docker_cli.send(:docker_file)).to eq ret
|
331
333
|
end
|
332
334
|
end
|
333
335
|
end
|
334
336
|
|
337
|
+
describe Kitchen::Driver::DockerCli, "docker_command" do
|
338
|
+
|
339
|
+
before do
|
340
|
+
@docker_cli = Kitchen::Driver::DockerCli.new()
|
341
|
+
end
|
342
|
+
|
343
|
+
example do
|
344
|
+
expect(@docker_cli.docker_command('exec')).to eq "docker exec"
|
345
|
+
end
|
346
|
+
end
|
347
|
+
|
335
348
|
describe Kitchen::Driver::DockerCli, "docker_exec_command" do
|
336
349
|
|
337
350
|
before do
|
@@ -349,6 +362,19 @@ describe Kitchen::Driver::DockerCli, "docker_exec_command" do
|
|
349
362
|
end
|
350
363
|
end
|
351
364
|
|
365
|
+
describe Kitchen::Driver::DockerCli, "docker_pre_transfer_command" do
|
366
|
+
|
367
|
+
before do
|
368
|
+
@docker_cli = Kitchen::Driver::DockerCli.new()
|
369
|
+
end
|
370
|
+
|
371
|
+
example do
|
372
|
+
provisoner = {:root_path => '/tmp/kitchen'}
|
373
|
+
cmd = "exec abc mkdir -p /tmp/kitchen && rm -rf /tmp/kitchen/*"
|
374
|
+
expect(@docker_cli.docker_pre_transfer_command(provisoner, 'abc')).to eq cmd
|
375
|
+
end
|
376
|
+
end
|
377
|
+
|
352
378
|
describe Kitchen::Driver::DockerCli, "docker_transfer_command" do
|
353
379
|
|
354
380
|
before do
|
@@ -358,7 +384,7 @@ describe Kitchen::Driver::DockerCli, "docker_transfer_command" do
|
|
358
384
|
example do
|
359
385
|
provisoner = {:root_path => '/tmp/kitchen'}
|
360
386
|
provisoner.stub(:sandbox_path).and_return('/tmp/sandbox')
|
361
|
-
cmd = "
|
387
|
+
cmd = "cd /tmp/sandbox && tar cf - ./ | docker exec -i abc tar x -C /tmp/kitchen"
|
362
388
|
expect(@docker_cli.docker_transfer_command(provisoner, 'abc')).to eq cmd
|
363
389
|
end
|
364
390
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kitchen-docker_cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masashi Terui
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: test-kitchen
|
@@ -131,9 +131,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
131
131
|
version: '0'
|
132
132
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
133
133
|
requirements:
|
134
|
-
- - "
|
134
|
+
- - ">="
|
135
135
|
- !ruby/object:Gem::Version
|
136
|
-
version:
|
136
|
+
version: '0'
|
137
137
|
requirements: []
|
138
138
|
rubyforge_project:
|
139
139
|
rubygems_version: 2.2.2
|