kitchen-docker 1.1.0.beta → 1.2.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/.kitchen.yml +16 -0
- data/README.md +33 -8
- data/lib/kitchen/driver/docker.rb +37 -10
- data/lib/kitchen/driver/docker/erb.rb +35 -0
- data/lib/kitchen/driver/docker_version.rb +1 -1
- data/test/Dockerfile +10 -0
- data/test/integration/default/serverspec/default_spec.rb +8 -0
- metadata +11 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 86592dc15baa47fd6da302f7c30d88f358f02e46
|
4
|
+
data.tar.gz: c595e77b2dbc2c200a1e4dcc3316e648463ee790
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 26921d25432cab0ca8281e2e0880166fcadb2ddc53693974101ae3c7cab6815600db9edde85c9c84e0f752e13582a4d90b32f02d8c46645be2aee0f484a4965b
|
7
|
+
data.tar.gz: 75bcdad585f54c9ffccffc8cdf8f69ada4b240e1741eb1938f23c90a8e789218f677cfff362510da7a931ca38ff64e9a511c5c8d4c198415cc3676fa934f4adb
|
data/.kitchen.yml
CHANGED
@@ -1,14 +1,30 @@
|
|
1
1
|
---
|
2
2
|
driver:
|
3
3
|
name: docker
|
4
|
+
provision_command: curl -L http://www.opscode.com/chef/install.sh | bash
|
4
5
|
|
5
6
|
provisioner:
|
6
7
|
name: dummy
|
7
8
|
|
8
9
|
platforms:
|
9
10
|
- name: ubuntu-12.04
|
11
|
+
- name: ubuntu-13.10
|
10
12
|
- name: centos-6.4
|
13
|
+
- name: debian
|
14
|
+
- name: arch
|
15
|
+
driver:
|
16
|
+
image: base/arch
|
11
17
|
- name: unknown
|
18
|
+
driver:
|
19
|
+
image: ubuntu:12.04
|
20
|
+
platform: ubuntu
|
21
|
+
- name: dockerfile
|
22
|
+
driver:
|
23
|
+
username: dockerfile
|
24
|
+
password: dockerfile
|
25
|
+
dockerfile: test/Dockerfile
|
26
|
+
run_command: /sbin/init
|
12
27
|
|
13
28
|
suites:
|
14
29
|
- name: default
|
30
|
+
- name: concurrency
|
data/README.md
CHANGED
@@ -32,7 +32,9 @@ platforms:
|
|
32
32
|
## Default Configuration
|
33
33
|
|
34
34
|
This driver can determine an image and platform type for a select number of
|
35
|
-
platforms.
|
35
|
+
platforms.
|
36
|
+
|
37
|
+
Examples:
|
36
38
|
|
37
39
|
```
|
38
40
|
---
|
@@ -58,6 +60,22 @@ platforms:
|
|
58
60
|
|
59
61
|
## Configuration
|
60
62
|
|
63
|
+
### binary
|
64
|
+
|
65
|
+
The Docker binary to use.
|
66
|
+
|
67
|
+
The default value is `docker`.
|
68
|
+
|
69
|
+
Examples:
|
70
|
+
|
71
|
+
```
|
72
|
+
binary: docker.io
|
73
|
+
```
|
74
|
+
|
75
|
+
```
|
76
|
+
binary: /opt/docker
|
77
|
+
```
|
78
|
+
|
61
79
|
### socket
|
62
80
|
|
63
81
|
The Docker daemon socket to use. By default, Docker will listen on
|
@@ -81,10 +99,8 @@ Examples:
|
|
81
99
|
The Docker image to use as the base for the suite containers. You can find
|
82
100
|
images using the [Docker Index][docker_index].
|
83
101
|
|
84
|
-
The default will be
|
85
|
-
|
86
|
-
cannot be computed, then the default value is `base`, an official Ubuntu
|
87
|
-
[image][docker_default_image].
|
102
|
+
The default will be computed, using the platform name (see the Default
|
103
|
+
Configuration section for more details).
|
88
104
|
|
89
105
|
### platform
|
90
106
|
|
@@ -94,9 +110,8 @@ suite container for Test Kitchen. Kitchen Docker currently supports:
|
|
94
110
|
* `debian` or `ubuntu`
|
95
111
|
* `rhel` or `centos`
|
96
112
|
|
97
|
-
The default will be
|
98
|
-
|
99
|
-
cannot be computed, then the default value is `ubuntu`.
|
113
|
+
The default will be computed, using the platform name (see the Default
|
114
|
+
Configuration section for more details).
|
100
115
|
|
101
116
|
### require\_chef\_omnibus
|
102
117
|
|
@@ -252,6 +267,16 @@ Examples:
|
|
252
267
|
privileged: true
|
253
268
|
```
|
254
269
|
|
270
|
+
## dockerfile
|
271
|
+
|
272
|
+
Use a custom Dockerfile, instead of having Kitchen-Docker build one for you.
|
273
|
+
|
274
|
+
Examples:
|
275
|
+
|
276
|
+
```
|
277
|
+
dockerfile: test/Dockerfile
|
278
|
+
```
|
279
|
+
|
255
280
|
## Development
|
256
281
|
|
257
282
|
* Source hosted at [GitHub][repo]
|
@@ -16,6 +16,7 @@
|
|
16
16
|
|
17
17
|
require 'kitchen'
|
18
18
|
require 'json'
|
19
|
+
require File.join(File.dirname(__FILE__), 'docker', 'erb')
|
19
20
|
|
20
21
|
module Kitchen
|
21
22
|
|
@@ -26,6 +27,7 @@ module Kitchen
|
|
26
27
|
# @author Sean Porter <portertech@gmail.com>
|
27
28
|
class Docker < Kitchen::Driver::SSHBase
|
28
29
|
|
30
|
+
default_config :binary, 'docker'
|
29
31
|
default_config :socket, 'unix:///var/run/docker.sock'
|
30
32
|
default_config :privileged, false
|
31
33
|
default_config :use_cache, true
|
@@ -49,7 +51,7 @@ module Kitchen
|
|
49
51
|
default_config :disable_upstart, true
|
50
52
|
|
51
53
|
def verify_dependencies
|
52
|
-
run_command(
|
54
|
+
run_command("#{config[:binary]} > /dev/null", :quiet => true)
|
53
55
|
rescue
|
54
56
|
raise UserError,
|
55
57
|
'You must first install the Docker CLI tool http://www.docker.io/gettingstarted/'
|
@@ -61,7 +63,7 @@ module Kitchen
|
|
61
63
|
end
|
62
64
|
|
63
65
|
def default_platform
|
64
|
-
instance.platform.name.split('-').first
|
66
|
+
instance.platform.name.split('-').first
|
65
67
|
end
|
66
68
|
|
67
69
|
def create(state)
|
@@ -73,7 +75,7 @@ module Kitchen
|
|
73
75
|
end
|
74
76
|
|
75
77
|
def destroy(state)
|
76
|
-
rm_container(state) if state
|
78
|
+
rm_container(state) if container_exists?(state)
|
77
79
|
if config[:remove_images] && state[:image_id]
|
78
80
|
rm_image(state)
|
79
81
|
end
|
@@ -90,12 +92,12 @@ module Kitchen
|
|
90
92
|
end
|
91
93
|
|
92
94
|
def docker_command(cmd, options={})
|
93
|
-
docker =
|
95
|
+
docker = config[:binary].dup
|
94
96
|
docker << " -H #{config[:socket]}" if config[:socket]
|
95
|
-
run_command("#{docker} #{cmd}", options)
|
97
|
+
run_command("#{docker} #{cmd}", options.merge(:quiet => !logger.debug?))
|
96
98
|
end
|
97
99
|
|
98
|
-
def
|
100
|
+
def build_dockerfile
|
99
101
|
from = "FROM #{config[:image]}"
|
100
102
|
platform = case config[:platform]
|
101
103
|
when 'debian', 'ubuntu'
|
@@ -113,8 +115,15 @@ module Kitchen
|
|
113
115
|
<<-eos
|
114
116
|
RUN yum clean all
|
115
117
|
RUN yum install -y sudo openssh-server openssh-clients which curl
|
116
|
-
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
|
117
|
-
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
|
118
|
+
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''
|
119
|
+
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ''
|
120
|
+
eos
|
121
|
+
when 'arch'
|
122
|
+
<<-eos
|
123
|
+
RUN pacman -Syu --noconfirm
|
124
|
+
RUN pacman -S --noconfirm openssh sudo curl
|
125
|
+
RUN ssh-keygen -A -t rsa -f /etc/ssh/ssh_host_rsa_key
|
126
|
+
RUN ssh-keygen -A -t dsa -f /etc/ssh/ssh_host_dsa_key
|
118
127
|
eos
|
119
128
|
else
|
120
129
|
raise ActionFailed,
|
@@ -135,6 +144,16 @@ module Kitchen
|
|
135
144
|
[from, platform, base, custom].join("\n")
|
136
145
|
end
|
137
146
|
|
147
|
+
def dockerfile
|
148
|
+
if config[:dockerfile]
|
149
|
+
template = IO.read(File.expand_path(config[:dockerfile]))
|
150
|
+
context = DockerERBContext.new(config.to_hash)
|
151
|
+
ERB.new(template).result(context.get_binding)
|
152
|
+
else
|
153
|
+
build_dockerfile
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
138
157
|
def parse_image_id(output)
|
139
158
|
output.each_line do |line|
|
140
159
|
if line =~ /image id|build successful|successfully built/i
|
@@ -180,6 +199,15 @@ module Kitchen
|
|
180
199
|
parse_container_id(output)
|
181
200
|
end
|
182
201
|
|
202
|
+
def inspect_container(state)
|
203
|
+
container_id = state[:container_id]
|
204
|
+
docker_command("inspect #{container_id}")
|
205
|
+
end
|
206
|
+
|
207
|
+
def container_exists?(state)
|
208
|
+
!!inspect_container(state) rescue false
|
209
|
+
end
|
210
|
+
|
183
211
|
def parse_container_ssh_port(output)
|
184
212
|
begin
|
185
213
|
info = Array(::JSON.parse(output)).first
|
@@ -193,8 +221,7 @@ module Kitchen
|
|
193
221
|
end
|
194
222
|
|
195
223
|
def container_ssh_port(state)
|
196
|
-
|
197
|
-
output = docker_command("inspect #{container_id}")
|
224
|
+
output = inspect_container(state)
|
198
225
|
parse_container_ssh_port(output)
|
199
226
|
end
|
200
227
|
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
#
|
3
|
+
# Copyright (C) 2013, Sean Porter
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
require 'erb'
|
18
|
+
|
19
|
+
module Kitchen
|
20
|
+
|
21
|
+
module Driver
|
22
|
+
|
23
|
+
class DockerERBContext
|
24
|
+
def initialize(config={})
|
25
|
+
config.each do |key, value|
|
26
|
+
instance_variable_set('@' + key.to_s, value)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def get_binding
|
31
|
+
binding
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/test/Dockerfile
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
FROM centos:6.4
|
2
|
+
RUN yum clean all
|
3
|
+
RUN yum install -y sudo openssh-server openssh-clients which curl htop
|
4
|
+
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
|
5
|
+
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
|
6
|
+
RUN mkdir -p /var/run/sshd
|
7
|
+
RUN useradd -d /home/<%= @username %> -m -s /bin/bash <%= @username %>
|
8
|
+
RUN echo <%= "#{@username}:#{@password}" %> | chpasswd
|
9
|
+
RUN echo '<%= @username %> ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
|
10
|
+
RUN curl -L http://www.opscode.com/chef/install.sh | bash
|
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: 1.
|
4
|
+
version: 1.2.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: 2014-
|
11
|
+
date: 2014-04-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: test-kitchen
|
@@ -113,7 +113,10 @@ files:
|
|
113
113
|
- Rakefile
|
114
114
|
- kitchen-docker.gemspec
|
115
115
|
- lib/kitchen/driver/docker.rb
|
116
|
+
- lib/kitchen/driver/docker/erb.rb
|
116
117
|
- lib/kitchen/driver/docker_version.rb
|
118
|
+
- test/Dockerfile
|
119
|
+
- test/integration/default/serverspec/default_spec.rb
|
117
120
|
homepage: https://github.com/portertech/kitchen-docker
|
118
121
|
licenses:
|
119
122
|
- Apache 2.0
|
@@ -129,13 +132,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
129
132
|
version: '0'
|
130
133
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
131
134
|
requirements:
|
132
|
-
- - "
|
135
|
+
- - ">="
|
133
136
|
- !ruby/object:Gem::Version
|
134
|
-
version:
|
137
|
+
version: '0'
|
135
138
|
requirements: []
|
136
139
|
rubyforge_project:
|
137
|
-
rubygems_version: 2.
|
140
|
+
rubygems_version: 2.2.0
|
138
141
|
signing_key:
|
139
142
|
specification_version: 4
|
140
143
|
summary: A Test Kitchen Driver for Docker
|
141
|
-
test_files:
|
144
|
+
test_files:
|
145
|
+
- test/Dockerfile
|
146
|
+
- test/integration/default/serverspec/default_spec.rb
|