testlab 1.5.1 → 1.6.0

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.
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
  #^syntax detection
3
3
 
4
+ version ">= 1.5.1"
5
+
4
6
  node 'vagrant' do
5
7
 
6
8
  provider TestLab::Provider::Local
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
  #^syntax detection
3
3
 
4
+ version ">= 1.5.1"
5
+
4
6
  node 'vagrant' do
5
7
 
6
8
  provider TestLab::Provider::Vagrant
data/lib/testlab.rb CHANGED
@@ -121,12 +121,14 @@ class TestLab
121
121
 
122
122
  # Main Classes
123
123
  autoload :Container, 'testlab/container'
124
+ autoload :Dependency, 'testlab/dependency'
124
125
  autoload :Interface, 'testlab/interface'
125
126
  autoload :Labfile, 'testlab/labfile'
126
127
  autoload :Network, 'testlab/network'
127
128
  autoload :Node, 'testlab/node'
128
129
  autoload :Provider, 'testlab/provider'
129
130
  autoload :Provisioner, 'testlab/provisioner'
131
+ autoload :Source, 'testlab/source'
130
132
  autoload :Support, 'testlab/support'
131
133
  autoload :User, 'testlab/user'
132
134
  autoload :Utility, 'testlab/utility'
@@ -72,7 +72,7 @@ class TestLab
72
72
  # An array of symbols of the various keys in our status hash.
73
73
  #
74
74
  # @see TestLab::Container::Status
75
- STATUS_KEYS = %w(id node_id mode fqdn state distro release interfaces provisioners).map(&:to_sym)
75
+ STATUS_KEYS = %w(id node_id mode fqdn state distro release interfaces provisioners inherited).map(&:to_sym)
76
76
 
77
77
  # Sub-Modules
78
78
  autoload :Actions, 'testlab/container/actions'
@@ -125,18 +125,53 @@ class TestLab
125
125
  attribute :release, :default => 'precise'
126
126
  attribute :arch
127
127
 
128
+ attribute :tags, :default => Array.new
129
+
128
130
  # Instructs ephemeral containers to persist; otherwise tmpfs will be used
129
131
  # as the backend store for ephemeral containers.
130
132
  # NOTE: tmpfs is very memory intensive and is disabled by default.
131
133
  attribute :persist, :default => true
132
134
 
135
+ # Is this a template? Never build it if so.
136
+ attribute :template, :default => false
137
+
138
+ # Should we inherit a container?
139
+ attribute :inherit
140
+
133
141
 
134
142
  def initialize(*args)
135
143
  @ui = TestLab.ui
136
144
 
137
- @ui.logger.info { "Loading Container '#{self.id}'" }
145
+ @ui.logger.debug { "Loading Container" }
138
146
  super(*args)
139
- @ui.logger.info { "Container '#{self.id}' Loaded" }
147
+ @ui.logger.debug { "Container '#{self.id}' Loaded" }
148
+
149
+ self.tags ||= [ self.id ]
150
+
151
+ if !self.inherit.nil?
152
+ @ui.logger.debug { "INHERIT: #{self.inherit}" }
153
+
154
+ parent = TestLab::Container.first(self.inherit)
155
+ if parent.nil?
156
+ raise ContainerError, "Could not find the container you specified to inherit attributes from!"
157
+ end
158
+
159
+ # Inherit the containers attributes
160
+ parent.attributes.reject{ |k,v| [:id, :node_id, :inherit, :template].include?(k) }.each do |key, value|
161
+ self.send("#{key}=", (value.dup rescue value))
162
+ end
163
+
164
+ # Inherit the containers users
165
+ parent.users.each do |user|
166
+ inherited_user = TestLab::User.new
167
+ inherited_user.container_id = self.id
168
+
169
+ user.attributes.reject{ |k,v| [:id, :container_id].include?(k) }.each do |key, value|
170
+ inherited_user.send("#{key}=", (value.dup rescue value))
171
+ end
172
+ end
173
+
174
+ end
140
175
  end
141
176
 
142
177
  def config_dir
@@ -10,7 +10,7 @@ class TestLab
10
10
  #
11
11
  # @return [Array<String>] A unique array of all defined domain names.
12
12
  def domains
13
- self.all.map do |container|
13
+ self.all.select{ |container| (!container.template rescue true) }.map do |container|
14
14
  container.domain ||= container.node.domain
15
15
  container.domain
16
16
  end.compact.uniq
@@ -60,7 +60,8 @@ class TestLab
60
60
  :release => self.release,
61
61
  :interfaces => interfaces,
62
62
  :provisioners => self.provisioners.map(&:to_s).collect{ |p| p.split('::').last }.join(','),
63
- :node_id => self.node.id
63
+ :node_id => self.node.id,
64
+ :inherited => (self.inherit.nil? ? 'none' : self.inherit)
64
65
  }
65
66
  end
66
67
 
@@ -0,0 +1,23 @@
1
+ class TestLab
2
+
3
+ # Dependency Error Class
4
+ class DependencyError < TestLabError; end
5
+
6
+ # Dependency Class
7
+ #
8
+ # @author Zachary Patten <zachary AT jovelabs DOT com>
9
+ class Dependency < ZTK::DSL::Base
10
+ # Associations and Attributes
11
+ belongs_to :labfile, :class_name => 'TestLab::Labfile'
12
+
13
+ def initialize(*args)
14
+ @ui = TestLab.ui
15
+
16
+ @ui.logger.info { "Loading Dependency '#{self.id}'" }
17
+ super(*args)
18
+ @ui.logger.info { "Dependency '#{self.id}' Loaded" }
19
+ end
20
+
21
+ end
22
+
23
+ end
@@ -21,9 +21,9 @@ class TestLab
21
21
  def initialize(*args)
22
22
  @ui = TestLab.ui
23
23
 
24
- @ui.logger.info { "Loading Interface '#{self.id}'" }
24
+ @ui.logger.debug { "Loading Interface" }
25
25
  super(*args)
26
- @ui.logger.info { "Interface '#{self.id}' Loaded" }
26
+ @ui.logger.debug { "Interface '#{self.id}' Loaded" }
27
27
  end
28
28
 
29
29
  def ip
@@ -7,18 +7,40 @@ class TestLab
7
7
  #
8
8
  # @author Zachary Patten <zachary AT jovelabs DOT com>
9
9
  class Labfile < ZTK::DSL::Base
10
- has_many :nodes, :class_name => 'TestLab::Node'
10
+ has_many :dependencies, :class_name => 'TestLab::Dependency'
11
+ has_many :sources, :class_name => 'TestLab::Source'
12
+ has_many :nodes, :class_name => 'TestLab::Node'
11
13
 
12
14
  attribute :testlab
13
- attribute :config, :default => Hash.new
14
- attribute :version, :default => TestLab::VERSION
15
+ attribute :config, :default => Hash.new
16
+ attribute :version
15
17
 
16
18
  def initialize(*args)
17
19
  @ui = TestLab.ui
18
20
 
19
- @ui.logger.info { "Loading Labfile '#{self.id}'" }
21
+ @ui.logger.debug { "Loading Labfile" }
20
22
  super(*args)
21
- @ui.logger.info { "Labfile '#{self.id}' Loaded" }
23
+ @ui.logger.debug { "Labfile '#{self.id}' Loaded" }
24
+
25
+ if version.nil?
26
+ raise LabfileError, 'You must version the Labfile!'
27
+ else
28
+ @ui.logger.debug { "Labfile Version: #{version}" }
29
+ version_arguments = version.split
30
+ @ui.logger.debug { version_arguments.inspect }
31
+
32
+ if version_arguments.count == 1
33
+ if (TestLab::VERSION != version_arguments.first)
34
+ raise LabfileError, "This Labfile is not compatible with this version of TestLab! (#{version})"
35
+ end
36
+ elsif version_arguments.count == 2
37
+ if !TestLab::VERSION.send(version_arguments.first, version_arguments.last)
38
+ raise LabfileError, "This Labfile is not compatible with this version of TestLab! (#{version})"
39
+ end
40
+ else
41
+ raise LabfileError, 'Invalid version!'
42
+ end
43
+ end
22
44
  end
23
45
 
24
46
  def config_dir
@@ -41,9 +41,9 @@ class TestLab
41
41
  def initialize(*args)
42
42
  @ui = TestLab.ui
43
43
 
44
- @ui.logger.info { "Loading Network '#{self.id}'" }
44
+ @ui.logger.debug { "Loading Network" }
45
45
  super(*args)
46
- @ui.logger.info { "Network '#{self.id}' Loaded" }
46
+ @ui.logger.debug { "Network '#{self.id}' Loaded" }
47
47
  end
48
48
 
49
49
  end
data/lib/testlab/node.rb CHANGED
@@ -46,7 +46,7 @@ class TestLab
46
46
  def initialize(*args)
47
47
  @ui = TestLab.ui
48
48
 
49
- @ui.logger.info { "Loading Node '#{self.id}'" }
49
+ @ui.logger.debug { "Loading Node" }
50
50
 
51
51
  super(*args)
52
52
 
@@ -54,7 +54,7 @@ class TestLab
54
54
 
55
55
  raise NodeError, "You must specify a provider class!" if self.provider.nil?
56
56
 
57
- @ui.logger.info { "Node '#{self.id}' Loaded" }
57
+ @ui.logger.debug { "Node '#{self.id}' Loaded" }
58
58
  end
59
59
 
60
60
  def config_dir
@@ -41,7 +41,7 @@ class TestLab
41
41
  def on_container_provision(container)
42
42
  @ui.logger.debug { "BIND Provisioner: Container #{container.id}" }
43
43
 
44
- bind_provision(container.node)
44
+ bind_reload(container.node)
45
45
 
46
46
  true
47
47
  end
@@ -54,7 +54,7 @@ class TestLab
54
54
  def on_network_provision(network)
55
55
  @ui.logger.debug { "BIND Provisioner: Network #{network.id}" }
56
56
 
57
- bind_provision(network.node)
57
+ bind_reload(network.node)
58
58
 
59
59
  true
60
60
  end
@@ -0,0 +1,23 @@
1
+ class TestLab
2
+
3
+ # Source Error Class
4
+ class SourceError < TestLabError; end
5
+
6
+ # Source Class
7
+ #
8
+ # @author Zachary Patten <zachary AT jovelabs DOT com>
9
+ class Source < ZTK::DSL::Base
10
+ # Associations and Attributes
11
+ belongs_to :labfile, :class_name => 'TestLab::Labfile'
12
+
13
+ def initialize(*args)
14
+ @ui = TestLab.ui
15
+
16
+ @ui.logger.info { "Loading Source '#{self.id}'" }
17
+ super(*args)
18
+ @ui.logger.info { "Source '#{self.id}' Loaded" }
19
+ end
20
+
21
+ end
22
+
23
+ end
data/lib/testlab/user.rb CHANGED
@@ -30,9 +30,9 @@ class TestLab
30
30
  def initialize(*args)
31
31
  @ui = TestLab.ui
32
32
 
33
- @ui.logger.info { "Loading User '#{self.id}'" }
33
+ @ui.logger.debug { "Loading User" }
34
34
  super(*args)
35
- @ui.logger.info { "User '#{self.id}' Loaded" }
35
+ @ui.logger.debug { "User '#{self.id}' Loaded" }
36
36
  end
37
37
 
38
38
  end
@@ -9,7 +9,7 @@ class TestLab
9
9
  def provision
10
10
  @ui.logger.debug { "User Create: #{self.username} " }
11
11
 
12
- node_home_dir = ((self.container.node.user == "root") ? %(/root) : %(/home/#{self.container.node.user}))
12
+ node_home_dir = home_dir(self.container.node.user)
13
13
  node_authkeys = File.join(node_home_dir, ".ssh", "authorized_keys")
14
14
 
15
15
  # ensure the container user exists
@@ -48,6 +48,12 @@ class TestLab
48
48
  end
49
49
  end
50
50
 
51
+ if (public_identities.count > 0)
52
+ id_rsa_pub = File.join(user_home_dir, ".ssh", "id_rsa.pub")
53
+ self.container.node.exec(%(sudo grep -e "#{public_identities.first}" #{id_rsa_pub} || echo "#{public_identities.first}" | sudo tee #{id_rsa_pub}), :ignore_exit_status => true)
54
+ self.container.node.exec(%(sudo chmod -v 644 #{id_rsa_pub}), :ignore_exit_status => true)
55
+ end
56
+
51
57
  authkeys.each do |destination, source|
52
58
  @ui.logger.info { "SOURCE: #{source} >>> #{destination}" }
53
59
  self.container.node.exec(%(sudo mkdir -pv #{File.dirname(destination)}))
@@ -61,6 +67,19 @@ class TestLab
61
67
  self.container.node.exec(%(sudo chmod -v 644 #{destination}))
62
68
  end
63
69
 
70
+ identities = Array.new
71
+ !self.identity.nil? and [self.identity].flatten.compact.each do |i|
72
+ if File.exists?(i)
73
+ identities << ::IO.read(i).strip
74
+ end
75
+ end
76
+
77
+ if (identities.count > 0)
78
+ id_rsa = File.join(user_home_dir, ".ssh", "id_rsa")
79
+ self.container.node.exec(%(sudo grep -e "#{identities.first}" #{id_rsa} || echo "#{identities.first}" | sudo tee #{id_rsa}), :ignore_exit_status => true)
80
+ self.container.node.exec(%(sudo chmod -v 400 #{id_rsa}), :ignore_exit_status => true)
81
+ end
82
+
64
83
  # ensure the container user home directory is owned by them
65
84
  home_dir = self.container.lxc.attach(%(-- /bin/bash -c 'grep #{self.username} /etc/passwd | cut -d ":" -f6')).strip
66
85
  self.container.lxc.attach(%(-- /bin/bash -c 'sudo chown -Rv $(id -u #{self.username}):$(id -g #{self.username}) #{home_dir}'))
@@ -76,10 +76,10 @@ class TestLab
76
76
  klass_name = klass.to_s.split('::').last.downcase
77
77
 
78
78
  if name.nil?
79
- objects = klass.all
79
+ objects = klass.all.select{ |object| (!object.template rescue true) }
80
80
  else
81
81
  names = name.split(',')
82
- objects = klass.find(names)
82
+ objects = klass.find(names).select{ |object| (!object.template rescue true) }
83
83
  end
84
84
 
85
85
  (objects.nil? || (objects.count == 0)) and raise TestLab::TestLabError, "We could not find any of the #{klass_name}s you supplied!"
@@ -1,6 +1,6 @@
1
1
  class TestLab
2
2
  unless const_defined?(:VERSION)
3
3
  # TestLab Gem Version
4
- VERSION = "1.5.1"
4
+ VERSION = "1.6.0"
5
5
  end
6
6
  end
data/spec/support/Labfile CHANGED
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
  #^syntax detection
3
3
 
4
+ version ">= 1.5.1"
5
+
4
6
  shell_provision_script = <<-EOF
5
7
  set -x
6
8
  apt-get -y update
metadata CHANGED
@@ -1,18 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: testlab
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.1
4
+ version: 1.6.0
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Zachary Patten
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-08-14 00:00:00.000000000 Z
12
+ date: 2013-08-22 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: gli
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
19
  - - ! '>='
18
20
  - !ruby/object:Gem::Version
@@ -20,6 +22,7 @@ dependencies:
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
27
  - - ! '>='
25
28
  - !ruby/object:Gem::Version
@@ -27,6 +30,7 @@ dependencies:
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: lxc
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
35
  - - ! '>='
32
36
  - !ruby/object:Gem::Version
@@ -34,6 +38,7 @@ dependencies:
34
38
  type: :runtime
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
43
  - - ! '>='
39
44
  - !ruby/object:Gem::Version
@@ -41,6 +46,7 @@ dependencies:
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: ztk
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
51
  - - ! '>='
46
52
  - !ruby/object:Gem::Version
@@ -48,6 +54,7 @@ dependencies:
48
54
  type: :runtime
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
59
  - - ! '>='
53
60
  - !ruby/object:Gem::Version
@@ -55,6 +62,7 @@ dependencies:
55
62
  - !ruby/object:Gem::Dependency
56
63
  name: activesupport
57
64
  requirement: !ruby/object:Gem::Requirement
65
+ none: false
58
66
  requirements:
59
67
  - - ! '>='
60
68
  - !ruby/object:Gem::Version
@@ -62,6 +70,7 @@ dependencies:
62
70
  type: :runtime
63
71
  prerelease: false
64
72
  version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
65
74
  requirements:
66
75
  - - ! '>='
67
76
  - !ruby/object:Gem::Version
@@ -69,6 +78,7 @@ dependencies:
69
78
  - !ruby/object:Gem::Dependency
70
79
  name: bundler
71
80
  requirement: !ruby/object:Gem::Requirement
81
+ none: false
72
82
  requirements:
73
83
  - - ! '>='
74
84
  - !ruby/object:Gem::Version
@@ -76,6 +86,7 @@ dependencies:
76
86
  type: :development
77
87
  prerelease: false
78
88
  version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
79
90
  requirements:
80
91
  - - ! '>='
81
92
  - !ruby/object:Gem::Version
@@ -83,6 +94,7 @@ dependencies:
83
94
  - !ruby/object:Gem::Dependency
84
95
  name: pry
85
96
  requirement: !ruby/object:Gem::Requirement
97
+ none: false
86
98
  requirements:
87
99
  - - ! '>='
88
100
  - !ruby/object:Gem::Version
@@ -90,6 +102,7 @@ dependencies:
90
102
  type: :development
91
103
  prerelease: false
92
104
  version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
93
106
  requirements:
94
107
  - - ! '>='
95
108
  - !ruby/object:Gem::Version
@@ -97,6 +110,7 @@ dependencies:
97
110
  - !ruby/object:Gem::Dependency
98
111
  name: rake
99
112
  requirement: !ruby/object:Gem::Requirement
113
+ none: false
100
114
  requirements:
101
115
  - - ! '>='
102
116
  - !ruby/object:Gem::Version
@@ -104,6 +118,7 @@ dependencies:
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
107
122
  requirements:
108
123
  - - ! '>='
109
124
  - !ruby/object:Gem::Version
@@ -111,6 +126,7 @@ dependencies:
111
126
  - !ruby/object:Gem::Dependency
112
127
  name: redcarpet
113
128
  requirement: !ruby/object:Gem::Requirement
129
+ none: false
114
130
  requirements:
115
131
  - - ! '>='
116
132
  - !ruby/object:Gem::Version
@@ -118,6 +134,7 @@ dependencies:
118
134
  type: :development
119
135
  prerelease: false
120
136
  version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
121
138
  requirements:
122
139
  - - ! '>='
123
140
  - !ruby/object:Gem::Version
@@ -125,6 +142,7 @@ dependencies:
125
142
  - !ruby/object:Gem::Dependency
126
143
  name: aruba
127
144
  requirement: !ruby/object:Gem::Requirement
145
+ none: false
128
146
  requirements:
129
147
  - - ! '>='
130
148
  - !ruby/object:Gem::Version
@@ -132,6 +150,7 @@ dependencies:
132
150
  type: :development
133
151
  prerelease: false
134
152
  version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
135
154
  requirements:
136
155
  - - ! '>='
137
156
  - !ruby/object:Gem::Version
@@ -139,6 +158,7 @@ dependencies:
139
158
  - !ruby/object:Gem::Dependency
140
159
  name: rspec
141
160
  requirement: !ruby/object:Gem::Requirement
161
+ none: false
142
162
  requirements:
143
163
  - - ! '>='
144
164
  - !ruby/object:Gem::Version
@@ -146,6 +166,7 @@ dependencies:
146
166
  type: :development
147
167
  prerelease: false
148
168
  version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
149
170
  requirements:
150
171
  - - ! '>='
151
172
  - !ruby/object:Gem::Version
@@ -153,6 +174,7 @@ dependencies:
153
174
  - !ruby/object:Gem::Dependency
154
175
  name: yard
155
176
  requirement: !ruby/object:Gem::Requirement
177
+ none: false
156
178
  requirements:
157
179
  - - ! '>='
158
180
  - !ruby/object:Gem::Version
@@ -160,6 +182,7 @@ dependencies:
160
182
  type: :development
161
183
  prerelease: false
162
184
  version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
163
186
  requirements:
164
187
  - - ! '>='
165
188
  - !ruby/object:Gem::Version
@@ -167,6 +190,7 @@ dependencies:
167
190
  - !ruby/object:Gem::Dependency
168
191
  name: coveralls
169
192
  requirement: !ruby/object:Gem::Requirement
193
+ none: false
170
194
  requirements:
171
195
  - - ! '>='
172
196
  - !ruby/object:Gem::Version
@@ -174,6 +198,7 @@ dependencies:
174
198
  type: :development
175
199
  prerelease: false
176
200
  version_requirements: !ruby/object:Gem::Requirement
201
+ none: false
177
202
  requirements:
178
203
  - - ! '>='
179
204
  - !ruby/object:Gem::Version
@@ -229,6 +254,7 @@ files:
229
254
  - lib/testlab/container/status.rb
230
255
  - lib/testlab/container/support.rb
231
256
  - lib/testlab/container/user.rb
257
+ - lib/testlab/dependency.rb
232
258
  - lib/testlab/interface.rb
233
259
  - lib/testlab/labfile.rb
234
260
  - lib/testlab/monkeys.rb
@@ -277,6 +303,7 @@ files:
277
303
  - lib/testlab/provisioners/templates/chef/ruby_gem_server.erb
278
304
  - lib/testlab/provisioners/templates/raring/provision.erb
279
305
  - lib/testlab/provisioners/templates/resolv/provision.erb
306
+ - lib/testlab/source.rb
280
307
  - lib/testlab/support.rb
281
308
  - lib/testlab/support/execution.rb
282
309
  - lib/testlab/support/lifecycle.rb
@@ -303,26 +330,27 @@ files:
303
330
  homepage: http://hackers.lookout.com/testlab/
304
331
  licenses:
305
332
  - Apache 2.0
306
- metadata: {}
307
333
  post_install_message:
308
334
  rdoc_options: []
309
335
  require_paths:
310
336
  - lib
311
337
  required_ruby_version: !ruby/object:Gem::Requirement
338
+ none: false
312
339
  requirements:
313
340
  - - ! '>='
314
341
  - !ruby/object:Gem::Version
315
342
  version: '0'
316
343
  required_rubygems_version: !ruby/object:Gem::Requirement
344
+ none: false
317
345
  requirements:
318
346
  - - ! '>='
319
347
  - !ruby/object:Gem::Version
320
348
  version: '0'
321
349
  requirements: []
322
350
  rubyforge_project:
323
- rubygems_version: 2.0.6
351
+ rubygems_version: 1.8.25
324
352
  signing_key:
325
- specification_version: 4
353
+ specification_version: 3
326
354
  summary: A toolkit for building virtual computer labs
327
355
  test_files:
328
356
  - features/step_definitions/container_steps.rb
checksums.yaml DELETED
@@ -1,15 +0,0 @@
1
- ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- NjVlY2RkMzUzYzVhZjA4NTBlM2FjMDQxZjJiMzY0ZTEwOTgwMTExYw==
5
- data.tar.gz: !binary |-
6
- MzQwNzNmZDcxYmUzZjBhNjEwYTAzZWMxYjA1YTgyNDU3MzViMmFhYw==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- N2VmM2YwZDg1YmUzNTliNGQ3ODhlNGYyY2YyYzU2YzliZmY3NTM3MmMxNDI0
10
- Zjc1YjJlODYxYWIyNzJiYjZkMWQzNGU3MTM1ODc4MTdlYTM1OWRlNDVlNGU5
11
- ZjRmMzIwODA1NThjZTUzYWEwMzQxZjJiYTJkYmYzMmYzY2Q5ZTI=
12
- data.tar.gz: !binary |-
13
- N2UwN2Q2ZjE5YWMzNTUxZTkzNWU1NDM4MjMwM2NkN2EyYjQwNDhhMWViZGY2
14
- MTg1NmIwNzZjNDdjNjRkY2JlYjNjY2FmZDMwNTY0NTU5YmYxYzRhMTFjMWJj
15
- ZDJiNDQ5OTA0YjI4N2I2MDlkYTkxYTY2MWU5NjBhMjNjZTAxMzM=