testlab 0.6.10 → 0.6.11
Sign up to get free protection for your applications and to get access to all the features.
@@ -8,23 +8,29 @@ class TestLab
|
|
8
8
|
# Renders the supplied content into a file on the container and proceeds
|
9
9
|
# to execute it on the container as root.
|
10
10
|
#
|
11
|
+
# On rare occasion it appears that the container will wipe '/tmp' after
|
12
|
+
# the bootstrap script is seeded but before it is executed via lxc-attach.
|
13
|
+
# This results in a 'No such file or directory' bash error when attempting
|
14
|
+
# to execute the script. We allow 5 retries to seed the bootstrap script
|
15
|
+
# after which time the exception will be thrown and execution halted.
|
16
|
+
#
|
11
17
|
# @param [String] content The content to render on the container and
|
12
18
|
# execute. This is generally a bash script of some sort for example.
|
13
19
|
# @return [String] The output of *lxc-attach*.
|
14
20
|
def bootstrap(content)
|
15
21
|
output = nil
|
16
22
|
|
17
|
-
ZTK::RescueRetry.try(:tries =>
|
23
|
+
ZTK::RescueRetry.try(:tries => 5, :on => ContainerError) do
|
18
24
|
tempfile = Tempfile.new("bootstrap")
|
19
|
-
remote_tempfile = File.join("/tmp", File.basename(tempfile.path))
|
20
|
-
|
25
|
+
remote_tempfile = File.join("/", "tmp", File.basename(tempfile.path))
|
26
|
+
target_tempfile = File.join(self.fs_root, remote_tempfile)
|
21
27
|
|
22
|
-
self.node.ssh.file(:target =>
|
28
|
+
self.node.ssh.file(:target => target_tempfile, :chmod => '0777', :chown => 'root:root') do |file|
|
23
29
|
file.puts(content)
|
24
30
|
end
|
25
31
|
|
26
32
|
output = self.lxc.attach(%(--), %(/bin/bash), remote_tempfile)
|
27
|
-
if output =~
|
33
|
+
if !(output =~ /#{remote_tempfile}: No such file or directory/).nil?
|
28
34
|
raise ContainerError, "We could not find the bootstrap file!"
|
29
35
|
end
|
30
36
|
end
|
@@ -42,7 +42,7 @@ class TestLab
|
|
42
42
|
}
|
43
43
|
}
|
44
44
|
|
45
|
-
apt_conf_d_proxy_file = File.join("/etc", "apt", "apt.conf.d", "00proxy")
|
45
|
+
apt_conf_d_proxy_file = File.join("/", "etc", "apt", "apt.conf.d", "00proxy")
|
46
46
|
node.ssh.file(:target => apt_conf_d_proxy_file, :chown => "root:root", :chmod => "0644") do |file|
|
47
47
|
file.puts(ZTK::Template.render(@apt_conf_d_proxy_file_template, context))
|
48
48
|
end
|
@@ -60,17 +60,17 @@ class TestLab
|
|
60
60
|
|
61
61
|
# Ensure the container APT calls use apt-cacher-ng on the node
|
62
62
|
gateway_ip = container.primary_interface.network.ip
|
63
|
-
apt_conf_d_proxy_file = File.join(
|
63
|
+
apt_conf_d_proxy_file = File.join("/", "etc", "apt", "apt.conf.d", "00proxy")
|
64
64
|
|
65
65
|
@config[:apt][:cacher_ng] = { :proxy_url => "http://#{gateway_ip}:3142" }.merge(@config[:apt][:cacher_ng])
|
66
66
|
|
67
|
-
container.
|
67
|
+
container.ssh.file(:target => apt_conf_d_proxy_file, :chown => "root:root", :chmod => "0644") do |file|
|
68
68
|
file.puts(ZTK::Template.render(@apt_conf_d_proxy_file_template, @config))
|
69
69
|
end
|
70
70
|
|
71
71
|
# Fix the APT sources since LXC mudges them when using apt-cacher-ng
|
72
|
-
apt_conf_sources_file = File.join(
|
73
|
-
container.
|
72
|
+
apt_conf_sources_file = File.join("/", "etc", "apt", "sources.list")
|
73
|
+
container.ssh.exec(%(sudo sed -i 's/127.0.0.1:3142\\///g' #{apt_conf_sources_file}))
|
74
74
|
end
|
75
75
|
|
76
76
|
end
|
data/lib/testlab/version.rb
CHANGED
@@ -41,16 +41,24 @@ describe TestLab::Provisioner::Shell do
|
|
41
41
|
context "bootstrap successful" do
|
42
42
|
it "should provision the container" do
|
43
43
|
subject.node.ssh.stub(:file).and_yield(StringIO.new)
|
44
|
+
subject.stub(:fs_root) { "/var/lib/lxc/#{subject.id}/rootfs" }
|
44
45
|
subject.lxc.stub(:attach) { "" }
|
45
|
-
|
46
|
+
|
47
|
+
p = TestLab::Provisioner::Shell.new(subject.config, @ui)
|
48
|
+
p.on_container_setup(subject)
|
46
49
|
end
|
47
50
|
end
|
48
51
|
|
49
52
|
context "bootstrap fails" do
|
50
53
|
it "should raise an exception" do
|
51
54
|
subject.node.ssh.stub(:file).and_yield(StringIO.new)
|
52
|
-
subject.
|
53
|
-
|
55
|
+
subject.stub(:fs_root) { "/var/lib/lxc/#{subject.id}/rootfs" }
|
56
|
+
subject.lxc.stub(:attach) do |arg0, arg1, arg2|
|
57
|
+
"#{arg2}: No such file or directory"
|
58
|
+
end
|
59
|
+
|
60
|
+
p = TestLab::Provisioner::Shell.new(subject.config, @ui)
|
61
|
+
lambda{ p.on_container_setup(subject) }.should raise_error TestLab::ContainerError
|
54
62
|
end
|
55
63
|
end
|
56
64
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: testlab
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.11
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-06-
|
12
|
+
date: 2013-06-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: gli
|
@@ -300,7 +300,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
300
300
|
version: '0'
|
301
301
|
segments:
|
302
302
|
- 0
|
303
|
-
hash:
|
303
|
+
hash: -168179665040294334
|
304
304
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
305
305
|
none: false
|
306
306
|
requirements:
|
@@ -309,7 +309,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
309
309
|
version: '0'
|
310
310
|
segments:
|
311
311
|
- 0
|
312
|
-
hash:
|
312
|
+
hash: -168179665040294334
|
313
313
|
requirements: []
|
314
314
|
rubyforge_project:
|
315
315
|
rubygems_version: 1.8.25
|