testlab 0.6.10 → 0.6.11

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.
@@ -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