testlab 0.4.7 → 0.4.8

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.
data/bin/tl CHANGED
@@ -374,6 +374,25 @@ EOF
374
374
  end
375
375
  end
376
376
 
377
+ # CONTAINER CLONE
378
+ ##################
379
+ c.desc 'Clone a container'
380
+ c.long_desc <<-EOF
381
+ Clone a container. The container is offlined and an ephemeral copy of it is started.
382
+ EOF
383
+ c.command :clone do |clone|
384
+ clone.action do |global_options, options, args|
385
+ if options[:id].nil?
386
+ help_now!('id is required') if options[:id].nil?
387
+ else
388
+ container = @testlab.containers.select{ |c| c.id.to_sym == options[:id].to_sym }.first
389
+ container.nil? and raise TestLab::TestLabError, "We could not find the container you supplied!"
390
+
391
+ container.clone
392
+ end
393
+ end
394
+ end
395
+
377
396
  end
378
397
 
379
398
  pre do |global,command,options,args|
@@ -14,9 +14,6 @@ class TestLab
14
14
 
15
15
  please_wait(:ui => @ui, :message => format_object_action(self, 'Create', :green)) do
16
16
  self.domain ||= self.node.labfile.config[:domain]
17
- self.distro ||= "ubuntu"
18
- self.release ||= "precise"
19
-
20
17
  self.arch ||= detect_arch
21
18
 
22
19
  self.lxc.config.clear
@@ -78,6 +75,7 @@ class TestLab
78
75
  (self.lxc.state == :not_created) and return false #raise ContainerError, "We can not online a non-existant container!"
79
76
 
80
77
  please_wait(:ui => @ui, :message => format_object_action(self, 'Up', :green)) do
78
+ self.lxc.lxc.exec(%(lxc-stop), %(-n #{self.id}-clone))
81
79
  self.lxc.start
82
80
  self.lxc.wait(:running)
83
81
 
@@ -101,6 +99,7 @@ class TestLab
101
99
  (self.lxc.state == :not_created) and return false # raise ContainerError, "We can not offline a non-existant container!"
102
100
 
103
101
  please_wait(:ui => @ui, :message => format_object_action(self, 'Down', :red)) do
102
+ self.lxc.lxc.exec(%(lxc-stop), %(-n #{self.id}-clone))
104
103
  self.lxc.stop
105
104
  self.lxc.wait(:stopped)
106
105
 
@@ -110,6 +109,17 @@ class TestLab
110
109
  true
111
110
  end
112
111
 
112
+ def clone
113
+ @ui.logger.debug { "Container Clone: #{self.id}" }
114
+
115
+ self.down
116
+
117
+ please_wait(:ui => @ui, :message => format_object_action(self, 'Clone', :yellow)) do
118
+ self.lxc.start_ephemeral(%(-o #{self.id} -n #{self.id}-clone), %(-d))
119
+ end
120
+
121
+ end
122
+
113
123
  end
114
124
 
115
125
  end
@@ -15,7 +15,7 @@ class TestLab
15
15
  # release "precise"
16
16
  #
17
17
  # interface do
18
- # network_id :west
18
+ # network_id 'west'
19
19
  # name :eth0
20
20
  # address '10.11.0.254/16'
21
21
  # mac '00:00:5e:48:e9:6f'
@@ -28,14 +28,14 @@ class TestLab
28
28
  # release "precise"
29
29
  #
30
30
  # interface do
31
- # network_id :east
31
+ # network_id 'east'
32
32
  # name :eth0
33
33
  # address '10.10.0.200/16'
34
34
  # mac '00:00:5e:63:b5:9f'
35
35
  # end
36
36
  #
37
37
  # interface do
38
- # network_id :west
38
+ # network_id 'west'
39
39
  # primary true
40
40
  # name :eth1
41
41
  # address '10.11.0.200/16'
@@ -1,6 +1,6 @@
1
1
  class TestLab
2
2
  unless const_defined?(:VERSION)
3
3
  # TestLab Gem Version
4
- VERSION = "0.4.7"
4
+ VERSION = "0.4.8"
5
5
  end
6
6
  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.4.7
4
+ version: 0.4.8
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-05-17 00:00:00.000000000 Z
12
+ date: 2013-05-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: gli