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 => 3, :on => ContainerError) do
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
- target_file = File.join(self.fs_root, remote_tempfile)
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 => target_file, :chmod => '0777', :chown => 'root:root') do |file|
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 =~ /No such file or directory/
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(container.fs_root, "etc", "apt", "apt.conf.d", "00proxy")
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.node.ssh.file(:target => apt_conf_d_proxy_file, :chown => "root:root", :chmod => "0644") do |file|
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(container.fs_root, "etc", "apt", "sources.list")
73
- container.node.ssh.exec(%(sudo sed -i 's/127.0.0.1:3142\\///g' #{apt_conf_sources_file}))
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
@@ -1,6 +1,6 @@
1
1
  class TestLab
2
2
  unless const_defined?(:VERSION)
3
3
  # TestLab Gem Version
4
- VERSION = "0.6.10"
4
+ VERSION = "0.6.11"
5
5
  end
6
6
  end
@@ -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
- subject.provisioners.last.new(subject.config, @ui).on_container_setup(subject)
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.lxc.stub(:attach) { "No such file or directory" }
53
- lambda{ subject.provisioners.last.new(subject.config, @ui).on_container_setup(subject) }.should raise_error TestLab::ContainerError
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.10
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-17 00:00:00.000000000 Z
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: 3377457757681379174
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: 3377457757681379174
312
+ hash: -168179665040294334
313
313
  requirements: []
314
314
  rubyforge_project:
315
315
  rubygems_version: 1.8.25