toft 0.0.6 → 0.0.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.
- data/Gemfile.lock +34 -26
- data/Rakefile +1 -0
- data/features/chef.feature +8 -0
- data/features/node.feature +4 -0
- data/features/puppet.feature +49 -0
- data/features/step_definitions/centos/checks.rb +9 -0
- data/features/step_definitions/node.rb +8 -1
- data/features/step_definitions/puppet.rb +15 -0
- data/features/support/env.rb +6 -2
- data/fixtures/chef/cookbooks/test/recipes/data_bag.rb +9 -0
- data/fixtures/chef/data_bags/bag1/item1.json +4 -0
- data/fixtures/chef/data_bags/bag1/item2.json +4 -0
- data/fixtures/chef/data_bags/bag2/item1.json +4 -0
- data/fixtures/chef/data_bags/bag2/item2.json +4 -0
- data/fixtures/puppet/conf/fileserver.conf +3 -0
- data/fixtures/puppet/conf/puppet.conf +15 -0
- data/fixtures/puppet/conf/puppet_exec.conf +9 -0
- data/fixtures/puppet/conf/puppet_fileserver.conf +8 -0
- data/fixtures/puppet/conf/puppet_modules.conf +7 -0
- data/fixtures/puppet/conf/puppet_template.conf +8 -0
- data/fixtures/puppet/manifests/fileserver/conf/test_fileserver +1 -0
- data/fixtures/puppet/manifests/nodes/test_node.pp +26 -0
- data/fixtures/puppet/manifests/site.pp +1 -0
- data/fixtures/puppet/manifests/templates/template_test +2 -0
- data/fixtures/puppet/manifests/test.pp +8 -0
- data/fixtures/puppet/manifests/test_fileserver.pp +14 -0
- data/fixtures/puppet/manifests/test_install.pp +5 -0
- data/fixtures/puppet/manifests/test_module.pp +5 -0
- data/fixtures/puppet/manifests/test_service.pp +11 -0
- data/fixtures/puppet/manifests/test_template.pp +12 -0
- data/fixtures/puppet/modules/test_module/manifests/init.pp +8 -0
- data/lib/toft/chef/chef_runner.rb +9 -1
- data/lib/toft/node.rb +34 -9
- data/lib/toft/puppet/puppet_runner.rb +38 -0
- data/lib/toft/version.rb +1 -1
- data/lib/toft.rb +3 -2
- data/scripts/bin/centos/lxc-prepare-host +6 -0
- data/scripts/bin/centos/provision_vagrant +11 -0
- data/scripts/bin/share/lxc-create-centos-image +30 -2
- data/scripts/bin/ubuntu/lxc-create-ubuntu-image +20 -10
- data/scripts/bin/ubuntu/lxc-prepare-host +0 -2
- data/scripts/bin/ubuntu/provision_vagrant +9 -0
- data/spec/toft/{chef_attributes_spec.rb → chef/chef_attributes_spec.rb} +0 -0
- data/spec/toft/{chef_runner_spec.rb → chef/chef_runner_spec.rb} +1 -1
- data/spec/toft/node_spec.rb +18 -0
- data/spec/toft/puppet/puppet_runner_spec.rb +26 -0
- metadata +45 -10
data/Gemfile.lock
CHANGED
|
@@ -1,54 +1,62 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
toft (0.0.
|
|
4
|
+
toft (0.0.11)
|
|
5
5
|
net-ssh
|
|
6
6
|
|
|
7
7
|
GEM
|
|
8
8
|
remote: http://rubygems.org/
|
|
9
9
|
specs:
|
|
10
10
|
archive-tar-minitar (0.5.2)
|
|
11
|
+
arr-pm (0.0.7)
|
|
12
|
+
cabin (> 0)
|
|
13
|
+
backports (2.3.0)
|
|
11
14
|
builder (3.0.0)
|
|
12
|
-
|
|
15
|
+
cabin (0.4.4)
|
|
16
|
+
json
|
|
17
|
+
childprocess (0.3.2)
|
|
18
|
+
ffi (~> 1.0.6)
|
|
19
|
+
clamp (0.4.0)
|
|
20
|
+
cucumber (1.2.0)
|
|
13
21
|
builder (>= 2.1.2)
|
|
14
|
-
diff-lcs (>= 1.1.
|
|
15
|
-
gherkin (~> 2.
|
|
22
|
+
diff-lcs (>= 1.1.3)
|
|
23
|
+
gherkin (~> 2.10.0)
|
|
16
24
|
json (>= 1.4.6)
|
|
17
|
-
term-ansicolor (>= 1.0.6)
|
|
18
25
|
diff-lcs (1.1.3)
|
|
19
26
|
erubis (2.7.0)
|
|
20
|
-
ffi (1.0.
|
|
21
|
-
fpm (0.
|
|
27
|
+
ffi (1.0.11)
|
|
28
|
+
fpm (0.4.6)
|
|
29
|
+
arr-pm (~> 0.0.7)
|
|
30
|
+
backports (= 2.3.0)
|
|
31
|
+
cabin (~> 0.4.3)
|
|
32
|
+
clamp
|
|
22
33
|
json
|
|
23
|
-
gherkin (2.
|
|
34
|
+
gherkin (2.10.0)
|
|
24
35
|
json (>= 1.4.6)
|
|
25
36
|
i18n (0.6.0)
|
|
26
37
|
json (1.5.4)
|
|
38
|
+
log4r (1.1.10)
|
|
27
39
|
net-scp (1.0.4)
|
|
28
40
|
net-ssh (>= 1.99.1)
|
|
29
|
-
net-ssh (2.
|
|
30
|
-
rake (0.9.2)
|
|
31
|
-
rspec (2.
|
|
32
|
-
rspec-core (~> 2.
|
|
33
|
-
rspec-expectations (~> 2.
|
|
34
|
-
rspec-mocks (~> 2.
|
|
35
|
-
rspec-core (2.
|
|
36
|
-
rspec-expectations (2.
|
|
37
|
-
diff-lcs (~> 1.1.
|
|
38
|
-
rspec-mocks (2.
|
|
39
|
-
|
|
40
|
-
thor (0.14.6)
|
|
41
|
-
vagrant (0.8.7)
|
|
41
|
+
net-ssh (2.2.2)
|
|
42
|
+
rake (0.9.2.2)
|
|
43
|
+
rspec (2.10.0)
|
|
44
|
+
rspec-core (~> 2.10.0)
|
|
45
|
+
rspec-expectations (~> 2.10.0)
|
|
46
|
+
rspec-mocks (~> 2.10.0)
|
|
47
|
+
rspec-core (2.10.0)
|
|
48
|
+
rspec-expectations (2.10.0)
|
|
49
|
+
diff-lcs (~> 1.1.3)
|
|
50
|
+
rspec-mocks (2.10.1)
|
|
51
|
+
vagrant (1.0.3)
|
|
42
52
|
archive-tar-minitar (= 0.5.2)
|
|
53
|
+
childprocess (~> 0.3.1)
|
|
43
54
|
erubis (~> 2.7.0)
|
|
44
55
|
i18n (~> 0.6.0)
|
|
45
56
|
json (~> 1.5.1)
|
|
57
|
+
log4r (~> 1.1.9)
|
|
46
58
|
net-scp (~> 1.0.4)
|
|
47
|
-
net-ssh (~> 2.
|
|
48
|
-
thor (~> 0.14.6)
|
|
49
|
-
virtualbox (~> 0.9.1)
|
|
50
|
-
virtualbox (0.9.2)
|
|
51
|
-
ffi (~> 1.0.9)
|
|
59
|
+
net-ssh (~> 2.2.2)
|
|
52
60
|
|
|
53
61
|
PLATFORMS
|
|
54
62
|
ruby
|
data/Rakefile
CHANGED
data/features/chef.feature
CHANGED
|
@@ -57,6 +57,14 @@ Scenario: Attributes table should override attributes in json file
|
|
|
57
57
|
Then Node "n1" should have file or directory "/tmp/stub/two_two"
|
|
58
58
|
Then Node "n1" should have file or directory "/tmp/stub/three"
|
|
59
59
|
|
|
60
|
+
Scenario: Run chef recipe with data bags
|
|
61
|
+
Given I have a clean running node n1
|
|
62
|
+
When I run "recipe[test::data_bag]" on node "n1"
|
|
63
|
+
Then Node "n1" should have file or directory "/tmp/stub/bag1item1"
|
|
64
|
+
Then Node "n1" should have file or directory "/tmp/stub/bag1item2"
|
|
65
|
+
Then Node "n1" should have file or directory "/tmp/stub/bag2item1"
|
|
66
|
+
Then Node "n1" should have file or directory "/tmp/stub/bag2item2"
|
|
67
|
+
|
|
60
68
|
Scenario: Run non-exist recipe
|
|
61
69
|
|
|
62
70
|
Scenario: Run non-exist role
|
data/features/node.feature
CHANGED
|
@@ -35,3 +35,7 @@ Scenario: Create or destroy node
|
|
|
35
35
|
When I destroy node "n2"
|
|
36
36
|
Then There should be 1 nodes in the environment
|
|
37
37
|
|
|
38
|
+
Scenario: Change hostname used internally for a specific host
|
|
39
|
+
Given I have a clean running node n1
|
|
40
|
+
And I change the internal hostname for "n1" to "correct.puppet.com"
|
|
41
|
+
Then the result of running ssh command "hostname" on "n1" should contain "correct.puppet.com"
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
Feature: Puppet support
|
|
2
|
+
|
|
3
|
+
Scenario: Run Puppet manifest on nodes
|
|
4
|
+
Given I have a clean running node n1
|
|
5
|
+
When I run puppet manifest "manifests/test.pp" on node "n1"
|
|
6
|
+
Then Node "n1" should have file or directory "/tmp/puppet_test"
|
|
7
|
+
|
|
8
|
+
Scenario: Run puppet manifest with included nodes
|
|
9
|
+
Given I have a clean running node n1
|
|
10
|
+
And I change the internal hostname for "n1" to "correct.puppet.com"
|
|
11
|
+
And I run puppet manifest "manifests/site.pp" on node "n1"
|
|
12
|
+
Then Node "n1" should have file or directory "/tmp/puppet_test_correct"
|
|
13
|
+
And Node "n1" should have file or directory "/tmp/puppet_test_default"
|
|
14
|
+
And Node "n1" should have not file or directory "/tmp/puppet_test_incorrect"
|
|
15
|
+
|
|
16
|
+
Scenario: Run puppet manifest with modules
|
|
17
|
+
Given I have a clean running node n1
|
|
18
|
+
When I run puppet manifest "manifests/test_module.pp" with config file "puppet_modules.conf" on node "n1"
|
|
19
|
+
Then Node "n1" should have file or directory "/tmp/puppet_test_module"
|
|
20
|
+
|
|
21
|
+
Scenario: Run puppet manifest with static files being served by fileserver
|
|
22
|
+
Given I have a clean running node n1
|
|
23
|
+
When I run puppet manifest "manifests/test_fileserver.pp" with config file "puppet_fileserver.conf" on node "n1"
|
|
24
|
+
Then Node "n1" should have file or directory "/tmp/puppet_test_fileserver"
|
|
25
|
+
|
|
26
|
+
Scenario: Run puppet manifest with template dir configuration
|
|
27
|
+
Given I have a clean running node n1
|
|
28
|
+
When I run puppet manifest "manifests/test_template.pp" with config file "puppet_template.conf" on node "n1"
|
|
29
|
+
Then Node "n1" should have file or directory "/tmp/puppet_test_template"
|
|
30
|
+
|
|
31
|
+
Scenario: Check that package was installed on centos box
|
|
32
|
+
Given I have a clean running node n1
|
|
33
|
+
When I run puppet manifest "manifests/test_install.pp" on node "n1"
|
|
34
|
+
Then Node "n1" should have package "zip" installed in the centos box
|
|
35
|
+
|
|
36
|
+
Scenario: Check that service is running on centos box
|
|
37
|
+
Given I have a clean running node n1
|
|
38
|
+
When I run puppet manifest "manifests/test_service.pp" on node "n1"
|
|
39
|
+
Then Node "n1" should have service "named" running in the centos box
|
|
40
|
+
|
|
41
|
+
Scenario: Run puppet manifest overriding conf settings
|
|
42
|
+
Given I have a clean running node n1
|
|
43
|
+
And node "n1" has the configuration settings:
|
|
44
|
+
|key|value|
|
|
45
|
+
|modulepath|/tmp/toft-puppet-tmp/modules|
|
|
46
|
+
When I run puppet manifest "manifests/test_module.pp" on node "n1"
|
|
47
|
+
Then Node "n1" should have file or directory "/tmp/puppet_test_module"
|
|
48
|
+
|
|
49
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
Then /^Node "([^"]*)" should have package "([^"]*)" installed in the centos box$/ do |node, package|
|
|
2
|
+
result = find(node).run_ssh("rpm -qa #{package}")
|
|
3
|
+
result.stdout.should include(package)
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
Then /^Node "([^"]*)" should have service "([^"]*)" running in the centos box$/ do |node, service|
|
|
7
|
+
result = find(node).run_ssh("ps -ef | grep -v grep | grep #{service} | wc -l")
|
|
8
|
+
result.stdout.strip!.should == "1"
|
|
9
|
+
end
|
|
@@ -53,6 +53,13 @@ When /^I remove cname "([^"]*)" from "([^"]*)"$/ do |cname, node|
|
|
|
53
53
|
find(node).remove_cname cname
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
+
When /^I change the internal hostname for "([^"]*)" to "([^"]*)"$/ do |node_hostname, internal_hostname|
|
|
57
|
+
r = find(node_hostname)
|
|
58
|
+
r.run_ssh("hostname #{internal_hostname}")
|
|
59
|
+
r.run_ssh("echo 127.0.0.1 #{internal_hostname} >> /etc/hosts")
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
|
|
56
63
|
Then /^Hostname of Node "([^"]*)" should match its name$/ do |node|
|
|
57
64
|
find(node).hostname.should == node
|
|
58
|
-
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
When /^I run puppet manifest "([^"]*)" on node "([^"]*)"$/ do |run_list, node|
|
|
2
|
+
find(node).run_puppet run_list
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
When /^I run puppet manifest "([^"]*)" with config file "([^"]*)" on node "([^"]*)"$/ do |run_list, conf_file, node|
|
|
6
|
+
find(node).run_puppet(run_list, :conf_file => conf_file)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
When /^node "([^"]*)" has the configuration settings:$/ do |node, table|
|
|
10
|
+
r = find(node)
|
|
11
|
+
r.run_ssh("echo '[user]' >> /etc/puppet/puppet.conf")
|
|
12
|
+
table.hashes.each do |hash|
|
|
13
|
+
r.run_ssh("echo '#{hash[:key]} = #{hash[:value]}' >> /etc/puppet/puppet.conf")
|
|
14
|
+
end
|
|
15
|
+
end
|
data/features/support/env.rb
CHANGED
|
@@ -3,7 +3,9 @@ require 'rspec/expectations'
|
|
|
3
3
|
require 'toft'
|
|
4
4
|
|
|
5
5
|
CHEF_FIXTURE_PATH = File.dirname(__FILE__) + '/../../fixtures/chef'
|
|
6
|
-
|
|
6
|
+
PUPPET_FIXTURE_PATH = File.dirname(__FILE__) + '/../../fixtures/puppet'
|
|
7
|
+
|
|
8
|
+
CONTAINER_TYPE = "centos-6"
|
|
7
9
|
|
|
8
10
|
World(Toft)
|
|
9
11
|
|
|
@@ -13,10 +15,12 @@ n1 = create_node "n1", {:ip => "192.168.20.2", :type => CONTAINER_TYPE}
|
|
|
13
15
|
Before do
|
|
14
16
|
Toft.cookbook_path = CHEF_FIXTURE_PATH + '/cookbooks'
|
|
15
17
|
Toft.role_path = CHEF_FIXTURE_PATH + '/roles'
|
|
18
|
+
Toft.data_bag_path = CHEF_FIXTURE_PATH + '/data_bags'
|
|
19
|
+
Toft.manifest_path = PUPPET_FIXTURE_PATH
|
|
16
20
|
|
|
17
21
|
@n1 = n1
|
|
18
22
|
end
|
|
19
23
|
|
|
20
24
|
at_exit do
|
|
21
25
|
n1.destroy
|
|
22
|
-
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
[main]
|
|
2
|
+
modulepath = /tmp/puppet/modules
|
|
3
|
+
templatedir = /tmp/puppet/manifests/templates
|
|
4
|
+
node_terminus = exec
|
|
5
|
+
external_nodes = /tmp/puppet/tools/extnode.pl
|
|
6
|
+
fileserverconfig = /tmp/puppet/conf/fileserver.conf
|
|
7
|
+
logdir = /var/log/puppet
|
|
8
|
+
vardir = /var/lib/puppet
|
|
9
|
+
ssldir = /var/lib/puppet/ssl
|
|
10
|
+
rundir = /var/run/puppet
|
|
11
|
+
report = true
|
|
12
|
+
server = puppet.dev.int.realestate.com.au
|
|
13
|
+
reportserver = puppet.dev.int.realestate.com.au
|
|
14
|
+
diff = diff
|
|
15
|
+
diff_args = -u
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
This is a test for the fileserver config
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
node /^correct.*/ inherits default_node {
|
|
2
|
+
|
|
3
|
+
file { "/tmp/puppet_test_correct":
|
|
4
|
+
ensure => present,
|
|
5
|
+
mode => '0666',
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
node /^incorrect.*/ inherits default_node {
|
|
11
|
+
|
|
12
|
+
file { "/tmp/puppet_test_incorrect":
|
|
13
|
+
ensure => present,
|
|
14
|
+
mode => '0666',
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
node default_node {
|
|
20
|
+
|
|
21
|
+
file { "/tmp/puppet_test_default":
|
|
22
|
+
ensure => present,
|
|
23
|
+
mode => '0666',
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "nodes/*.pp"
|
|
@@ -9,6 +9,7 @@ module Toft
|
|
|
9
9
|
DEST_CHEF_TMP = "/tmp/toft-chef-tmp"
|
|
10
10
|
DEST_COOKBOOK_PATH = "#{DEST_CHEF_TMP}/cookbooks"
|
|
11
11
|
DEST_ROLE_PATH = "#{DEST_CHEF_TMP}/roles"
|
|
12
|
+
DEST_DATA_BAG_PATH = "#{DEST_CHEF_TMP}/data_bags"
|
|
12
13
|
DEST_CHEF_SOLO_PATH = "#{DEST_CHEF_TMP}/solo.rb"
|
|
13
14
|
DEST_CHEF_JSON_PATH = "#{DEST_CHEF_TMP}/solo.json"
|
|
14
15
|
|
|
@@ -43,18 +44,25 @@ module Toft
|
|
|
43
44
|
mkdir_p "#{@root_dir}#{DEST_CHEF_TMP}"
|
|
44
45
|
cp_r Toft.cookbook_path, "#{@root_dir}#{DEST_COOKBOOK_PATH}"
|
|
45
46
|
cp_r Toft.role_path, "#{@root_dir}#{DEST_ROLE_PATH}" unless roles_missing?
|
|
47
|
+
cp_r Toft.data_bag_path, "#{@root_dir}#{DEST_DATA_BAG_PATH}" unless data_bags_missing?
|
|
46
48
|
end
|
|
47
49
|
|
|
48
50
|
def roles_missing?
|
|
49
51
|
Toft.role_path.blank?
|
|
50
52
|
end
|
|
51
53
|
|
|
54
|
+
def data_bags_missing?
|
|
55
|
+
Toft.data_bag_path.blank?
|
|
56
|
+
end
|
|
57
|
+
|
|
52
58
|
def generate_solo_rb
|
|
59
|
+
mkdir_p "#{@root_dir}/tmp/chef-file-cache"
|
|
53
60
|
solo = <<-EOF
|
|
54
61
|
file_cache_path "/tmp/chef-file-cache"
|
|
55
62
|
cookbook_path ["#{DEST_COOKBOOK_PATH}"]
|
|
56
63
|
EOF
|
|
57
64
|
solo += "role_path [\"#{DEST_ROLE_PATH}\"]" unless roles_missing?
|
|
65
|
+
solo += "\ndata_bag_path \"#{DEST_DATA_BAG_PATH}\"" unless data_bags_missing?
|
|
58
66
|
|
|
59
67
|
File.open("#{@root_dir}#{DEST_CHEF_SOLO_PATH}", 'w') do |f|
|
|
60
68
|
f.write(solo);
|
|
@@ -74,4 +82,4 @@ cookbook_path ["#{DEST_COOKBOOK_PATH}"]
|
|
|
74
82
|
end
|
|
75
83
|
end
|
|
76
84
|
end
|
|
77
|
-
end
|
|
85
|
+
end
|
data/lib/toft/node.rb
CHANGED
|
@@ -36,7 +36,7 @@ CQWv13UgQjiHgQILXSb7xdzpWK1wpDoqIEWQugRyPQDeZhPWVbB4Lg==
|
|
|
36
36
|
-----END RSA PRIVATE KEY-----
|
|
37
37
|
EOF
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
TIMEOUT_IN_SECONDS = 120
|
|
40
40
|
TRY_INTERVAL = 0.5
|
|
41
41
|
|
|
42
42
|
include Observable
|
|
@@ -54,6 +54,11 @@ CQWv13UgQjiHgQILXSb7xdzpWK1wpDoqIEWQugRyPQDeZhPWVbB4Lg==
|
|
|
54
54
|
@chef_runner = Toft::Chef::ChefRunner.new("#{rootfs}") do |chef_command|
|
|
55
55
|
run_ssh chef_command
|
|
56
56
|
end
|
|
57
|
+
|
|
58
|
+
@puppet_runner = options[:runner]
|
|
59
|
+
@puppet_runner ||= Toft::Puppet::PuppetRunner.new("#{rootfs}") do |puppet_command|
|
|
60
|
+
run_ssh puppet_command
|
|
61
|
+
end
|
|
57
62
|
end
|
|
58
63
|
|
|
59
64
|
def hostname
|
|
@@ -65,6 +70,7 @@ CQWv13UgQjiHgQILXSb7xdzpWK1wpDoqIEWQugRyPQDeZhPWVbB4Lg==
|
|
|
65
70
|
end
|
|
66
71
|
|
|
67
72
|
def start
|
|
73
|
+
puts "Starting host node..."
|
|
68
74
|
cmd "lxc-start -n #{@hostname} -d" # system + sudo lxc-start does not work on centos-6, but back-quote does(no clue on why)
|
|
69
75
|
cmd! "lxc-wait -n #{@hostname} -s RUNNING"
|
|
70
76
|
wait_ssh_ready
|
|
@@ -135,6 +141,10 @@ CQWv13UgQjiHgQILXSb7xdzpWK1wpDoqIEWQugRyPQDeZhPWVbB4Lg==
|
|
|
135
141
|
@chef_runner.run run_list, params
|
|
136
142
|
end
|
|
137
143
|
|
|
144
|
+
def run_puppet(run_list, params = {})
|
|
145
|
+
@puppet_runner.run run_list, params
|
|
146
|
+
end
|
|
147
|
+
|
|
138
148
|
def file(path)
|
|
139
149
|
FileChecker.new(rootfs, path)
|
|
140
150
|
end
|
|
@@ -149,31 +159,46 @@ CQWv13UgQjiHgQILXSb7xdzpWK1wpDoqIEWQugRyPQDeZhPWVbB4Lg==
|
|
|
149
159
|
end
|
|
150
160
|
|
|
151
161
|
def wait_sshd_running
|
|
152
|
-
|
|
162
|
+
wait_for do
|
|
153
163
|
netstat = cmd("lxc-netstat --name #{@hostname} -ta")
|
|
154
164
|
return if netstat =~ /ssh/
|
|
155
165
|
end
|
|
156
166
|
end
|
|
157
167
|
|
|
158
168
|
def wait_remote_host_reachable
|
|
159
|
-
|
|
160
|
-
try = 0
|
|
161
|
-
while try < max_try
|
|
169
|
+
wait_for do
|
|
162
170
|
begin
|
|
163
|
-
|
|
171
|
+
return if Ping.pingecho fqdn, 0.1
|
|
164
172
|
rescue Exception
|
|
165
173
|
# fix the strange pingcho exception
|
|
166
174
|
end
|
|
167
|
-
sleep TRY_INTERVAL
|
|
168
|
-
try += 1
|
|
169
175
|
end
|
|
170
176
|
raise RuntimeError, "Remote machine not responding." if try >= max_try
|
|
171
177
|
end
|
|
172
178
|
|
|
179
|
+
def wait_for
|
|
180
|
+
return if !block_given?
|
|
181
|
+
max_try = TIMEOUT_IN_SECONDS / TRY_INTERVAL
|
|
182
|
+
try = 0
|
|
183
|
+
while try < max_try
|
|
184
|
+
output_progress
|
|
185
|
+
yield
|
|
186
|
+
sleep TRY_INTERVAL
|
|
187
|
+
try += 1
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def output_progress
|
|
192
|
+
print "."
|
|
193
|
+
STDOUT.flush
|
|
194
|
+
end
|
|
195
|
+
|
|
173
196
|
def wait_ssh_ready
|
|
197
|
+
print "Waiting for host sshd ready"
|
|
174
198
|
wait_sshd_running
|
|
199
|
+
print "\nWaiting for host to be reachable"
|
|
175
200
|
wait_remote_host_reachable
|
|
176
|
-
puts "
|
|
201
|
+
puts "\nSSH connection on '#{@hostname}/#{@ip}' is ready."
|
|
177
202
|
end
|
|
178
203
|
|
|
179
204
|
def generate_lxc_config
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
|
|
3
|
+
module Toft
|
|
4
|
+
module Puppet
|
|
5
|
+
class PuppetRunner
|
|
6
|
+
include FileUtils
|
|
7
|
+
|
|
8
|
+
DEST_PUPPET_TMP = "/tmp/toft-puppet-tmp"
|
|
9
|
+
DEST_CONF_PATH = "/etc/puppet/puppet.conf"
|
|
10
|
+
|
|
11
|
+
def initialize(root_dir, &command_runner)
|
|
12
|
+
@root_dir = root_dir
|
|
13
|
+
@command_runner = command_runner
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def run(run_list, params = {})
|
|
17
|
+
copy_puppet_material
|
|
18
|
+
copy_conf_file(params[:conf_file]) if params[:conf_file]
|
|
19
|
+
@command_runner.call "puppet apply #{DEST_PUPPET_TMP}/#{run_list}"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
def copy_conf_file(conf_file)
|
|
25
|
+
@command_runner.call "cp #{DEST_PUPPET_TMP}/conf/#{conf_file} #{DEST_CONF_PATH}"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def copy_puppet_material
|
|
29
|
+
raise ArgumentError, "Toft.manifest_path can not be empty!" if Toft.manifest_path.blank?
|
|
30
|
+
rm_rf "#{@root_dir}#{DEST_PUPPET_TMP}"
|
|
31
|
+
mkdir_p "#{@root_dir}#{DEST_PUPPET_TMP}"
|
|
32
|
+
|
|
33
|
+
cp_r "#{Toft.manifest_path}/.", "#{@root_dir}#{DEST_PUPPET_TMP}"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
data/lib/toft/version.rb
CHANGED
data/lib/toft.rb
CHANGED
|
@@ -2,13 +2,14 @@ require 'toft/node_controller'
|
|
|
2
2
|
require 'toft/file_checker'
|
|
3
3
|
require 'toft/chef/chef_attributes'
|
|
4
4
|
require 'toft/chef/chef_runner'
|
|
5
|
+
require 'toft/puppet/puppet_runner'
|
|
5
6
|
|
|
6
7
|
module Toft
|
|
7
8
|
DYNAMIC_IP = "0.0.0.0"
|
|
8
9
|
DOMAIN = "foo"
|
|
9
10
|
|
|
10
11
|
class << self
|
|
11
|
-
attr_accessor :cookbook_path, :role_path
|
|
12
|
+
attr_accessor :manifest_path, :cookbook_path, :role_path, :data_bag_path
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
def create_node(hostname, options = {})
|
|
@@ -35,4 +36,4 @@ class String
|
|
|
35
36
|
def blank?
|
|
36
37
|
empty?
|
|
37
38
|
end
|
|
38
|
-
end
|
|
39
|
+
end
|
|
@@ -6,6 +6,12 @@ if [ ! "$username" = "root" ]; then
|
|
|
6
6
|
exit 1
|
|
7
7
|
fi
|
|
8
8
|
|
|
9
|
+
# sudo yum -y install wget
|
|
10
|
+
# wget http://dl.dropbox.com/u/43220259/toft-lxc-0.0.6.noarch.rpm
|
|
11
|
+
# sudo yum erase -y dhclient
|
|
12
|
+
# sudo yum install -y --nogpgcheck toft-lxc-0.0.6.noarch.rpm
|
|
13
|
+
# sudo yum install -y bind dhcp dhclient bridge-utils
|
|
14
|
+
|
|
9
15
|
gateway_ip="192.168.20.1"
|
|
10
16
|
subnet="192.168.20.0"
|
|
11
17
|
netmask="255.255.255.0"
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
cd /vagrant
|
|
2
|
+
sudo yum -y install wget
|
|
3
|
+
wget http://dl.dropbox.com/u/43220259/toft-lxc-0.0.6.noarch.rpm
|
|
4
|
+
sudo yum erase -y dhclient
|
|
5
|
+
sudo yum install -y --nogpgcheck toft-lxc-0.0.6.noarch.rpm
|
|
6
|
+
sudo yum install -y bind dhcp dhclient bridge-utils
|
|
7
|
+
sudo ./scripts/bin/centos/lxc-prepare-host
|
|
8
|
+
sudo yum install -y ruby ruby-devel ruby-docs ruby-ri ruby-irb ruby-rdoc rubygems
|
|
9
|
+
sudo gem install bundler --no-ri --no-rdoc
|
|
10
|
+
sudo bundle install
|
|
11
|
+
sudo cp natty-i386-puppet.tar.gz /var/cache/lxc/natty-i386.tar.gz
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
|
|
3
3
|
if [ $# -eq 0 ]; then
|
|
4
|
-
echo "Usage: `basename $0` <centos-6
|
|
4
|
+
echo "Usage: `basename $0` <centos-6>"
|
|
5
5
|
exit 1
|
|
6
6
|
fi
|
|
7
7
|
|
|
@@ -30,8 +30,12 @@ fi
|
|
|
30
30
|
|
|
31
31
|
# clean the cache dir
|
|
32
32
|
rm -rf $cache/$suite-$arch
|
|
33
|
+
mkdir -p $cache/$suite-$arch
|
|
33
34
|
|
|
34
35
|
# install latest rinse
|
|
36
|
+
if [ -f /etc/redhat-release ]; then # on centos
|
|
37
|
+
yum install -y perl perl-CPAN perl-libwww-perl
|
|
38
|
+
fi
|
|
35
39
|
if [[ ! `type rinse` ]]; then
|
|
36
40
|
echo "Rinse does not exist. Installing..."
|
|
37
41
|
(cd /tmp && \
|
|
@@ -42,9 +46,33 @@ if [[ ! `type rinse` ]]; then
|
|
|
42
46
|
fi
|
|
43
47
|
|
|
44
48
|
# create centos image using rinse
|
|
49
|
+
epel_arch=$arch
|
|
50
|
+
if [ "$arch" == "amd64" ]; then
|
|
51
|
+
epel_arch="x86_64"
|
|
52
|
+
fi
|
|
45
53
|
cat <<EOF > /tmp/after_post_install
|
|
54
|
+
## chef rpms
|
|
46
55
|
chroot $cache/$suite-$arch rpm -Uvh http://rbel.co/rbel6
|
|
47
|
-
|
|
56
|
+
## ruby-shadow and other libs that puppet requires
|
|
57
|
+
chroot $cache/$suite-$arch rpm -Uvh http://download.fedoraproject.org/pub/epel/6/$epel_arch/epel-release-6-5.noarch.rpm
|
|
58
|
+
## puppet repo
|
|
59
|
+
cat <<EOFF > $cache/$suite-$arch/etc/yum.repos.d/puppet.repo
|
|
60
|
+
[puppetlabs]
|
|
61
|
+
name=Puppet Labs Packages
|
|
62
|
+
baseurl=http://yum.puppetlabs.com/el/\\\$releasever/products/\\\$basearch/
|
|
63
|
+
enabled=1
|
|
64
|
+
gpgcheck=1
|
|
65
|
+
gpgkey=http://yum.puppetlabs.com/RPM-GPG-KEY-puppetlabs
|
|
66
|
+
|
|
67
|
+
[puppetlabs-deps]
|
|
68
|
+
name=Puppet Labs Packages Dependency
|
|
69
|
+
baseurl=http://yum.puppetlabs.com/el/\\\$releasever/dependencies/\\\$basearch/
|
|
70
|
+
enabled=1
|
|
71
|
+
gpgcheck=1
|
|
72
|
+
gpgkey=http://yum.puppetlabs.com/RPM-GPG-KEY-puppetlabs
|
|
73
|
+
EOFF
|
|
74
|
+
chroot $cache/$suite-$arch yum -y install tar man sudo bind-utils openssh-server openssh-clients rubygem-chef puppet
|
|
75
|
+
chroot $cache/$suite-$arch yum clean all
|
|
48
76
|
EOF
|
|
49
77
|
chmod +x /tmp/after_post_install
|
|
50
78
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
|
|
3
3
|
if [ $# -eq 0 ]; then
|
|
4
|
-
echo "Usage: `basename $0` <lenny|lucid|natty>"
|
|
4
|
+
echo "Usage: `basename $0` <lenny|lucid|natty|oneiric>"
|
|
5
5
|
exit 1
|
|
6
6
|
fi
|
|
7
7
|
|
|
@@ -30,27 +30,25 @@ fi
|
|
|
30
30
|
|
|
31
31
|
# clean the cache dir
|
|
32
32
|
rm -rf $cache/$suite-$arch
|
|
33
|
+
mkdir -p $cache/$suite-$arch
|
|
34
|
+
|
|
33
35
|
|
|
34
36
|
lenny_packages=ifupdown,locales,libui-dialog-perl,netbase,net-tools,dialog,apt,apt-utils,resolvconf,iproute,inetutils-ping,dnsutils,dhcp3-client,ssh,lsb-release,wget,gpgv,gnupg,sudo,ruby,rubygems1.8,ruby-dev,libopenssl-ruby,build-essential,ssl-cert
|
|
37
|
+
squeeze_packages=$lenny_packages
|
|
35
38
|
lucid_packages=dialog,apt,apt-utils,resolvconf,iproute,inetutils-ping,dnsutils,dhcp3-client,ssh,lsb-release,wget,gpgv,gnupg,sudo,ruby,rubygems1.8,ruby-dev,libopenssl-ruby,build-essential,ssl-cert
|
|
36
39
|
natty_packages=dialog,apt,apt-utils,resolvconf,iproute,inetutils-ping,dnsutils,isc-dhcp-client,isc-dhcp-common,ssh,lsb-release,gnupg,netbase,lxcguest,sudo,ruby,rubygems1.8,ruby-dev,libruby,build-essential,wget,ssl-cert
|
|
37
|
-
|
|
38
|
-
rm -rf "$cache/$suite-$arch"
|
|
39
|
-
mkdir -p "$cache/$suite-$arch"
|
|
40
|
-
if [ $? -ne 0 ]; then
|
|
41
|
-
echo "Failed to create '$cache/$suite-$arch' directory"
|
|
42
|
-
exit 1
|
|
43
|
-
fi
|
|
40
|
+
oneiric_packages=$natty_packages
|
|
44
41
|
|
|
45
42
|
# download a mini ubuntu into a cache
|
|
43
|
+
apt-get install -y debootstrap
|
|
46
44
|
echo "Downloading ubuntu minimal ..."
|
|
47
45
|
eval "packages=\$${suite}_packages"
|
|
48
46
|
cmd="debootstrap --verbose --variant=minbase --components=main,universe --arch=$arch --include=$packages $suite $cache/$suite-$arch"
|
|
49
47
|
echo $cmd
|
|
50
48
|
eval $cmd
|
|
51
49
|
if [ $? -ne 0 ]; then
|
|
52
|
-
|
|
53
|
-
|
|
50
|
+
echo "Failed to download the rootfs, aborting."
|
|
51
|
+
exit 1
|
|
54
52
|
fi
|
|
55
53
|
|
|
56
54
|
echo "Download complete."
|
|
@@ -71,6 +69,18 @@ apt-get install chef --force-yes -qy
|
|
|
71
69
|
EOF
|
|
72
70
|
chroot "$cache/$suite-$arch" bash /tmp/install-chef-ubuntu.sh
|
|
73
71
|
|
|
72
|
+
# install puppet
|
|
73
|
+
cat <<EOF > "$cache/$suite-$arch/tmp/install-puppet-ubuntu.sh"
|
|
74
|
+
echo -e "deb http://apt.puppetlabs.com/ $suite main\ndeb-src http://apt.puppetlabs.com/ $suite main" >> /etc/apt/sources.list.d/puppet.list
|
|
75
|
+
apt-key adv --keyserver keyserver.ubuntu.com --recv 4BD6EC30
|
|
76
|
+
apt-get update
|
|
77
|
+
apt-get install -y puppet
|
|
78
|
+
EOF
|
|
79
|
+
chroot "$cache/$suite-$arch" bash /tmp/install-puppet-ubuntu.sh
|
|
80
|
+
|
|
81
|
+
#clean apt caches
|
|
82
|
+
rm -rf $cache/$suite-$arch/var/cache/apt
|
|
83
|
+
|
|
74
84
|
# compress root image
|
|
75
85
|
echo "Packaging rootfs ..."
|
|
76
86
|
(cd $cache/$suite-$arch && tar --exclude=$suite-$arch.tar.gz -zcf $suite-$arch.tar.gz .)
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
cd /vagrant
|
|
2
|
+
wget http://dl.dropbox.com/u/43220259/toft-lxc_0.0.6_all.deb
|
|
3
|
+
sudo apt-get -y remove apparmor
|
|
4
|
+
sudo dpkg -i toft-lxc_0.0.6_all.deb
|
|
5
|
+
sudo apt-get -fy install
|
|
6
|
+
sudo ./scripts/bin/ubuntu/lxc-prepare-host
|
|
7
|
+
sudo gem install bundler --no-ri --no-rdoc
|
|
8
|
+
sudo bundle install
|
|
9
|
+
sudo cp natty-i386.tar.gz /var/cache/lxc/
|
|
File without changes
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "Node" do
|
|
4
|
+
|
|
5
|
+
describe 'run_puppet' do
|
|
6
|
+
|
|
7
|
+
it 'should run block with puppet runner' do
|
|
8
|
+
puppet_runner = mock Toft::Puppet::PuppetRunner.class
|
|
9
|
+
puppet_runner.should_receive(:run).with('manifest', {})
|
|
10
|
+
|
|
11
|
+
node = Toft::Node.new("my_host", {:runner => puppet_runner})
|
|
12
|
+
node.run_puppet('manifest')
|
|
13
|
+
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "PuppetRunner" do
|
|
4
|
+
|
|
5
|
+
it "should run puppet apply to manifest" do
|
|
6
|
+
Toft.manifest_path = "#{PROJECT_ROOT}/fixtures/puppet/manifests"
|
|
7
|
+
runner = Toft::Puppet::PuppetRunner.new("whatever") do |command|
|
|
8
|
+
command.include?("puppet apply").should be_true
|
|
9
|
+
end
|
|
10
|
+
lambda { runner.run "test" }.should_not raise_error
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "should throw exception if manifest path not set" do
|
|
14
|
+
Toft.manifest_path = ""
|
|
15
|
+
runner = Toft::Puppet::PuppetRunner.new "whatever"
|
|
16
|
+
lambda { runner.run "test" }.should raise_error ArgumentError, "Toft.manifest_path can not be empty!"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
it "should throw exception if cookbook not exist" do
|
|
21
|
+
Toft.manifest_path = "non-exist-manifest"
|
|
22
|
+
cf = Toft::Puppet::PuppetRunner.new "whatever"
|
|
23
|
+
lambda { cf.run "test" }.should raise_error RuntimeError
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: toft
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
4
|
+
hash: 9
|
|
5
5
|
prerelease:
|
|
6
6
|
segments:
|
|
7
7
|
- 0
|
|
8
8
|
- 0
|
|
9
|
-
-
|
|
10
|
-
version: 0.0.
|
|
9
|
+
- 11
|
|
10
|
+
version: 0.0.11
|
|
11
11
|
platform: ruby
|
|
12
12
|
authors:
|
|
13
13
|
- Huang Liang
|
|
@@ -15,7 +15,7 @@ autorequire:
|
|
|
15
15
|
bindir: bin
|
|
16
16
|
cert_chain: []
|
|
17
17
|
|
|
18
|
-
date:
|
|
18
|
+
date: 2012-05-16 00:00:00 Z
|
|
19
19
|
dependencies:
|
|
20
20
|
- !ruby/object:Gem::Dependency
|
|
21
21
|
name: rspec
|
|
@@ -103,7 +103,7 @@ dependencies:
|
|
|
103
103
|
version: "0"
|
|
104
104
|
type: :runtime
|
|
105
105
|
version_requirements: *id006
|
|
106
|
-
description: toft currently support testing chef, shell scripts using cucumber on lxc on ubuntu
|
|
106
|
+
description: toft currently support testing chef, puppet, shell scripts using cucumber on lxc on ubuntu
|
|
107
107
|
email:
|
|
108
108
|
- exceedhl@gmail.com
|
|
109
109
|
executables: []
|
|
@@ -120,17 +120,42 @@ files:
|
|
|
120
120
|
- features/chef.feature
|
|
121
121
|
- features/command.feature
|
|
122
122
|
- features/node.feature
|
|
123
|
+
- features/puppet.feature
|
|
124
|
+
- features/step_definitions/centos/checks.rb
|
|
123
125
|
- features/step_definitions/checker.rb
|
|
124
126
|
- features/step_definitions/chef.rb
|
|
125
127
|
- features/step_definitions/command.rb
|
|
126
128
|
- features/step_definitions/node.rb
|
|
129
|
+
- features/step_definitions/puppet.rb
|
|
127
130
|
- features/support/env.rb
|
|
128
131
|
- fixtures/chef/attributes.json
|
|
129
132
|
- fixtures/chef/cookbooks/test/attributes/default.rb
|
|
130
133
|
- fixtures/chef/cookbooks/test/recipes/attribute.rb
|
|
134
|
+
- fixtures/chef/cookbooks/test/recipes/data_bag.rb
|
|
131
135
|
- fixtures/chef/cookbooks/test/recipes/default.rb
|
|
132
136
|
- fixtures/chef/cookbooks/test/recipes/role.rb
|
|
137
|
+
- fixtures/chef/data_bags/bag1/item1.json
|
|
138
|
+
- fixtures/chef/data_bags/bag1/item2.json
|
|
139
|
+
- fixtures/chef/data_bags/bag2/item1.json
|
|
140
|
+
- fixtures/chef/data_bags/bag2/item2.json
|
|
133
141
|
- fixtures/chef/roles/test.rb
|
|
142
|
+
- fixtures/puppet/conf/fileserver.conf
|
|
143
|
+
- fixtures/puppet/conf/puppet.conf
|
|
144
|
+
- fixtures/puppet/conf/puppet_exec.conf
|
|
145
|
+
- fixtures/puppet/conf/puppet_fileserver.conf
|
|
146
|
+
- fixtures/puppet/conf/puppet_modules.conf
|
|
147
|
+
- fixtures/puppet/conf/puppet_template.conf
|
|
148
|
+
- fixtures/puppet/manifests/fileserver/conf/test_fileserver
|
|
149
|
+
- fixtures/puppet/manifests/nodes/test_node.pp
|
|
150
|
+
- fixtures/puppet/manifests/site.pp
|
|
151
|
+
- fixtures/puppet/manifests/templates/template_test
|
|
152
|
+
- fixtures/puppet/manifests/test.pp
|
|
153
|
+
- fixtures/puppet/manifests/test_fileserver.pp
|
|
154
|
+
- fixtures/puppet/manifests/test_install.pp
|
|
155
|
+
- fixtures/puppet/manifests/test_module.pp
|
|
156
|
+
- fixtures/puppet/manifests/test_service.pp
|
|
157
|
+
- fixtures/puppet/manifests/test_template.pp
|
|
158
|
+
- fixtures/puppet/modules/test_module/manifests/init.pp
|
|
134
159
|
- lib/toft.rb
|
|
135
160
|
- lib/toft/chef/chef_attributes.rb
|
|
136
161
|
- lib/toft/chef/chef_runner.rb
|
|
@@ -138,12 +163,15 @@ files:
|
|
|
138
163
|
- lib/toft/file_checker.rb
|
|
139
164
|
- lib/toft/node.rb
|
|
140
165
|
- lib/toft/node_controller.rb
|
|
166
|
+
- lib/toft/puppet/puppet_runner.rb
|
|
141
167
|
- lib/toft/version.rb
|
|
142
168
|
- scripts/bin/centos/lxc-prepare-host
|
|
169
|
+
- scripts/bin/centos/provision_vagrant
|
|
143
170
|
- scripts/bin/share/install-chef-ubuntu.sh
|
|
144
171
|
- scripts/bin/share/lxc-create-centos-image
|
|
145
172
|
- scripts/bin/ubuntu/lxc-create-ubuntu-image
|
|
146
173
|
- scripts/bin/ubuntu/lxc-prepare-host
|
|
174
|
+
- scripts/bin/ubuntu/provision_vagrant
|
|
147
175
|
- scripts/lxc-templates/files/rc.local
|
|
148
176
|
- scripts/lxc-templates/lxc-centos-6
|
|
149
177
|
- scripts/lxc-templates/lxc-lenny
|
|
@@ -151,8 +179,10 @@ files:
|
|
|
151
179
|
- scripts/lxc-templates/lxc-natty
|
|
152
180
|
- spec/fixtures/illegal_syntax.json
|
|
153
181
|
- spec/spec_helper.rb
|
|
154
|
-
- spec/toft/chef_attributes_spec.rb
|
|
155
|
-
- spec/toft/chef_runner_spec.rb
|
|
182
|
+
- spec/toft/chef/chef_attributes_spec.rb
|
|
183
|
+
- spec/toft/chef/chef_runner_spec.rb
|
|
184
|
+
- spec/toft/node_spec.rb
|
|
185
|
+
- spec/toft/puppet/puppet_runner_spec.rb
|
|
156
186
|
homepage: https://github.com/exceedhl/toft
|
|
157
187
|
licenses: []
|
|
158
188
|
|
|
@@ -185,18 +215,23 @@ rubyforge_project: toft
|
|
|
185
215
|
rubygems_version: 1.8.6
|
|
186
216
|
signing_key:
|
|
187
217
|
specification_version: 3
|
|
188
|
-
summary: toft aims to help test infrastructure code such as chef
|
|
218
|
+
summary: toft aims to help test infrastructure code such as chef, puppet
|
|
189
219
|
test_files:
|
|
190
220
|
- features/checker.feature
|
|
191
221
|
- features/chef.feature
|
|
192
222
|
- features/command.feature
|
|
193
223
|
- features/node.feature
|
|
224
|
+
- features/puppet.feature
|
|
225
|
+
- features/step_definitions/centos/checks.rb
|
|
194
226
|
- features/step_definitions/checker.rb
|
|
195
227
|
- features/step_definitions/chef.rb
|
|
196
228
|
- features/step_definitions/command.rb
|
|
197
229
|
- features/step_definitions/node.rb
|
|
230
|
+
- features/step_definitions/puppet.rb
|
|
198
231
|
- features/support/env.rb
|
|
199
232
|
- spec/fixtures/illegal_syntax.json
|
|
200
233
|
- spec/spec_helper.rb
|
|
201
|
-
- spec/toft/chef_attributes_spec.rb
|
|
202
|
-
- spec/toft/chef_runner_spec.rb
|
|
234
|
+
- spec/toft/chef/chef_attributes_spec.rb
|
|
235
|
+
- spec/toft/chef/chef_runner_spec.rb
|
|
236
|
+
- spec/toft/node_spec.rb
|
|
237
|
+
- spec/toft/puppet/puppet_runner_spec.rb
|