skewer 0.1.0 → 0.1.1

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.
@@ -5,57 +5,60 @@
5
5
  <orderEntry type="inheritedJdk" />
6
6
  <orderEntry type="sourceFolder" forTests="false" />
7
7
  <orderEntry type="library" scope="PROVIDED" name="Saikuro (v1.1.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
8
- <orderEntry type="library" scope="PROVIDED" name="activesupport (v3.2.2, RVM: ruby-1.8.7-p352) [gem]" level="application" />
8
+ <orderEntry type="library" scope="PROVIDED" name="activesupport (v3.2.3, RVM: ruby-1.8.7-p352) [gem]" level="application" />
9
9
  <orderEntry type="library" scope="PROVIDED" name="archive-tar-minitar (v0.5.2, RVM: ruby-1.8.7-p352) [gem]" level="application" />
10
+ <orderEntry type="library" scope="PROVIDED" name="arrayfields (v4.7.4, RVM: ruby-1.8.7-p352) [gem]" level="application" />
10
11
  <orderEntry type="library" scope="PROVIDED" name="aruba (v0.4.11, RVM: ruby-1.8.7-p352) [gem]" level="application" />
11
12
  <orderEntry type="library" scope="PROVIDED" name="builder (v3.0.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
12
- <orderEntry type="library" scope="PROVIDED" name="bundler (v1.1.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
13
+ <orderEntry type="library" scope="PROVIDED" name="bundler (v1.1.3, RVM: ruby-1.8.7-p352) [gem]" level="application" />
13
14
  <orderEntry type="library" scope="PROVIDED" name="childprocess (v0.3.1, RVM: ruby-1.8.7-p352) [gem]" level="application" />
14
15
  <orderEntry type="library" scope="PROVIDED" name="chronic (v0.3.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
15
- <orderEntry type="library" scope="PROVIDED" name="churn (v0.0.13, RVM: ruby-1.8.7-p352) [gem]" level="application" />
16
+ <orderEntry type="library" scope="PROVIDED" name="churn (v0.0.15, RVM: ruby-1.8.7-p352) [gem]" level="application" />
16
17
  <orderEntry type="library" scope="PROVIDED" name="colored (v1.2, RVM: ruby-1.8.7-p352) [gem]" level="application" />
17
18
  <orderEntry type="library" scope="PROVIDED" name="cucumber (v1.1.9, RVM: ruby-1.8.7-p352) [gem]" level="application" />
18
19
  <orderEntry type="library" scope="PROVIDED" name="diff-lcs (v1.1.3, RVM: ruby-1.8.7-p352) [gem]" level="application" />
19
20
  <orderEntry type="library" scope="PROVIDED" name="erubis (v2.7.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
20
21
  <orderEntry type="library" scope="PROVIDED" name="excon (v0.9.6, RVM: ruby-1.8.7-p352) [gem]" level="application" />
22
+ <orderEntry type="library" scope="PROVIDED" name="fattr (v2.2.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
21
23
  <orderEntry type="library" scope="PROVIDED" name="ffi (v1.0.11, RVM: ruby-1.8.7-p352) [gem]" level="application" />
22
24
  <orderEntry type="library" scope="PROVIDED" name="flay (v1.4.3, RVM: ruby-1.8.7-p352) [gem]" level="application" />
23
25
  <orderEntry type="library" scope="PROVIDED" name="flog (v2.5.3, RVM: ruby-1.8.7-p352) [gem]" level="application" />
24
26
  <orderEntry type="library" scope="PROVIDED" name="fog (v1.1.2, RVM: ruby-1.8.7-p352) [gem]" level="application" />
25
27
  <orderEntry type="library" scope="PROVIDED" name="formatador (v0.2.1, RVM: ruby-1.8.7-p352) [gem]" level="application" />
26
- <orderEntry type="library" scope="PROVIDED" name="gherkin (v2.9.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
28
+ <orderEntry type="library" scope="PROVIDED" name="gherkin (v2.9.3, RVM: ruby-1.8.7-p352) [gem]" level="application" />
27
29
  <orderEntry type="library" scope="PROVIDED" name="git (v1.2.5, RVM: ruby-1.8.7-p352) [gem]" level="application" />
28
- <orderEntry type="library" scope="PROVIDED" name="hirb (v0.6.1, RVM: ruby-1.8.7-p352) [gem]" level="application" />
30
+ <orderEntry type="library" scope="PROVIDED" name="hirb (v0.5.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
29
31
  <orderEntry type="library" scope="PROVIDED" name="i18n (v0.6.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
30
32
  <orderEntry type="library" scope="PROVIDED" name="jeweler (v1.8.3, RVM: ruby-1.8.7-p352) [gem]" level="application" />
31
- <orderEntry type="library" scope="PROVIDED" name="json (v1.5.4, RVM: ruby-1.8.7-p352) [gem]" level="application" />
32
- <orderEntry type="library" scope="PROVIDED" name="json_pure (v1.6.5, RVM: ruby-1.8.7-p352) [gem]" level="application" />
33
- <orderEntry type="library" scope="PROVIDED" name="log4r (v1.1.10, RVM: ruby-1.8.7-p352) [gem]" level="application" />
33
+ <orderEntry type="library" scope="PROVIDED" name="json (v1.6.1, RVM: ruby-1.8.7-p352) [gem]" level="application" />
34
+ <orderEntry type="library" scope="PROVIDED" name="json_pure (v1.6.6, RVM: ruby-1.8.7-p352) [gem]" level="application" />
34
35
  <orderEntry type="library" scope="PROVIDED" name="main (v4.7.1, RVM: ruby-1.8.7-p352) [gem]" level="application" />
36
+ <orderEntry type="library" scope="PROVIDED" name="map (v4.3.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
37
+ <orderEntry type="library" scope="PROVIDED" name="mario (v0.0.6, RVM: ruby-1.8.7-p352) [gem]" level="application" />
35
38
  <orderEntry type="library" scope="PROVIDED" name="metric_fu (v2.1.1, RVM: ruby-1.8.7-p352) [gem]" level="application" />
36
- <orderEntry type="library" scope="PROVIDED" name="mime-types (v1.17.2, RVM: ruby-1.8.7-p352) [gem]" level="application" />
39
+ <orderEntry type="library" scope="PROVIDED" name="mime-types (v1.18, RVM: ruby-1.8.7-p352) [gem]" level="application" />
37
40
  <orderEntry type="library" scope="PROVIDED" name="multi_json (v1.0.4, RVM: ruby-1.8.7-p352) [gem]" level="application" />
38
41
  <orderEntry type="library" scope="PROVIDED" name="net-scp (v1.0.4, RVM: ruby-1.8.7-p352) [gem]" level="application" />
39
- <orderEntry type="library" scope="PROVIDED" name="net-ssh (v2.2.2, RVM: ruby-1.8.7-p352) [gem]" level="application" />
40
- <orderEntry type="library" scope="PROVIDED" name="nokogiri (v1.5.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
41
- <orderEntry type="library" scope="PROVIDED" name="progressbar (v0.10.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
42
+ <orderEntry type="library" scope="PROVIDED" name="net-ssh (v2.3.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
43
+ <orderEntry type="library" scope="PROVIDED" name="nokogiri (v1.5.2, RVM: ruby-1.8.7-p352) [gem]" level="application" />
44
+ <orderEntry type="library" scope="PROVIDED" name="progressbar (v0.11.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
42
45
  <orderEntry type="library" scope="PROVIDED" name="rails_best_practices (v1.9.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
43
46
  <orderEntry type="library" scope="PROVIDED" name="rake (v0.9.2.2, RVM: ruby-1.8.7-p352) [gem]" level="application" />
44
47
  <orderEntry type="library" scope="PROVIDED" name="rcov (v1.0.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
45
- <orderEntry type="library" scope="PROVIDED" name="rdoc (v3.12, RVM: ruby-1.8.7-p352) [gem]" level="application" />
46
48
  <orderEntry type="library" scope="PROVIDED" name="reek (v1.2.8, RVM: ruby-1.8.7-p352) [gem]" level="application" />
47
49
  <orderEntry type="library" scope="PROVIDED" name="roodi (v2.1.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
48
- <orderEntry type="library" scope="PROVIDED" name="rspec (v2.8.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
49
- <orderEntry type="library" scope="PROVIDED" name="rspec-core (v2.8.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
50
- <orderEntry type="library" scope="PROVIDED" name="rspec-expectations (v2.8.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
51
- <orderEntry type="library" scope="PROVIDED" name="rspec-mocks (v2.8.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
50
+ <orderEntry type="library" scope="PROVIDED" name="rspec (v2.9.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
51
+ <orderEntry type="library" scope="PROVIDED" name="rspec-core (v2.9.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
52
+ <orderEntry type="library" scope="PROVIDED" name="rspec-expectations (v2.9.1, RVM: ruby-1.8.7-p352) [gem]" level="application" />
53
+ <orderEntry type="library" scope="PROVIDED" name="rspec-mocks (v2.9.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
52
54
  <orderEntry type="library" scope="PROVIDED" name="ruby-hmac (v0.4.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
53
55
  <orderEntry type="library" scope="PROVIDED" name="ruby2ruby (v1.3.1, RVM: ruby-1.8.7-p352) [gem]" level="application" />
54
- <orderEntry type="library" scope="PROVIDED" name="ruby_parser (v2.0.6, RVM: ruby-1.8.7-p352) [gem]" level="application" />
55
- <orderEntry type="library" scope="PROVIDED" name="sexp_processor (v3.0.10, RVM: ruby-1.8.7-p352) [gem]" level="application" />
56
+ <orderEntry type="library" scope="PROVIDED" name="ruby_parser (v2.3.1, RVM: ruby-1.8.7-p352) [gem]" level="application" />
57
+ <orderEntry type="library" scope="PROVIDED" name="sexp_processor (v3.0.7, RVM: ruby-1.8.7-p352) [gem]" level="application" />
56
58
  <orderEntry type="library" scope="PROVIDED" name="syntax (v1.0.0, RVM: ruby-1.8.7-p352) [gem]" level="application" />
57
59
  <orderEntry type="library" scope="PROVIDED" name="term-ansicolor (v1.0.7, RVM: ruby-1.8.7-p352) [gem]" level="application" />
58
- <orderEntry type="library" scope="PROVIDED" name="vagrant (v0.9.7, RVM: ruby-1.8.7-p352) [gem]" level="application" />
60
+ <orderEntry type="library" scope="PROVIDED" name="vagrant (v1.0.2, RVM: ruby-1.8.7-p352) [gem]" level="application" />
61
+ <orderEntry type="library" scope="PROVIDED" name="virtualbox (v0.7.5, RVM: ruby-1.8.7-p352) [gem]" level="application" />
59
62
  </component>
60
63
  </module>
61
64
 
@@ -1,17 +1,18 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- skewer (0.0.1)
4
+ skewer (0.1.0)
5
5
  fog (~> 1.1.2)
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
10
  Saikuro (1.1.0)
11
- activesupport (3.2.2)
11
+ activesupport (3.2.3)
12
12
  i18n (~> 0.6)
13
13
  multi_json (~> 1.0)
14
14
  archive-tar-minitar (0.5.2)
15
+ arrayfields (4.7.4)
15
16
  aruba (0.4.11)
16
17
  childprocess (>= 0.2.3)
17
18
  cucumber (>= 1.1.1)
@@ -21,12 +22,22 @@ GEM
21
22
  childprocess (0.3.1)
22
23
  ffi (~> 1.0.6)
23
24
  chronic (0.3.0)
24
- churn (0.0.13)
25
+ churn (0.0.15)
26
+ arrayfields (= 4.7.4)
25
27
  chronic (>= 0.2.3)
28
+ chronic (>= 0.2.3)
29
+ fattr (= 2.2.0)
30
+ hirb (= 0.5.0)
26
31
  hirb
32
+ jeweler (= 1.6.4)
33
+ json (= 1.6.1)
27
34
  json_pure
28
35
  main
29
- ruby_parser (~> 2.0.4)
36
+ main (>= 4.6.0)
37
+ map (= 4.3.0)
38
+ ruby_parser (= 2.3.1)
39
+ ruby_parser (~> 2.3)
40
+ sexp_processor (= 3.0.7)
30
41
  sexp_processor (~> 3.0.3)
31
42
  colored (1.2)
32
43
  cucumber (1.1.9)
@@ -38,6 +49,7 @@ GEM
38
49
  diff-lcs (1.1.3)
39
50
  erubis (2.7.0)
40
51
  excon (0.9.6)
52
+ fattr (2.2.0)
41
53
  ffi (1.0.11)
42
54
  flay (1.4.3)
43
55
  ruby_parser (~> 2.0)
@@ -56,20 +68,20 @@ GEM
56
68
  nokogiri (~> 1.5.0)
57
69
  ruby-hmac
58
70
  formatador (0.2.1)
59
- gherkin (2.9.0)
71
+ gherkin (2.9.3)
60
72
  json (>= 1.4.6)
61
73
  git (1.2.5)
62
- hirb (0.6.1)
74
+ hirb (0.5.0)
63
75
  i18n (0.6.0)
64
- jeweler (1.8.3)
76
+ jeweler (1.6.4)
65
77
  bundler (~> 1.0)
66
78
  git (>= 1.2.5)
67
79
  rake
68
- rdoc
69
- json (1.5.4)
70
- json_pure (1.6.5)
71
- log4r (1.1.10)
80
+ json (1.6.1)
81
+ json_pure (1.6.6)
72
82
  main (4.7.1)
83
+ map (4.3.0)
84
+ mario (0.0.6)
73
85
  metric_fu (2.1.1)
74
86
  Saikuro (>= 1.1.0)
75
87
  activesupport (>= 2.0.0)
@@ -82,13 +94,13 @@ GEM
82
94
  reek (>= 1.2.6)
83
95
  roodi (>= 2.1.0)
84
96
  syntax
85
- mime-types (1.17.2)
97
+ mime-types (1.18)
86
98
  multi_json (1.0.4)
87
99
  net-scp (1.0.4)
88
100
  net-ssh (>= 1.99.1)
89
- net-ssh (2.2.2)
90
- nokogiri (1.5.0)
91
- progressbar (0.10.0)
101
+ net-ssh (2.3.0)
102
+ nokogiri (1.5.2)
103
+ progressbar (0.11.0)
92
104
  rails_best_practices (1.9.0)
93
105
  activesupport
94
106
  colored
@@ -98,40 +110,39 @@ GEM
98
110
  sexp_processor
99
111
  rake (0.9.2.2)
100
112
  rcov (1.0.0)
101
- rdoc (3.12)
102
- json (~> 1.4)
103
113
  reek (1.2.8)
104
114
  ruby2ruby (~> 1.2)
105
115
  ruby_parser (~> 2.0)
106
116
  sexp_processor (~> 3.0)
107
117
  roodi (2.1.0)
108
118
  ruby_parser
109
- rspec (2.8.0)
110
- rspec-core (~> 2.8.0)
111
- rspec-expectations (~> 2.8.0)
112
- rspec-mocks (~> 2.8.0)
113
- rspec-core (2.8.0)
114
- rspec-expectations (2.8.0)
115
- diff-lcs (~> 1.1.2)
116
- rspec-mocks (2.8.0)
119
+ rspec (2.9.0)
120
+ rspec-core (~> 2.9.0)
121
+ rspec-expectations (~> 2.9.0)
122
+ rspec-mocks (~> 2.9.0)
123
+ rspec-core (2.9.0)
124
+ rspec-expectations (2.9.1)
125
+ diff-lcs (~> 1.1.3)
126
+ rspec-mocks (2.9.0)
117
127
  ruby-hmac (0.4.0)
118
128
  ruby2ruby (1.3.1)
119
129
  ruby_parser (~> 2.0)
120
130
  sexp_processor (~> 3.0)
121
- ruby_parser (2.0.6)
131
+ ruby_parser (2.3.1)
122
132
  sexp_processor (~> 3.0)
123
- sexp_processor (3.0.10)
133
+ sexp_processor (3.0.7)
124
134
  syntax (1.0.0)
125
135
  term-ansicolor (1.0.7)
126
- vagrant (0.9.7)
136
+ vagrant (0.5.4)
127
137
  archive-tar-minitar (= 0.5.2)
128
- childprocess (~> 0.3.1)
129
- erubis (~> 2.7.0)
130
- i18n (~> 0.6.0)
131
- json (~> 1.5.1)
132
- log4r (~> 1.1.9)
133
- net-scp (~> 1.0.4)
134
- net-ssh (~> 2.2.2)
138
+ erubis (>= 2.6.6)
139
+ json (>= 1.4.3)
140
+ mario (~> 0.0.6)
141
+ net-scp (>= 1.0.2)
142
+ net-ssh (>= 2.0.19)
143
+ virtualbox (~> 0.7.3)
144
+ virtualbox (0.7.5)
145
+ ffi (>= 0.6.3)
135
146
 
136
147
  PLATFORMS
137
148
  ruby
@@ -143,4 +154,4 @@ DEPENDENCIES
143
154
  rcov (~> 1.0.0)
144
155
  rspec
145
156
  skewer!
146
- vagrant (~> 0.9.0)
157
+ vagrant
data/Rakefile CHANGED
@@ -8,7 +8,7 @@ require 'metric_fu'
8
8
  require 'rake'
9
9
  require 'rake/clean'
10
10
  require 'rspec/core/rake_task'
11
- require 'vagrant'
11
+ #require 'vagrant'
12
12
 
13
13
  CLEAN.include ['coverage', 'target', '/tmp/skewer_test_code', '/tmp/more_skewer_test_code', '.skewer.json', '/tmp/skewer*']
14
14
 
@@ -56,4 +56,4 @@ RSpec::Core::RakeTask.new("spec:coverage") do |t|
56
56
  end
57
57
 
58
58
  task :default => [:clean, :spec]
59
- task :features => :vagrant_up
59
+ #task :features => :vagrant_up
@@ -33,7 +33,7 @@ EOF
33
33
 
34
34
  chmod 0755 /etc/profile.d/rubygems.sh
35
35
  . /etc/profile.d/rubygems.sh
36
- aptitude update >/dev/null
37
- aptitude install -y rsync ruby rubygems libopenssl-ruby ruby-dev build-essential libxml2-dev libxslt-dev
36
+ apt-get update >/dev/null
37
+ apt-get install -y rsync ruby rubygems libopenssl-ruby ruby-dev build-essential libxml2-dev libxslt-dev
38
38
  gem install bundler --no-rdoc --no-ri
39
39
  gem install json --no-rdoc --no-ri
data/bin/skewer CHANGED
@@ -23,7 +23,6 @@ optparse = OptionParser.new do |opts|
23
23
 
24
24
  opts.on('-pc', '--puppetcode') do |pc|
25
25
  options[:puppet_repo] = pc
26
- puts "puppetcode is: " + pc
27
26
  end
28
27
 
29
28
  opts.on('-m', '--mock') do
@@ -3,13 +3,27 @@ Feature: Hooks
3
3
  As a user
4
4
  I want it to execute a command when it's finihsed
5
5
 
6
- Scenario: accept hook on CLI
7
- Given a file named "/tmp/skewer_hook" with:
8
- """
9
- #!/bin/bash
10
- echo $1 > /tmp/skewer_hook_result
11
- """
12
- And I run `chmod +x /tmp/skewer_hook`
13
- When I run `./bin/skewer provision --cloud stub --image foo --role bar --hook /tmp/skewer_hook`
14
- Then the file "/tmp/skewer_hook_result" should exist
6
+ Scenario: accept hook on CLI
7
+ Given a file named "/tmp/skewer_hook" with:
8
+ """
9
+ #!/bin/bash
10
+ echo $1 > /tmp/skewer_hook_result
11
+ """
12
+ And I run `chmod +x /tmp/skewer_hook`
13
+ When I run `./bin/skewer provision --cloud stub --image foo --role bar --hook /tmp/skewer_hook`
14
+ Then the file "/tmp/skewer_hook_result" should exist
15
+
16
+
17
+ Scenario: run cucumber on completion
18
+ Given I have puppet code in "/tmp/skewer_test_code"
19
+ When I run `./bin/skewer provision --cloud ec2 --role apache --image ami-5c9b4935 --key testytesty --puppetcode /tmp/skewer_test_code --features hook-test/features`
20
+ Then the exit status should be 0
21
+ And the stdout should contain "Puppet run succeeded"
22
+
23
+ #@announce-stdout
24
+ #@announce-stderr
25
+ Scenario: failed cucumber should fail the run
26
+ Given I have puppet code in "/tmp/skewer_test_code"
27
+ When I run `./bin/skewer provision --cloud stub --role foobar --image ami-5c9b4935 --key testytesty --puppetcode /tmp/skewer_test_code --features hook-test/features`
28
+ Then the exit status should not be 0
15
29
 
@@ -3,8 +3,7 @@ Feature: provisioning a node on Rackspace
3
3
  As someone who wants to deploy something to the machine
4
4
  I want to run the provision command
5
5
 
6
- @announce-stdout
7
- @announce-stderr
6
+
8
7
  Scenario: config in local file
9
8
  Given I have puppet code in "/tmp/skewer_test_code"
10
9
  And a file named ".skewer.json" with:
@@ -15,20 +14,21 @@ Feature: provisioning a node on Rackspace
15
14
  "image_id":"112"
16
15
  }
17
16
  """
18
- When I run `./bin/skewer provision --cloud rackspace --role foobar --image 112`
17
+ When I run `./bin/skewer provision --cloud rackspace --role foobar --image 112 --region lon`
19
18
  Then the stdout should contain "Evaluating cloud rackspace"
20
19
  And the stdout should contain "Launching a Rackspace node"
20
+ And the exit status should be 0
21
+
21
22
 
22
- @announce-stdout
23
- @announce-stderr
24
23
  Scenario: Build a machine with a specific flavor (RAM size)
25
- Given I run `./bin/skewer provision --cloud rackspace --role foobar --image 112 --flavor 3`
24
+ Given I run `./bin/skewer provision --cloud rackspace --role foobar --image 112 --flavor 3 --puppetcode /tmp/skewer_test_code --region lon`
26
25
  Then the stdout should contain "Evaluating cloud rackspace"
27
26
  And the stdout should contain "Launching a Rackspace node"
27
+ And the exit status should be 0
28
+
28
29
 
29
- @announce-stdout
30
- @announce-stderr
31
30
  Scenario: Build a machine with a symbolic image ID
32
- Given I run `./bin/skewer provision --cloud rackspace --role foobar --image ubuntu1104 --flavor 2`
31
+ Given I run `./bin/skewer provision --cloud rackspace --role foobar --image ubuntu1104 --flavor 2 --puppetcode /tmp/skewer_test_code --region lon`
33
32
  Then the stdout should contain "Evaluating cloud rackspace"
34
33
  And the stdout should contain "Launching a Rackspace node"
34
+ And the exit status should be 0
@@ -0,0 +1,3 @@
1
+ class apache {
2
+ include apache::install
3
+ }
@@ -1,2 +1,3 @@
1
- import "nodes.pp"
2
1
  import "classes/*.pp"
2
+ import "nodes.pp"
3
+
@@ -0,0 +1,16 @@
1
+ class apache::install {
2
+ package {
3
+ 'apache2': ensure => present
4
+ }
5
+ file {
6
+ '/var/www/index.html':
7
+ ensure => present,
8
+ content => 'Puppet Run Success',
9
+ require => Package['apache2'];
10
+ }
11
+ service {
12
+ 'apache2':
13
+ ensure => running,
14
+ require => Package['apache2'];
15
+ }
16
+ }
@@ -7,6 +7,7 @@ Scenario: run the command without args
7
7
  When I run `./bin/skewer update`
8
8
  Then the exit status should not be 0
9
9
 
10
+ @wip
10
11
  @announce-stdout @announce-stderr
11
12
  Scenario: pass in a hostname user and role on passing puppet code
12
13
  Given I have access to the internet
@@ -16,13 +17,13 @@ Scenario: pass in a hostname user and role on passing puppet code
16
17
  And the stdout should contain "Using Puppet Code from /tmp/skewer_test_code/"
17
18
  And the stdout should contain "Puppet run succeeded"
18
19
 
19
-
20
+ @wip
20
21
  @announce-stdout @announce-stderr
21
22
  Scenario: pass in a hostname user and role on broken puppet code
22
23
  Given I have access to the internet
23
24
  And I have puppet code in "/tmp/skewer_test_code"
24
25
  When I run `./bin/skewer update --host default --user vagrant --role foobroken --puppetcode /tmp/skewer_test_code/`
25
- Then the exit status should be 0
26
+ Then the exit status should not be 0
26
27
  And the stdout should contain "Using Puppet Code from /tmp/skewer_test_code/"
27
28
  And the stdout should contain "Puppet failed"
28
29
 
@@ -0,0 +1,6 @@
1
+ # A sample Gemfile
2
+ source "https://rubygems.org"
3
+
4
+ gem "capybara"
5
+ gem "cucumber"
6
+ gem "culerity"
@@ -0,0 +1,9 @@
1
+ Feature: apache
2
+ In order to server content
3
+ As an administrator of the website
4
+ I would like there to be an apache server
5
+
6
+ Scenario: default web page
7
+ Given I visit a page on the root domain
8
+ Then I should see 'Puppet Run Success'
9
+
@@ -0,0 +1,9 @@
1
+ Given /^I visit a page on the root domain$/ do
2
+ fail unless host = ENV['SKEWER_HOST']
3
+ @page = `curl -s "http://#{host}/"`
4
+ end
5
+
6
+
7
+ Then /^I should see '(.*)'$/ do |arg|
8
+ @page.should match(/#{arg}/)
9
+ end
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+
@@ -60,7 +60,7 @@ module Skewer
60
60
  # TODO: if there's no role, it should look it up from an external source
61
61
  if @mock
62
62
  Skewer.logger.debug "Mock: would normally rsync now"
63
- else
63
+ else
64
64
  Source.new(source_dir).rsync(@node)
65
65
  end
66
66
 
data/lib/cli.rb CHANGED
@@ -34,7 +34,7 @@ module Skewer
34
34
  when :rackspace
35
35
  require 'rackspace/node'
36
36
  Skewer.logger.debug 'Launching a Rackspace node'
37
- node = Rackspace::Node.new(@options[:flavor_id], image, 'default').node
37
+ node = Rackspace::Node.new(@config.get('flavor_id'), image, 'default').node
38
38
  when :linode
39
39
  raise "not implemented"
40
40
  when :eucalyptus
@@ -78,10 +78,12 @@ module Skewer
78
78
  Puppet.run(node, @options)
79
79
  location = @util.get_location(node)
80
80
  Hooks.new(location).run
81
+
82
+ Cuke.new(@config.get(:cuke_dir), location).run if @config.get(:cuke_dir)
81
83
  Skewer.logger.debug "Node ready\n open http://#{location} or \n ssh -l #{node.username} #{location}"
82
- Cuke.new(@config.get(:cuke_dir)).run if @config.get(:cuke_dir)
83
84
  rescue Exception => exception
84
85
  Skewer.logger.debug exception
86
+ raise "Something went wrong, and we killed the node"
85
87
  ensure
86
88
  destroy
87
89
  end
@@ -6,18 +6,18 @@ module Skewer
6
6
  # built.
7
7
  class Cuke
8
8
  class CukeError < RuntimeError; end
9
+ include Skewer
9
10
 
10
- def initialize(dir = nil)
11
- raise "you must provide a valid directory for features to be executed within" if dir.nil? or dir.class != String or !directory_exists?(dir)
11
+ def initialize(dir = nil, host = nil)
12
+ raise "you must provide a valid directory for features to be executed within" unless File.directory?(dir)
12
13
  @dir = dir
13
- end
14
-
15
- def directory_exists?(dir)
16
- File.directory?(dir)
14
+ @host = host
17
15
  end
18
16
 
19
17
  def run
20
- result = `cucumber #{@dir}`
18
+ Skewer.logger.debug("Running cucumber hook")
19
+ `cd #{@dir}/.. && bundle install` if File.join(@dir, '..', 'Gemfile')
20
+ result = `cucumber #{@dir} SKEWER_HOST=#{@host}`
21
21
  parsed = result.match(/failed/)[0] rescue false
22
22
  raise CukeError, "One of the cuke features failed!\n\n#{result}" if parsed
23
23
  result
@@ -13,6 +13,9 @@ module Skewer
13
13
  validate_options(options, type)
14
14
 
15
15
  if type == 'delete'
16
+ if options[:region]
17
+ SkewerConfig.set 'region', options[:region]
18
+ end
16
19
  case options[:kind]
17
20
  when :ec2
18
21
  node = AWS::Node.find_by_name(options[:host])
@@ -1,10 +1,10 @@
1
1
  module Skewer
2
2
  module Rackspace
3
3
  class Images
4
- attr_reader :supported
4
+ attr_reader :distributions
5
5
 
6
6
  def initialize
7
- @supported = {
7
+ @distributions = {
8
8
  'ubuntu1004' => { :id => 112, :name => "Ubuntu 10.04 LTS"},
9
9
  'ubuntu1104' => { :id => 115, :name => "Ubuntu 11.04"},
10
10
  'ubuntu1110' => { :id => 119, :name => "Ubuntu 11.10"},
@@ -13,12 +13,23 @@ module Skewer
13
13
 
14
14
  # If provided a name for an image, give back the ID.
15
15
  def get_id(name)
16
- return @supported['ubuntu1004'][:id] if name.nil?
16
+ if name.nil?
17
+ return @distributions['ubuntu1004'][:id]
18
+ end
17
19
  name = Integer(name) rescue name
18
- return name if name.class == Fixnum
19
- return @supported['ubuntu1004'][:id] if name.class != String
20
- raise "An image with the name '#{name}' doesn't exist" if !@supported.has_key?(name)
21
- @supported[name][:id]
20
+
21
+ if name.class == Fixnum
22
+ return name
23
+ end
24
+
25
+ unless name.class == String
26
+ return @distributions['ubuntu1004'][:id]
27
+ end
28
+
29
+ unless @distributions.has_key?(name)
30
+ raise "An image with the name '#{name}' doesn't exist"
31
+ end
32
+ @distributions[name][:id]
22
33
  end
23
34
  end
24
35
  end
@@ -1,5 +1,7 @@
1
1
  require 'fog'
2
2
  require 'rackspace/images'
3
+ require 'rackspace/service'
4
+ require 'config'
3
5
 
4
6
  module Skewer
5
7
  module Rackspace
@@ -9,42 +11,51 @@ module Skewer
9
11
 
10
12
  # By default, boot an Ubuntu 10.04 LTS (lucid) server.
11
13
  def initialize(flavor = 1, image = 112, name = 'my_server', instance = nil)
12
- connection = self.class.find_service
14
+ region = SkewerConfig.get('region')
15
+ connection = self.class.find_service(region)
13
16
 
14
17
  # Get our SSH key to attach it to the server.
15
- if instance
16
- @node = instance
17
- else
18
- @node = build(connection, flavor, image, name)
19
- end
18
+ instance ? @node = instance : @node = build(connection, flavor, image, name)
20
19
  end
21
20
 
22
- def self.find_service
23
- Fog::Compute.new(
24
- :provider => 'Rackspace',
25
- :rackspace_api_key => Fog.credentials[:rackspace_api_key],
26
- :rackspace_username => Fog.credentials[:rackspace_username],
27
- :rackspace_auth_url => "lon.auth.api.rackspacecloud.com")
21
+ def self.find_service(short_region = 'usa')
22
+ Skewer::Rackspace::Service.new(short_region).build
28
23
  end
29
24
 
30
25
  def build(connection, flavor, image, name)
31
- path = File.expand_path '~/.ssh/id_rsa.pub'
32
- path = File.expand_path '~/.ssh/id_dsa.pub' if not File.exist? path
33
- raise "Couldn't find a public key" if not File.exist? path
34
- key = File.open(path, 'rb').read
26
+ key = find_key()
35
27
 
36
- images = Rackspace::Images.new
28
+ images = Skewer::Rackspace::Images.new
29
+ image_id = images.get_id(image)
37
30
  options = {
38
31
  :flavor_id => flavor,
39
- :image_id => images.get_id(image),
32
+ :image_id => image_id,
40
33
  :name => name,
41
34
  :public_key => key
42
35
  }
43
- connection.servers.bootstrap(options)
36
+ begin
37
+ connection.servers.bootstrap(options)
38
+ rescue Fog::Compute::Rackspace::NotFound
39
+ raise "Sorry, it looks like there's no such Image Id as #{image_id}"
40
+ end
41
+ end
42
+
43
+ def find_key
44
+ ssh_key = nil
45
+ ['id_rsa.pub', 'id_dsa.pub', "#{SkewerConfig.instance.get(:key_name)}.pub"].each do |key|
46
+ key_path = File.expand_path(File.join(ENV['HOME'],'.ssh', key))
47
+ if File.exist?(key_path)
48
+ ssh_key = key_path
49
+ break
50
+ end
51
+ end
52
+
53
+ raise "Couldn't find a public key" unless ssh_key
54
+ File.read(ssh_key)
44
55
  end
45
56
 
46
57
  def destroy
47
- @node.destroy if !@node.nil?
58
+ @node.destroy unless @node.nil?
48
59
  end
49
60
 
50
61
  def self.find_by_ip(ip_address, service = self.find_service())
@@ -0,0 +1,23 @@
1
+ module Skewer
2
+ module Rackspace
3
+ class Service
4
+ def initialize(short_region_name)
5
+ @region = region(short_region_name)
6
+ end
7
+
8
+ def region(short_region_name = nil)
9
+ short_region_name.to_s == 'lon' ? "lon.auth.api.rackspacecloud.com" :
10
+ "auth.api.rackspacecloud.com"
11
+ end
12
+
13
+ def build
14
+ Fog::Compute.new(
15
+ :provider => 'Rackspace',
16
+ :rackspace_api_key => Fog.credentials[:rackspace_api_key],
17
+ :rackspace_username => Fog.credentials[:rackspace_username],
18
+ :rackspace_auth_url => @region)
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -1,3 +1,3 @@
1
1
  module Skewer
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -37,7 +37,6 @@ module Skewer
37
37
  end
38
38
 
39
39
  def rsync(node)
40
- Skewer.logger.debug rsync_command(node)
41
40
  location = @util.get_location(node)
42
41
  Skewer.logger.debug "Copying code to #{location} ..."
43
42
  create_destination(node)
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
21
21
  s.add_development_dependency 'metric_fu'
22
22
  s.add_development_dependency 'rcov', '~> 1.0.0'
23
23
  s.add_development_dependency 'rspec'
24
- s.add_development_dependency 'vagrant', '~> 0.9.0'
24
+ s.add_development_dependency 'vagrant'
25
25
 
26
26
  s.files = `git ls-files`.split("\n").reject {|path| path =~ /\.gitignore$/ }
27
27
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -106,7 +106,7 @@ describe Skewer::Bootstrapper do
106
106
 
107
107
  it "should actually run the source step" do
108
108
  node = stub('node')
109
- node.should_receive(:username).at_least(3).times
109
+ node.should_receive(:username).at_least(2).times
110
110
  node.should_receive(:ssh)
111
111
  bootstrapper = Skewer::Bootstrapper.new(node, {:role => 'foo'})
112
112
  lambda {
@@ -3,22 +3,11 @@ require 'cuke'
3
3
 
4
4
  describe Skewer::Cuke do
5
5
  it "should only accept valid directories for construction" do
6
- lambda {
7
- Skewer::Cuke.new(nil)
8
- }.should raise_exception(RuntimeError, "you must provide a valid directory for features to be executed within")
9
-
10
- lambda {
11
- Skewer::Cuke.new(123)
12
- }.should raise_exception(RuntimeError, "you must provide a valid directory for features to be executed within")
13
6
 
14
7
  lambda {
15
8
  Skewer::Cuke.new('')
16
9
  }.should raise_exception(RuntimeError, "you must provide a valid directory for features to be executed within")
17
10
 
18
- lambda {
19
- Skewer::Cuke.new(123)
20
- }.should raise_exception(RuntimeError, "you must provide a valid directory for features to be executed within")
21
-
22
11
  lambda {
23
12
  Skewer::Cuke.new('./spec/dir_that_doenst_exist')
24
13
  }.should raise_exception(RuntimeError, "you must provide a valid directory for features to be executed within")
@@ -12,7 +12,7 @@ describe Skewer::Rackspace::Images do
12
12
  end
13
13
 
14
14
  it "should have a supported images hash associated with the hash" do
15
- @images.supported.class.should == Hash
15
+ @images.distributions.class.should == Hash
16
16
  end
17
17
 
18
18
  it "should provide a default image ID if bad input provided" do
@@ -21,10 +21,9 @@ describe Skewer::Rackspace::Node do
21
21
  end
22
22
 
23
23
  it "should have a delete method" do
24
-
25
24
  node = stub('node')
26
25
  node.should_receive(:delete).and_return(true)
27
26
  Skewer::Rackspace::Node.new(nil, nil, nil,node).node.delete.should == true
28
-
29
27
  end
28
+
30
29
  end
@@ -0,0 +1,19 @@
1
+ require "rspec"
2
+ require 'rackspace/service'
3
+
4
+ describe "Rackspace::Service" do
5
+
6
+ it "should return the london endpoint if you ask for lon" do
7
+ Skewer::Rackspace::Service.new(nil).region('lon').should == 'lon.auth.api.rackspacecloud.com'
8
+ Skewer::Rackspace::Service.new(nil).region(:lon).should == 'lon.auth.api.rackspacecloud.com'
9
+ end
10
+
11
+ it "should default to the US endpoint" do
12
+ Skewer::Rackspace::Service.new(nil).region().should == 'auth.api.rackspacecloud.com'
13
+ end
14
+
15
+ it "should even give you the US endpoint if something else leaks" do
16
+ Skewer::Rackspace::Service.new(nil).region('us-east-1').should == 'auth.api.rackspacecloud.com'
17
+ end
18
+
19
+ end
@@ -18,7 +18,7 @@ describe Skewer::Source do
18
18
  it "should make a parent directory to shut rsync up" do
19
19
  node = mock('node')
20
20
  node.should_receive(:dns_name).at_least(3).times.and_return('this.should.not.resolve')
21
- node.should_receive(:username).at_least(3).times.and_return('jimmy')
21
+ node.should_receive(:username).at_least(2).times.and_return('jimmy')
22
22
  node.should_receive(:ssh)
23
23
  source = Skewer::Source.new('/tmp/')
24
24
  lambda { source.rsync(node) }.should raise_exception RuntimeError
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: skewer
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Julian Simpson
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2012-03-23 00:00:00 Z
19
+ date: 2012-04-20 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  name: fog
@@ -112,14 +112,12 @@ dependencies:
112
112
  requirement: &id007 !ruby/object:Gem::Requirement
113
113
  none: false
114
114
  requirements:
115
- - - ~>
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
- hash: 59
117
+ hash: 3
118
118
  segments:
119
119
  - 0
120
- - 9
121
- - 0
122
- version: 0.9.0
120
+ version: "0"
123
121
  type: :development
124
122
  version_requirements: *id007
125
123
  description: Runs masterless puppet code on cloud machines
@@ -158,14 +156,20 @@ files:
158
156
  - features/step_definitions/cucumber_steps.rb
159
157
  - features/step_definitions/delete.rb
160
158
  - features/support/env.rb
159
+ - features/support/puppetcode/manifests/classes/apache.pp
161
160
  - features/support/puppetcode/manifests/classes/foobar.pp
162
161
  - features/support/puppetcode/manifests/classes/foobroken.pp
163
162
  - features/support/puppetcode/manifests/classes/role.pp
164
163
  - features/support/puppetcode/manifests/site.pp
164
+ - features/support/puppetcode/modules/apache/manifests/install.pp
165
165
  - features/support/puppetcode/modules/foo/manifests/bar.pp
166
166
  - features/support/puppetcode/modules/foo/manifests/broken.pp
167
167
  - features/support/puppetcode/modules/puppet/manifests/munge.pp
168
168
  - features/update.feature
169
+ - hook-test/Gemfile
170
+ - hook-test/features/default_web_page.feature
171
+ - hook-test/features/step_definitions/steps.rb
172
+ - hook-test/features/support/env.rb
169
173
  - lib/aws/node.rb
170
174
  - lib/aws/security_group.rb
171
175
  - lib/aws/service.rb
@@ -185,6 +189,7 @@ files:
185
189
  - lib/puppet_runtime_error.rb
186
190
  - lib/rackspace/images.rb
187
191
  - lib/rackspace/node.rb
192
+ - lib/rackspace/service.rb
188
193
  - lib/skewer.rb
189
194
  - lib/skewer/version.rb
190
195
  - lib/source.rb
@@ -207,6 +212,7 @@ files:
207
212
  - spec/puppet_node_spec.rb
208
213
  - spec/rackspace/images_spec.rb
209
214
  - spec/rackspace/node_spec.rb
215
+ - spec/rackspace/service_spec.rb
210
216
  - spec/source_spec.rb
211
217
  - spec/spec_helper.rb
212
218
  - spec/support/features/example.feature
@@ -244,7 +250,7 @@ rubyforge_project: skewer
244
250
  rubygems_version: 1.8.17
245
251
  signing_key:
246
252
  specification_version: 3
247
- summary: skewer-0.1.0
253
+ summary: skewer-0.1.1
248
254
  test_files:
249
255
  - features/aws.feature
250
256
  - features/bootstrapper.feature
@@ -257,10 +263,12 @@ test_files:
257
263
  - features/step_definitions/cucumber_steps.rb
258
264
  - features/step_definitions/delete.rb
259
265
  - features/support/env.rb
266
+ - features/support/puppetcode/manifests/classes/apache.pp
260
267
  - features/support/puppetcode/manifests/classes/foobar.pp
261
268
  - features/support/puppetcode/manifests/classes/foobroken.pp
262
269
  - features/support/puppetcode/manifests/classes/role.pp
263
270
  - features/support/puppetcode/manifests/site.pp
271
+ - features/support/puppetcode/modules/apache/manifests/install.pp
264
272
  - features/support/puppetcode/modules/foo/manifests/bar.pp
265
273
  - features/support/puppetcode/modules/foo/manifests/broken.pp
266
274
  - features/support/puppetcode/modules/puppet/manifests/munge.pp
@@ -281,6 +289,7 @@ test_files:
281
289
  - spec/puppet_node_spec.rb
282
290
  - spec/rackspace/images_spec.rb
283
291
  - spec/rackspace/node_spec.rb
292
+ - spec/rackspace/service_spec.rb
284
293
  - spec/source_spec.rb
285
294
  - spec/spec_helper.rb
286
295
  - spec/support/features/example.feature