beaker-docker 0.5.2 → 0.5.3
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/lib/beaker-docker/version.rb +1 -1
- data/lib/beaker/hypervisor/docker.rb +70 -55
- data/spec/beaker/hypervisor/docker_spec.rb +14 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b9f93de9358670645ea7e0c3bf982a7c822b8ca
|
4
|
+
data.tar.gz: 19730ee76587c0e098504bf7bae15627c10f1603
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 78b6a3d9dda05f73f12861c8f3675647b3265428cfa634de30dbd89da20eac938353ecbf44c900079cdc1a7113a9f7304e13915c78c3f39426e1364be9fee0e8
|
7
|
+
data.tar.gz: a88c7fe2fa9ec4655e629e1996310baa0154bfc8c69e7294f0111479c447f3ef878305df2cf14b8c4fcd36b272f761c06fa9181bfa330ed943e51a27f63eded5
|
@@ -44,56 +44,84 @@ module Beaker
|
|
44
44
|
|
45
45
|
end
|
46
46
|
|
47
|
+
def install_and_run_ssh(host)
|
48
|
+
host['dockerfile'] || host['use_image_entry_point']
|
49
|
+
end
|
50
|
+
|
51
|
+
def get_container_opts(host, image_name)
|
52
|
+
container_opts = {}
|
53
|
+
if host['dockerfile']
|
54
|
+
container_opts['ExposedPorts'] = {'22/tcp' => {} }
|
55
|
+
end
|
56
|
+
|
57
|
+
container_opts.merge! ( {
|
58
|
+
'Image' => image_name,
|
59
|
+
'Hostname' => host.name,
|
60
|
+
'HostConfig' => {
|
61
|
+
'PortBindings' => {
|
62
|
+
'22/tcp' => [{ 'HostPort' => rand.to_s[2..5], 'HostIp' => '0.0.0.0'}]
|
63
|
+
},
|
64
|
+
'PublishAllPorts' => true,
|
65
|
+
'Privileged' => true,
|
66
|
+
'RestartPolicy' => {
|
67
|
+
'Name' => 'always'
|
68
|
+
}
|
69
|
+
}
|
70
|
+
} )
|
71
|
+
end
|
72
|
+
|
73
|
+
def get_container_image(host)
|
74
|
+
@logger.debug("Creating image")
|
75
|
+
|
76
|
+
if host['use_image_as_is']
|
77
|
+
return ::Docker::Image.create('fromImage' => host['image'])
|
78
|
+
end
|
79
|
+
|
80
|
+
dockerfile = host['dockerfile']
|
81
|
+
if dockerfile
|
82
|
+
# assume that the dockerfile is in the repo and tests are running
|
83
|
+
# from the root of the repo; maybe add support for external Dockerfiles
|
84
|
+
# with external build dependencies later.
|
85
|
+
if File.exist?(dockerfile)
|
86
|
+
dir = File.expand_path(dockerfile).chomp(dockerfile)
|
87
|
+
return ::Docker::Image.build_from_dir(
|
88
|
+
dir,
|
89
|
+
{ 'dockerfile' => dockerfile,
|
90
|
+
:rm => true,
|
91
|
+
:buildargs => buildargs_for(host)
|
92
|
+
}
|
93
|
+
)
|
94
|
+
else
|
95
|
+
raise "Unable to find dockerfile at #{dockerfile}"
|
96
|
+
end
|
97
|
+
elsif host['use_image_entry_point']
|
98
|
+
df = <<-DF
|
99
|
+
FROM #{host['image']}
|
100
|
+
EXPOSE 22
|
101
|
+
DF
|
102
|
+
|
103
|
+
cmd = host['docker_cmd']
|
104
|
+
df += cmd if cmd
|
105
|
+
return ::Docker::Image.build(df, { rm: true, buildargs: buildargs_for(host) })
|
106
|
+
end
|
107
|
+
|
108
|
+
return ::Docker::Image.build(dockerfile_for(host),
|
109
|
+
{ rm: true, buildargs: buildargs_for(host) })
|
110
|
+
end
|
111
|
+
|
47
112
|
def provision
|
48
113
|
@logger.notify "Provisioning docker"
|
49
114
|
|
50
115
|
@hosts.each do |host|
|
51
116
|
@logger.notify "provisioning #{host.name}"
|
52
117
|
|
53
|
-
container_opts = {}
|
54
|
-
@logger.debug("Creating image")
|
55
|
-
|
56
|
-
dockerfile = host['dockerfile']
|
57
|
-
if dockerfile
|
58
|
-
install_and_run_ssh = true
|
59
|
-
container_opts['ExposedPorts'] = {'22/tcp' => {} }
|
60
|
-
# assume that the dockerfile is in the repo and tests are running
|
61
|
-
# from the root of the repo; maybe add support for external Dockerfiles
|
62
|
-
# with external build dependencies later.
|
63
|
-
if File.exist?(dockerfile)
|
64
|
-
dir = File.expand_path(dockerfile).chomp(dockerfile)
|
65
|
-
image = ::Docker::Image.build_from_dir(
|
66
|
-
dir,
|
67
|
-
{ 'dockerfile' => dockerfile,
|
68
|
-
:rm => true,
|
69
|
-
:buildargs => buildargs_for(host)
|
70
|
-
}
|
71
|
-
)
|
72
|
-
else
|
73
|
-
raise "Unable to find dockerfile at #{dockerfile}"
|
74
|
-
end
|
75
|
-
elsif host['use_image_entry_point']
|
76
|
-
install_and_run_ssh = true
|
77
|
-
df = <<-DF
|
78
|
-
FROM #{host['image']}
|
79
|
-
EXPOSE 22
|
80
|
-
DF
|
81
|
-
|
82
|
-
cmd = host['docker_cmd']
|
83
|
-
df += cmd if cmd
|
84
118
|
|
85
|
-
|
119
|
+
image = get_container_image(host)
|
86
120
|
|
87
|
-
|
88
|
-
|
89
|
-
image = ::Docker::Image.build(dockerfile_for(host),
|
90
|
-
{ rm: true, buildargs: buildargs_for(host) })
|
121
|
+
if host['tag']
|
122
|
+
image.tag({:repo => host['tag']})
|
91
123
|
end
|
92
124
|
|
93
|
-
if host['tag']
|
94
|
-
image.tag({:repo => host['tag']})
|
95
|
-
end
|
96
|
-
|
97
125
|
if @docker_type == 'swarm'
|
98
126
|
image_name = "#{@registry}/beaker/#{image.id}"
|
99
127
|
ret = ::Docker::Image.search(:term => image_name)
|
@@ -106,20 +134,7 @@ module Beaker
|
|
106
134
|
image_name = image.id
|
107
135
|
end
|
108
136
|
|
109
|
-
container_opts
|
110
|
-
'Image' => image_name,
|
111
|
-
'Hostname' => host.name,
|
112
|
-
'HostConfig' => {
|
113
|
-
'PortBindings' => {
|
114
|
-
'22/tcp' => [{ 'HostPort' => rand.to_s[2..5], 'HostIp' => '0.0.0.0'}]
|
115
|
-
},
|
116
|
-
'PublishAllPorts' => true,
|
117
|
-
'Privileged' => true,
|
118
|
-
'RestartPolicy' => {
|
119
|
-
'Name' => 'always'
|
120
|
-
}
|
121
|
-
}
|
122
|
-
} )
|
137
|
+
container_opts = get_container_opts(host, image_name)
|
123
138
|
if host['dockeropts'] || @options[:dockeropts]
|
124
139
|
dockeropts = host['dockeropts'] ? host['dockeropts'] : @options[:dockeropts]
|
125
140
|
dockeropts.each do |k,v|
|
@@ -169,7 +184,7 @@ module Beaker
|
|
169
184
|
@logger.debug("Starting container #{container.id}")
|
170
185
|
container.start
|
171
186
|
|
172
|
-
if install_and_run_ssh
|
187
|
+
if install_and_run_ssh(host)
|
173
188
|
@logger.notify("Installing ssh components and starting ssh daemon in #{host} container")
|
174
189
|
install_ssh_components(container, host)
|
175
190
|
# run fixssh to configure and start the ssh service
|
@@ -100,6 +100,7 @@ module Beaker
|
|
100
100
|
allow( ::Docker ).to receive(:logger=)
|
101
101
|
allow( ::Docker ).to receive(:version).and_return(version)
|
102
102
|
allow( ::Docker::Image ).to receive(:build).and_return(image)
|
103
|
+
allow( ::Docker::Image ).to receive(:create).and_return(image)
|
103
104
|
allow( ::Docker::Container ).to receive(:create).and_return(container)
|
104
105
|
allow_any_instance_of( ::Docker::Container ).to receive(:start)
|
105
106
|
end
|
@@ -244,6 +245,19 @@ module Beaker
|
|
244
245
|
end
|
245
246
|
end
|
246
247
|
|
248
|
+
it 'should call image create for hosts when use_image_as_is is defined' do
|
249
|
+
hosts.each do |host|
|
250
|
+
host['use_image_as_is'] = true
|
251
|
+
expect( docker ).not_to receive(:install_ssh_components)
|
252
|
+
expect( docker ).not_to receive(:fix_ssh)
|
253
|
+
expect( ::Docker::Image ).to receive(:create).with('fromImage' => host['image']) #once per host
|
254
|
+
expect( ::Docker::Image ).not_to receive(:build)
|
255
|
+
expect( ::Docker::Image ).not_to receive(:build_from_dir)
|
256
|
+
end
|
257
|
+
|
258
|
+
docker.provision
|
259
|
+
end
|
260
|
+
|
247
261
|
it 'should call dockerfile_for with all the hosts' do
|
248
262
|
hosts.each do |host|
|
249
263
|
expect( docker ).not_to receive(:install_ssh_components)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beaker-docker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rishi Javia, Kevin Imber, Tony Vu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-05-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|