skewer 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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