testlab 0.3.1 → 0.4.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.
@@ -0,0 +1,102 @@
1
+ #!/bin/env bash
2
+ <%= ZTK::Template.do_not_edit_notice(:message => "OmniTruck Bootstrap") %>
3
+ set -x
4
+
5
+ DEBIAN_FRONTEND="noninteractive"
6
+ CHEF_SOLO_ROOT="/tmp/chef-solo"
7
+ KNIFE_CONFIG_EXP_FILE="/tmp/knife-config.exp"
8
+ export DEBIAN_FRONTEND CHEF_SOLO_ROOT KNIFE_CONFIG_EXP_FILE
9
+
10
+ mkdir -p /tmp/chef-solo/
11
+ cd ${CHEF_SOLO_ROOT}
12
+
13
+ apt-get -y --force-yes update
14
+ apt-get -y --force-yes install build-essential expect wget curl
15
+
16
+ mkdir -pv /etc/chef /var/log/chef ${HOME}/.chef
17
+
18
+ cat <<EOF | tee /etc/chef/solo.rb
19
+ file_cache_path "${CHEF_SOLO_ROOT}/"
20
+ cookbook_path %w(${CHEF_SOLO_ROOT}/cookbooks/ ${CHEF_SOLO_ROOT}/site-cookbooks/)
21
+ role_path "${CHEF_SOLO_ROOT}/roles/"
22
+ EOF
23
+
24
+ cat <<EOF | tee ${CHEF_SOLO_ROOT}/attributes.json
25
+ <%= @chef_solo_attributes.to_json %>
26
+ EOF
27
+
28
+ curl -L https://www.opscode.com/chef/install.sh | bash
29
+ # bash install.sh -v <%= @version %>
30
+ <% if (@chef_pre_11 == false) -%>
31
+
32
+ mkdir -pv /var/chef/cache ${CHEF_SOLO_ROOT}/cookbooks/chef-server
33
+ wget -qO- https://github.com/opscode-cookbooks/chef-server/archive/master.tar.gz | tar xvzC ${CHEF_SOLO_ROOT}/cookbooks/chef-server --strip-components=1
34
+ <% else -%>
35
+
36
+ export PATH=/opt/chef/embedded/bin:$PATH
37
+
38
+ cat <<EOF | tee ${CHEF_SOLO_ROOT}/Gemfile
39
+ source 'https://rubygems.org'
40
+ gem 'chef', '<%= @version %>'
41
+ gem 'berkshelf'
42
+ gem 'moneta', '< 0.7.0'
43
+ EOF
44
+
45
+ cat <<EOF | tee ${CHEF_SOLO_ROOT}/Berksfile
46
+ site :opscode
47
+ cookbook 'chef-server'
48
+ EOF
49
+
50
+ gem install bundler --no-ri --no-rdoc
51
+ bundle install --standalone --path vendor/bundle --binstubs
52
+ mv -v ${CHEF_SOLO_ROOT}/cookbooks ${CHEF_SOLO_ROOT}/site-cookbooks
53
+ bin/berks install --path ${CHEF_SOLO_ROOT}/cookbooks/
54
+ <% end -%>
55
+
56
+ chef-solo --config /etc/chef/solo.rb --json-attributes ${CHEF_SOLO_ROOT}/attributes.json --logfile /var/log/chef/chef-solo.log --log_level debug
57
+ <% if (@chef_pre_11 == false) -%>
58
+
59
+ cat << EOF | tee /etc/chef-server/chef-server.rb
60
+ <%= ZTK::Template.do_not_edit_notice(:message => "OmniTruck Bootstrap") %>
61
+ server_name = "<%= @server_name %>"
62
+ #
63
+ topology "standalone"
64
+ api_fqdn server_name
65
+ nginx['url'] = "https://#{server_name}"
66
+ nginx['server_name'] = server_name
67
+ lb['fqdn'] = server_name
68
+ bookshelf['vip'] = server_name
69
+ EOF
70
+ sudo chef-server-ctl reconfigure
71
+ <% end -%>
72
+
73
+ echo -n "Waiting on <%= File.basename(@chef_validator) %> and <%= File.basename(@chef_webui) %> to appear..."
74
+ until [ -f <%= @chef_validator %> ] && [ -f <%= @chef_webui %> ]; do
75
+ echo -n "."
76
+ sleep 1
77
+ done
78
+ echo "done."
79
+
80
+ cp -v <%= @chef_validator %> <%= @chef_webui %> ~/.chef
81
+ <% if (@chef_pre_11 == false) -%>
82
+
83
+ ln -sv <%= @chef_validator %> /etc/chef/validation.pem
84
+ ln -sv <%= @chef_admin %> /etc/chef/admin.pem
85
+ <% end -%>
86
+
87
+ cat <<EOF | tee ${KNIFE_CONFIG_EXP_FILE}
88
+ #!/usr/bin/expect -f
89
+ set timeout 10
90
+ <% if (@chef_pre_11 == false) -%>
91
+ spawn knife configure -i --server-url https://127.0.0.1 --admin-client-key <%= @chef_admin %> -u ${SUDO_USER} -r '' --defaults --yes -VV
92
+ <% else -%>
93
+ spawn knife configure -i --server-url https://127.0.0.1 -u ${SUDO_USER} -r '' --defaults --yes -VV
94
+ <% end -%>
95
+ expect "Please enter a password for the new user:" { send "<%= @default_password %>\n" }
96
+ interact
97
+ EOF
98
+ chmod +x ${KNIFE_CONFIG_EXP_FILE}
99
+ ${KNIFE_CONFIG_EXP_FILE}
100
+
101
+ knife client create <%= @user %> -a -f ${HOME}/.chef/<%= @user %>.pem --disable-editing --yes -VV
102
+ chown -Rv ${SUDO_USER}:${SUDO_USER} ${HOME}
@@ -1,6 +1,6 @@
1
1
  class TestLab
2
2
  unless const_defined?(:VERSION)
3
3
  # TestLab Gem Version
4
- VERSION = "0.3.1"
4
+ VERSION = "0.4.0"
5
5
  end
6
6
  end
data/lib/testlab.rb CHANGED
@@ -27,6 +27,7 @@ require 'testlab/monkeys'
27
27
  #
28
28
  # node :localhost do
29
29
  # components %w(resolv bind)
30
+ # route true
30
31
  #
31
32
  # provider TestLab::Provider::Vagrant
32
33
  # config Hash[
@@ -54,10 +55,7 @@ require 'testlab/monkeys'
54
55
  # release "precise"
55
56
  #
56
57
  # provisioner TestLab::Provisioner::Shell
57
- # config Hash[
58
- # :shell => "/bin/bash",
59
- # :setup => shell_provision_script
60
- # ]
58
+ # config Hash[:setup => shell_provision_script]
61
59
  #
62
60
  # interface do
63
61
  # name :eth0
@@ -21,7 +21,11 @@ require "spec_helper"
21
21
 
22
22
  describe TestLab::Container do
23
23
 
24
- subject { @testlab = TestLab.new(:labfile => LABFILE); @testlab.containers.first }
24
+ subject {
25
+ @ui = ZTK::UI.new(:stdout => StringIO.new, :stderr => StringIO.new)
26
+ @testlab = TestLab.new(:labfile => LABFILE, :ui => @ui)
27
+ @testlab.containers.first
28
+ }
25
29
 
26
30
  describe "class" do
27
31
 
@@ -29,18 +33,22 @@ describe TestLab::Container do
29
33
  subject.should be_an_instance_of TestLab::Container
30
34
  end
31
35
 
32
- end
33
-
34
- describe "methods" do
36
+ describe "methods" do
35
37
 
36
- describe "domains" do
37
- it "should return the domains for all defined containers" do
38
- subject.class.domains.should be_kind_of(Array)
39
- subject.class.domains.should_not be_empty
40
- subject.class.domains.should == ["default.zone"]
38
+ describe "domains" do
39
+ it "should return the domains for all defined containers" do
40
+ subject.class.domains.should be_kind_of(Array)
41
+ subject.class.domains.should_not be_empty
42
+ subject.class.domains.should == ["default.zone"]
43
+ end
41
44
  end
45
+
42
46
  end
43
47
 
48
+ end
49
+
50
+ describe "methods" do
51
+
44
52
  describe "#status" do
45
53
  it "should return a hash of status information about the container" do
46
54
  subject.lxc.stub(:state) { :not_created }
@@ -58,7 +66,7 @@ describe TestLab::Container do
58
66
 
59
67
  describe "#fqdn" do
60
68
  it "should return the FQDN for the container" do
61
- subject.fqdn.should == "server-1.default.zone"
69
+ subject.fqdn.should == "server-dual-nic.default.zone"
62
70
  end
63
71
  end
64
72
 
@@ -169,23 +177,50 @@ describe TestLab::Container do
169
177
  end
170
178
 
171
179
  describe "#setup" do
172
- it "should create and online the container" do
173
- subject.stub(:create) { true }
174
- subject.stub(:up) { true }
175
- subject.instance_variable_get(:@provisioner) and subject.instance_variable_get(:@provisioner).stub(:setup) { true }
180
+ context "with no provisioner" do
181
+ it "should create and online the container" do
182
+ subject.stub(:create) { true }
183
+ subject.stub(:up) { true }
184
+ subject.instance_variable_get(:@provisioner) and subject.instance_variable_get(:@provisioner).stub(:setup) { true }
176
185
 
177
- subject.setup
186
+ subject.setup
187
+ end
188
+ end
189
+
190
+ context "with the shell provisioner" do
191
+ it "should create and online the container" do
192
+ subject = TestLab::Container.first('server-shell')
193
+ subject.stub(:create) { true }
194
+ subject.stub(:up) { true }
195
+ subject.instance_variable_get(:@provisioner) and subject.instance_variable_get(:@provisioner).stub(:setup) { true }
196
+
197
+ subject.setup
198
+ end
178
199
  end
179
200
  end
180
201
 
181
202
  describe "#teardown" do
182
- it "should create and online the container" do
183
- subject.stub(:down) { true }
184
- subject.stub(:destroy) { true }
185
- subject.instance_variable_get(:@provisioner) and subject.instance_variable_get(:@provisioner).stub(:teardown) { true }
203
+ context "with no provisioner" do
204
+ it "should create and online the container" do
205
+ subject.stub(:down) { true }
206
+ subject.stub(:destroy) { true }
207
+ subject.instance_variable_get(:@provisioner) and subject.instance_variable_get(:@provisioner).stub(:teardown) { true }
186
208
 
187
- subject.teardown
209
+ subject.teardown
210
+ end
188
211
  end
212
+
213
+ context "with the shell provisioner" do
214
+ it "should create and online the container" do
215
+ subject = TestLab::Container.first('server-shell')
216
+ subject.stub(:down) { true }
217
+ subject.stub(:destroy) { true }
218
+ subject.instance_variable_get(:@provisioner) and subject.instance_variable_get(:@provisioner).stub(:teardown) { true }
219
+
220
+ subject.teardown
221
+ end
222
+ end
223
+
189
224
  end
190
225
 
191
226
  end
data/spec/network_spec.rb CHANGED
@@ -21,7 +21,11 @@ require "spec_helper"
21
21
 
22
22
  describe TestLab::Network do
23
23
 
24
- subject { @testlab = TestLab.new(:labfile => LABFILE); @testlab.networks.first }
24
+ subject {
25
+ @ui = ZTK::UI.new(:stdout => StringIO.new, :stderr => StringIO.new)
26
+ @testlab = TestLab.new(:labfile => LABFILE, :ui => @ui)
27
+ @testlab.networks.first
28
+ }
25
29
 
26
30
  describe "class" do
27
31
 
data/spec/node_spec.rb CHANGED
@@ -21,7 +21,11 @@ require "spec_helper"
21
21
 
22
22
  describe TestLab::Node do
23
23
 
24
- subject { @testlab = TestLab.new(:labfile => LABFILE); @testlab.nodes.first }
24
+ subject {
25
+ @ui = ZTK::UI.new(:stdout => StringIO.new, :stderr => StringIO.new)
26
+ @testlab = TestLab.new(:labfile => LABFILE, :ui => @ui)
27
+ @testlab.nodes.first
28
+ }
25
29
 
26
30
  describe "class" do
27
31
 
@@ -39,6 +43,22 @@ describe TestLab::Node do
39
43
  end
40
44
  end
41
45
 
46
+ describe "#bind_setup" do
47
+ it "should setup bind" do
48
+ subject.ssh.stub(:exec) { true }
49
+ subject.ssh.stub(:file).and_yield(StringIO.new)
50
+ subject.bind_setup
51
+ end
52
+ end
53
+
54
+ describe "#build_resolv_conf" do
55
+ it "should build resolv.conf" do
56
+ subject.ssh.stub(:exec) { true }
57
+ subject.ssh.stub(:file).and_yield(StringIO.new)
58
+ subject.build_resolv_conf
59
+ end
60
+ end
61
+
42
62
  describe "#status" do
43
63
  it "should return a hash of status information about the node" do
44
64
  subject.instance_variable_get(:@provider).stub(:state) { :not_created }
@@ -90,6 +110,36 @@ describe TestLab::Node do
90
110
  end
91
111
  end
92
112
 
113
+ describe "setup" do
114
+ it "should setup the node" do
115
+ subject.ssh.stub(:bootstrap) { true }
116
+ subject.stub(:route_setup) { true }
117
+ subject.stub(:build_resolv_conf) { true }
118
+ subject.stub(:bind_setup) { true }
119
+ subject.stub(:bind_reload) { true }
120
+ subject.containers.each do |container|
121
+ container.stub(:setup) { true }
122
+ end
123
+ subject.networks.each do |network|
124
+ network.stub(:setup) { true }
125
+ end
126
+ subject.setup
127
+ end
128
+ end
129
+
130
+ describe "teardown" do
131
+ it "should teardown the node" do
132
+ subject.stub(:route_setup) { true }
133
+ subject.containers.each do |container|
134
+ container.stub(:teardown) { true }
135
+ end
136
+ subject.networks.each do |network|
137
+ network.stub(:teardown) { true }
138
+ end
139
+ subject.teardown
140
+ end
141
+ end
142
+
93
143
  end
94
144
 
95
145
  end
@@ -0,0 +1,66 @@
1
+ ################################################################################
2
+ #
3
+ # Author: Zachary Patten <zachary AT jovelabs DOT com>
4
+ # Copyright: Copyright (c) Zachary Patten
5
+ # License: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ ################################################################################
20
+ require "spec_helper"
21
+
22
+ describe TestLab::Provisioner::Shell do
23
+
24
+ subject {
25
+ @ui = ZTK::UI.new(:stdout => StringIO.new, :stderr => StringIO.new)
26
+ @testlab = TestLab.new(:labfile => LABFILE, :ui => @ui)
27
+ TestLab::Container.first('server-shell')
28
+ }
29
+
30
+ describe "class" do
31
+
32
+ it "should be an instance of TestLab::Provisioner::Shell" do
33
+ subject.instance_variable_get(:@provisioner).should be_an_instance_of TestLab::Provisioner::Shell
34
+ end
35
+
36
+ end
37
+
38
+ describe "methods" do
39
+
40
+ describe "setup" do
41
+ context "bootstrap successful" do
42
+ it "should provision the container" do
43
+ subject.node.ssh.stub(:file).and_yield(StringIO.new)
44
+ subject.lxc.stub(:attach) { "" }
45
+ subject.instance_variable_get(:@provisioner).setup(subject)
46
+ end
47
+ end
48
+
49
+ context "bootstrap fails" do
50
+ it "should raise an exception" do
51
+ subject.node.ssh.stub(:file).and_yield(StringIO.new)
52
+ subject.lxc.stub(:attach) { "No such file or directory" }
53
+ lambda{ subject.instance_variable_get(:@provisioner).setup(subject) }.should raise_error TestLab::ContainerError
54
+ end
55
+ end
56
+ end
57
+
58
+ describe "teardown" do
59
+ it "should decomission the container" do
60
+ subject.instance_variable_get(:@provisioner).teardown(subject)
61
+ end
62
+ end
63
+
64
+ end
65
+
66
+ end
data/spec/support/Labfile CHANGED
@@ -1,12 +1,21 @@
1
1
  #!/usr/bin/env ruby
2
2
  #^syntax detection
3
3
 
4
+ shell_provision_script = <<-EOF
5
+ set -x
6
+ apt-get -y update
7
+ apt-get -y install dnsutils
8
+ EOF
9
+
4
10
  config Hash[
5
11
  :domain => "default.zone"
6
12
  ]
7
13
 
8
14
  node :localhost do
9
15
 
16
+ components %w(resolv bind)
17
+ route true
18
+
10
19
  provider TestLab::Provider::Vagrant
11
20
  config Hash[
12
21
  :vagrant => {
@@ -20,14 +29,13 @@ node :localhost do
20
29
  :repo => File.dirname(__FILE__)
21
30
  ]
22
31
 
23
- route false
24
-
25
32
  network :testnet do
26
33
  address '192.168.255.254/16'
27
34
  bridge :br0
28
35
  end
29
36
 
30
- container "server-1" do
37
+ # DUAL NICs
38
+ container "server-dual-nic" do
31
39
  distro "ubuntu"
32
40
  release "precise"
33
41
 
@@ -45,7 +53,8 @@ node :localhost do
45
53
  end
46
54
  end
47
55
 
48
- container "server-2" do
56
+ # SINGLE NIC
57
+ container "server-single-nic" do
49
58
  distro "ubuntu"
50
59
  release "precise"
51
60
 
@@ -56,4 +65,23 @@ node :localhost do
56
65
  end
57
66
  end
58
67
 
68
+ # SHELL PROVISIONER
69
+ container "server-shell" do
70
+ distro "ubuntu"
71
+ release "precise"
72
+
73
+ provisioner TestLab::Provisioner::Shell
74
+ config Hash[
75
+ :shell => "/bin/bash",
76
+ :setup => shell_provision_script
77
+ ]
78
+
79
+ interface do
80
+ name :eth0
81
+ network_id :testnet
82
+ address '192.168.0.200/16'
83
+ end
84
+ end
85
+
86
+
59
87
  end
data/spec/testlab_spec.rb CHANGED
@@ -21,7 +21,10 @@ require "spec_helper"
21
21
 
22
22
  describe TestLab do
23
23
 
24
- subject { TestLab.new(:labfile => LABFILE) }
24
+ subject {
25
+ @ui = ZTK::UI.new(:stdout => StringIO.new, :stderr => StringIO.new)
26
+ @testlab = TestLab.new(:labfile => LABFILE, :ui => @ui)
27
+ }
25
28
 
26
29
  describe "class" do
27
30
 
@@ -0,0 +1,114 @@
1
+ ################################################################################
2
+ #
3
+ # Author: Zachary Patten <zachary AT jovelabs DOT com>
4
+ # Copyright: Copyright (c) Zachary Patten
5
+ # License: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ ################################################################################
20
+ require "spec_helper"
21
+
22
+ describe TestLab::Utility do
23
+
24
+ subject { TestLab::Utility }
25
+
26
+ describe "class" do
27
+
28
+ it "should be TestLab::Utility" do
29
+ subject.should be TestLab::Utility
30
+ end
31
+
32
+ end
33
+
34
+ describe "methods" do
35
+
36
+ describe "#cidr_octets" do
37
+ context "with CIDR 0" do
38
+ it "should return the correct number of octets based on our CIDR" do
39
+ address = "192.168.0.254/0"
40
+ subject.cidr_octets(address).should be_kind_of(Array)
41
+ subject.cidr_octets(address).should_not be_empty
42
+ subject.cidr_octets(address).should == ["192", "168", "0", "254"]
43
+ end
44
+ end
45
+
46
+ context "with CIDR 8" do
47
+ it "should return the correct number of octets based on our CIDR" do
48
+ address = "192.168.0.254/8"
49
+ subject.cidr_octets(address).should be_kind_of(Array)
50
+ subject.cidr_octets(address).should_not be_empty
51
+ subject.cidr_octets(address).should == ["168", "0", "254"]
52
+ end
53
+ end
54
+
55
+ context "with CIDR 16" do
56
+ it "should return the correct number of octets based on our CIDR" do
57
+ address = "192.168.0.254/16"
58
+ subject.cidr_octets(address).should be_kind_of(Array)
59
+ subject.cidr_octets(address).should_not be_empty
60
+ subject.cidr_octets(address).should == ["0", "254"]
61
+ end
62
+ end
63
+
64
+ context "with CIDR 24" do
65
+ it "should return the correct number of octets based on our CIDR" do
66
+ address = "192.168.0.254/24"
67
+ subject.cidr_octets(address).should be_kind_of(Array)
68
+ subject.cidr_octets(address).should_not be_empty
69
+ subject.cidr_octets(address).should == ["254"]
70
+ end
71
+ end
72
+ end
73
+
74
+ describe "#arpa_octets" do
75
+ context "with CIDR 0" do
76
+ it "should return the correct number of octets based on our CIDR" do
77
+ address = "192.168.0.254/0"
78
+ subject.arpa_octets(address).should be_kind_of(Array)
79
+ subject.arpa_octets(address).should be_empty
80
+ subject.arpa_octets(address).should == []
81
+ end
82
+ end
83
+
84
+ context "with CIDR 8" do
85
+ it "should return the correct number of octets based on our CIDR" do
86
+ address = "192.168.0.254/8"
87
+ subject.arpa_octets(address).should be_kind_of(Array)
88
+ subject.arpa_octets(address).should_not be_empty
89
+ subject.arpa_octets(address).should == ["192"]
90
+ end
91
+ end
92
+
93
+ context "with CIDR 16" do
94
+ it "should return the correct number of octets based on our CIDR" do
95
+ address = "192.168.0.254/16"
96
+ subject.arpa_octets(address).should be_kind_of(Array)
97
+ subject.arpa_octets(address).should_not be_empty
98
+ subject.arpa_octets(address).should == ["168", "192"]
99
+ end
100
+ end
101
+
102
+ context "with CIDR 24" do
103
+ it "should return the correct number of octets based on our CIDR" do
104
+ address = "192.168.0.254/24"
105
+ subject.arpa_octets(address).should be_kind_of(Array)
106
+ subject.arpa_octets(address).should_not be_empty
107
+ subject.arpa_octets(address).should == ["0", "168", "192"]
108
+ end
109
+ end
110
+ end
111
+
112
+ end
113
+
114
+ 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.3.1
4
+ version: 0.4.0
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-05 00:00:00.000000000 Z
12
+ date: 2013-05-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: gli
@@ -246,9 +246,11 @@ files:
246
246
  - lib/testlab/providers/templates/vagrant/Vagrantfile.erb
247
247
  - lib/testlab/providers/vagrant.rb
248
248
  - lib/testlab/provisioner.rb
249
- - lib/testlab/provisioners/chef.rb
249
+ - lib/testlab/provisioners/omnibus.rb
250
+ - lib/testlab/provisioners/omnitruck.rb
250
251
  - lib/testlab/provisioners/shell.rb
251
- - lib/testlab/provisioners/templates/chef/bootstrap.erb
252
+ - lib/testlab/provisioners/templates/chef/omnibus.erb
253
+ - lib/testlab/provisioners/templates/chef/omnitruck.erb
252
254
  - lib/testlab/utility.rb
253
255
  - lib/testlab/utility/cidr.rb
254
256
  - lib/testlab/utility/misc.rb
@@ -258,9 +260,11 @@ files:
258
260
  - spec/node_spec.rb
259
261
  - spec/provider_spec.rb
260
262
  - spec/provisioner_spec.rb
263
+ - spec/provisioners/shell_spec.rb
261
264
  - spec/spec_helper.rb
262
265
  - spec/support/Labfile
263
266
  - spec/testlab_spec.rb
267
+ - spec/utility_spec.rb
264
268
  - testlab.gemspec
265
269
  homepage: https://github.com/zpatten/testlab
266
270
  licenses:
@@ -277,7 +281,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
277
281
  version: '0'
278
282
  segments:
279
283
  - 0
280
- hash: -1882861325237330048
284
+ hash: 2598342112570301025
281
285
  required_rubygems_version: !ruby/object:Gem::Requirement
282
286
  none: false
283
287
  requirements:
@@ -286,7 +290,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
286
290
  version: '0'
287
291
  segments:
288
292
  - 0
289
- hash: -1882861325237330048
293
+ hash: 2598342112570301025
290
294
  requirements: []
291
295
  rubyforge_project:
292
296
  rubygems_version: 1.8.25
@@ -299,7 +303,9 @@ test_files:
299
303
  - spec/node_spec.rb
300
304
  - spec/provider_spec.rb
301
305
  - spec/provisioner_spec.rb
306
+ - spec/provisioners/shell_spec.rb
302
307
  - spec/spec_helper.rb
303
308
  - spec/support/Labfile
304
309
  - spec/testlab_spec.rb
310
+ - spec/utility_spec.rb
305
311
  has_rdoc: