silver_spurs 2.0.0.rc1 → 2.0.0.rc3
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.
- checksums.yaml +15 -0
- data/.gitignore +1 -0
- data/.travis.yml +4 -1
- data/lib/silver_spurs/app.rb +33 -6
- data/lib/silver_spurs/asyncifier.rb +6 -1
- data/lib/silver_spurs/chef_interface.rb +16 -1
- data/lib/silver_spurs/client.rb +27 -5
- data/lib/silver_spurs/client/{chef_run.rb → chef_output.rb} +1 -1
- data/lib/silver_spurs/version.rb +1 -1
- data/spec/lib/silver_spurs/app_spec.rb +55 -0
- data/spec/lib/silver_spurs/chef_interface_spec.rb +112 -2
- data/spec/lib/silver_spurs/client/chef_run_spec.rb +4 -4
- data/spec/lib/silver_spurs/client_spec.rb +43 -3
- metadata +6 -32
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
Yjc1NDE4ZTRiM2U0OWZiZjIxYzFhMWYwZGQxYzg3ZjdjMmQ2NzE0NQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NWJhMjM4ZmMyMzNmMjMwOTViM2E2NjdkZGJjYjk0YzZiYjk1M2Y3ZQ==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MDExZmYwMzJiZjQ0Y2ZlZjRlNWJlZTA1NDg5YzgyOThjY2NhMGI3YzYyNGM0
|
10
|
+
YWE5YzMzZmRhMmMzM2UzY2QyODAwMDYzYzQ4YmNiMWFlODk0MDRkOWMwNzM3
|
11
|
+
YmY2YWVkY2NiY2Y3NDBlZGY1NzFhYTNkYzdjZjNmNjQ5NDI2NWE=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
YWJkMzQxMjQ4MzdiN2ZhMDI1OTM5NzFhOWJmN2JjNzMyNDM0YzcyNGZjNTNh
|
14
|
+
NmE4NWI2NDMyNWNlZDBkMmU1ZDg0NmRhMDc2ZTFjN2E0ZGZkMTJhNDI3Mzkw
|
15
|
+
OGExMDE2ZDM5OGRmNjc0ZmU0MmU3ZjU5ZWZhZjc4ZTFhZTE4Y2I=
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -3,4 +3,7 @@ rvm:
|
|
3
3
|
- 2.0.0
|
4
4
|
- 1.9.3
|
5
5
|
- 1.9.2
|
6
|
-
- ruby-head
|
6
|
+
- ruby-head
|
7
|
+
notifications:
|
8
|
+
campfire:
|
9
|
+
secure: "e/rh1fwGlXvclgG7ql+WEHVm1TwdbJ/iSpbjzYvdvud9ZtWPHEI8/qvUMeqR\n4PZDqLfCt9N2Eliky4VGo49yu4OGYEy9bY0I/oRLi8DQw4eFohwTII14oXM2\nDh1qT/5p1DeIfm0BgHwbS0YwsbaIWpYoYdh3C93FNwsNXI0lMoQ="
|
data/lib/silver_spurs/app.rb
CHANGED
@@ -40,10 +40,7 @@ module SilverSpurs
|
|
40
40
|
end
|
41
41
|
|
42
42
|
put '/bootstrap/:ip' do
|
43
|
-
|
44
|
-
unless required_vars? params, required_params
|
45
|
-
return 406, {:required_params => required_params}.to_json
|
46
|
-
end
|
43
|
+
ensure_required_params :node_name
|
47
44
|
|
48
45
|
node_name = params[:node_name].strip
|
49
46
|
return 406, {:bad_params => :node_name}.to_json unless node_name =~ settings.node_name_filter
|
@@ -107,8 +104,38 @@ module SilverSpurs
|
|
107
104
|
end
|
108
105
|
end
|
109
106
|
|
110
|
-
|
111
|
-
|
107
|
+
# JSON endpoint - set Content-Type request header to 'application/json'
|
108
|
+
# This should be PUT'd to with a JSON payload that looks like:
|
109
|
+
# {
|
110
|
+
# "attributes": {
|
111
|
+
# "somenew.node.attribute": "bananas",
|
112
|
+
# "another.node.attribute": true
|
113
|
+
# }
|
114
|
+
# }
|
115
|
+
put '/attributes/:ip' do
|
116
|
+
ensure_required_params :attributes
|
117
|
+
|
118
|
+
chef = ChefInterface.new(settings.chef_config)
|
119
|
+
begin
|
120
|
+
chef.update_node_attributes(params[:ip], params[:attributes])
|
121
|
+
rescue SilverSpurs::NodeNotFoundException
|
122
|
+
status 404
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def ensure_required_params(*required_params)
|
127
|
+
merge_json_body_params
|
128
|
+
all_present = required_params.none? { |required_param| params[required_param].nil? }
|
129
|
+
unless all_present
|
130
|
+
halt 406, {:required_params => required_params}.to_json
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def merge_json_body_params
|
135
|
+
if request.content_type.include?('application/json') and request.content_length.to_i > 0
|
136
|
+
request.body.rewind
|
137
|
+
params.merge! JSON.parse(request.body.read.strip)
|
138
|
+
end
|
112
139
|
end
|
113
140
|
|
114
141
|
end
|
@@ -38,7 +38,12 @@ module SilverSpurs
|
|
38
38
|
return false unless File.exists? pid_file_path(process_name)
|
39
39
|
|
40
40
|
pid = File.read(pid_file_path(process_name)).to_i
|
41
|
-
|
41
|
+
|
42
|
+
ps_handle = IO.popen("ps -o command -p #{pid}")
|
43
|
+
process_is_running = ps_handle.read.split("\n").count == 2
|
44
|
+
ps_handle.close
|
45
|
+
|
46
|
+
process_is_running
|
42
47
|
end
|
43
48
|
|
44
49
|
def success?(process_name)
|
@@ -14,12 +14,20 @@ module SilverSpurs
|
|
14
14
|
node = find_node node_name
|
15
15
|
if run_list.size > 0
|
16
16
|
command = "sudo chef-client -o '#{run_list.join(',')}'"
|
17
|
-
ridley.node.execute_command node
|
17
|
+
ridley.node.execute_command find_hostname(node_name, node), command
|
18
18
|
else
|
19
19
|
node.chef_run
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
+
def update_node_attributes(node_name, attributes)
|
24
|
+
node = find_node node_name
|
25
|
+
attributes.each do |attribute_name, value|
|
26
|
+
node.set_chef_attribute attribute_name, value
|
27
|
+
end
|
28
|
+
node.save
|
29
|
+
end
|
30
|
+
|
23
31
|
private
|
24
32
|
|
25
33
|
def ridley
|
@@ -32,5 +40,12 @@ module SilverSpurs
|
|
32
40
|
node
|
33
41
|
end
|
34
42
|
|
43
|
+
# Waterfall through the options, use the node name as a last resort
|
44
|
+
def find_hostname(node_name, node)
|
45
|
+
return node.public_hostname if node.public_hostname
|
46
|
+
return node.public_ipv4 if node.public_ipv4
|
47
|
+
return node_name
|
48
|
+
end
|
49
|
+
|
35
50
|
end
|
36
51
|
end
|
data/lib/silver_spurs/client.rb
CHANGED
@@ -4,7 +4,7 @@ require 'json'
|
|
4
4
|
require 'silver_spurs/knife_interface'
|
5
5
|
require 'silver_spurs/client/exceptions'
|
6
6
|
require 'silver_spurs/client/bootstrap_run'
|
7
|
-
require 'silver_spurs/client/
|
7
|
+
require 'silver_spurs/client/chef_output'
|
8
8
|
|
9
9
|
module SilverSpurs
|
10
10
|
class Client
|
@@ -18,7 +18,9 @@ module SilverSpurs
|
|
18
18
|
payload = parameterize_hash params
|
19
19
|
headers = {:accept => :json, :content_type=> 'application/x-www-form-urlencoded'}
|
20
20
|
|
21
|
-
response =
|
21
|
+
response = gracefully_handle_rest_call do
|
22
|
+
spur_host["bootstrap/#{ip}"].put(payload, headers, &method(:dont_redirect_for_303))
|
23
|
+
end
|
22
24
|
|
23
25
|
throw ClientException.new("unexpected response", response) unless response.code == 303
|
24
26
|
|
@@ -26,12 +28,32 @@ module SilverSpurs
|
|
26
28
|
end
|
27
29
|
|
28
30
|
def start_chef_run(host_name, runlist = [])
|
29
|
-
response =
|
30
|
-
|
31
|
-
|
31
|
+
response = gracefully_handle_rest_call do
|
32
|
+
spur_host["kick/#{host_name}"].post :params => { :run => runlist }
|
33
|
+
end
|
34
|
+
ChefOutput.new JSON.parse(response)
|
35
|
+
end
|
36
|
+
|
37
|
+
def set_node_attributes(host_name, attributes = {})
|
38
|
+
headers = { :accept => :json, :content_type => 'application/json' }
|
39
|
+
gracefully_handle_rest_call do
|
40
|
+
spur_host["attributes/#{host_name}"].put({ :attributes => attributes }.to_json, headers)
|
41
|
+
end
|
32
42
|
end
|
33
43
|
|
34
44
|
private
|
45
|
+
|
46
|
+
def gracefully_handle_rest_call(&rest_call)
|
47
|
+
begin
|
48
|
+
response = rest_call.call
|
49
|
+
rescue RestClient::ResourceNotFound
|
50
|
+
raise ClientException.new("the host name was not found", response)
|
51
|
+
rescue Exception
|
52
|
+
raise ClientException.new("an unanticipated error occured", response)
|
53
|
+
end
|
54
|
+
|
55
|
+
response
|
56
|
+
end
|
35
57
|
|
36
58
|
def parameterize_hash(param_hash)
|
37
59
|
uri = Addressable::URI.new
|
data/lib/silver_spurs/version.rb
CHANGED
@@ -292,6 +292,61 @@ describe SilverSpurs::App do
|
|
292
292
|
end
|
293
293
|
|
294
294
|
end
|
295
|
+
|
296
|
+
describe '/attributes/:ip' do
|
297
|
+
before :each do
|
298
|
+
@chef = double('chef')
|
299
|
+
SilverSpurs::ChefInterface.stub(:new).and_return @chef
|
300
|
+
end
|
301
|
+
|
302
|
+
context 'when attributes are supplied' do
|
303
|
+
|
304
|
+
before :each do
|
305
|
+
@attributes = {
|
306
|
+
:attributes => {
|
307
|
+
:thing => 'sloth',
|
308
|
+
:things => 'more_sloths'
|
309
|
+
}
|
310
|
+
}.to_json
|
311
|
+
|
312
|
+
header 'Content-Type', 'application/json'
|
313
|
+
end
|
314
|
+
|
315
|
+
it 'updates the attributes on the target node' do
|
316
|
+
@chef.should_receive(:update_node_attributes)
|
317
|
+
|
318
|
+
put '/attributes/node', @attributes
|
319
|
+
last_response.status.should eq 200
|
320
|
+
end
|
321
|
+
|
322
|
+
context 'and the node does not exist' do
|
323
|
+
it 'should return a 404' do
|
324
|
+
@chef.stub(:update_node_attributes).and_raise(SilverSpurs::NodeNotFoundException.new)
|
325
|
+
|
326
|
+
put '/attributes/node', @attributes
|
327
|
+
last_response.status.should eq 404
|
328
|
+
end
|
329
|
+
end
|
330
|
+
|
331
|
+
end
|
332
|
+
|
333
|
+
context 'when attributes are not supplied' do
|
334
|
+
|
335
|
+
it 'returns a 406 since attributes (required) were not present' do
|
336
|
+
put '/attributes/node'
|
337
|
+
last_response.status.should eq 406
|
338
|
+
end
|
339
|
+
|
340
|
+
context 'and the node does not exist' do
|
341
|
+
it 'should still return a 406 due to the missing attributes' do
|
342
|
+
put '/attributes/node'
|
343
|
+
last_response.status.should eq 406
|
344
|
+
end
|
345
|
+
end
|
346
|
+
|
347
|
+
end
|
348
|
+
|
349
|
+
end
|
295
350
|
|
296
351
|
end
|
297
352
|
|
@@ -37,7 +37,7 @@ describe SilverSpurs::ChefInterface do
|
|
37
37
|
end
|
38
38
|
|
39
39
|
it 'should pass in the host name from the node object' do
|
40
|
-
@
|
40
|
+
@chef_i.should_receive(:find_hostname).and_return 'hostname'
|
41
41
|
@node_resource.should_receive(:execute_command).with('hostname', anything)
|
42
42
|
end
|
43
43
|
|
@@ -131,5 +131,115 @@ describe SilverSpurs::ChefInterface do
|
|
131
131
|
end
|
132
132
|
|
133
133
|
end
|
134
|
-
|
134
|
+
|
135
|
+
describe :find_hostname do
|
136
|
+
before :each do
|
137
|
+
@chef_i = SilverSpurs::ChefInterface.new({})
|
138
|
+
@node_resource = double('node_resource')
|
139
|
+
@node_name = 'node_name'
|
140
|
+
@hostname = 'hostname.domain.tld'
|
141
|
+
@ipv4 = '1.1.1.1'
|
142
|
+
end
|
143
|
+
|
144
|
+
def call_find_hostname(node_name, node)
|
145
|
+
@chef_i.send :find_hostname, node_name, node
|
146
|
+
end
|
147
|
+
|
148
|
+
context 'when node knows about public_hostname' do
|
149
|
+
before :each do
|
150
|
+
@node_resource.stub(:public_hostname).and_return @hostname
|
151
|
+
end
|
152
|
+
|
153
|
+
context 'and also public_ipv4' do
|
154
|
+
before :each do
|
155
|
+
@node_resource.stub(:public_ipv4).and_return @ipv4
|
156
|
+
end
|
157
|
+
|
158
|
+
it 'returns the public hostname' do
|
159
|
+
call_find_hostname(@node_name, @node_resource).should eq @hostname
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
context 'but not public_ipv4' do
|
164
|
+
before :each do
|
165
|
+
@node_resource.stub(:public_ipv4).and_return nil
|
166
|
+
end
|
167
|
+
|
168
|
+
it 'returns the public hostname' do
|
169
|
+
call_find_hostname(@node_name, @node_resource).should eq @hostname
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
context 'when node does not know about public_hostname' do
|
175
|
+
before :each do
|
176
|
+
@node_resource.stub(:public_hostname).and_return nil
|
177
|
+
end
|
178
|
+
|
179
|
+
context 'but does know public_ipv4' do
|
180
|
+
before :each do
|
181
|
+
@node_resource.stub(:public_ipv4).and_return @ipv4
|
182
|
+
end
|
183
|
+
|
184
|
+
it 'returns the public_ipv4' do
|
185
|
+
call_find_hostname(@node_name, @node_resource).should eq @ipv4
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
context 'and is also ignorant of the public_ipv4' do
|
190
|
+
before :each do
|
191
|
+
@node_resource.stub(:public_ipv4).and_return nil
|
192
|
+
end
|
193
|
+
|
194
|
+
it 'returns the node name' do
|
195
|
+
call_find_hostname(@node_name, @node_resource).should eq @node_name
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
end
|
201
|
+
|
202
|
+
describe :update_node_attributes do
|
203
|
+
|
204
|
+
before :each do
|
205
|
+
@chef_i = SilverSpurs::ChefInterface.new({})
|
206
|
+
@node_obj = double('node_obj')
|
207
|
+
end
|
208
|
+
|
209
|
+
context 'when the target node is found' do
|
210
|
+
it 'finds a node then updates its attributes' do
|
211
|
+
@chef_i.should_receive(:find_node).and_return @node_obj
|
212
|
+
@node_obj.should_receive(:set_chef_attribute).with(kind_of(String), kind_of(String))
|
213
|
+
@node_obj.should_receive(:save)
|
214
|
+
|
215
|
+
@chef_i.update_node_attributes 'node', { 'app.program.config' => 'bananas' }
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
context 'when the target node is not found' do
|
220
|
+
before :each do
|
221
|
+
@ridley = double('ridley')
|
222
|
+
Ridley.stub(:new).and_return @ridley
|
223
|
+
@node_resource = double('node_res')
|
224
|
+
@ridley.stub(:node).and_return @node_resource
|
225
|
+
@node_resource.stub(:find).and_return nil
|
226
|
+
end
|
227
|
+
|
228
|
+
it 'throws an exception when trying to find the target node' do
|
229
|
+
expect {
|
230
|
+
@chef_i.update_node_attributes('node', { 'app.program.config' => 'bananas' })
|
231
|
+
}.to raise_exception SilverSpurs::NodeNotFoundException
|
232
|
+
end
|
233
|
+
|
234
|
+
it 'does not try to set or save any node attributes' do
|
235
|
+
@node_obj.should_not_receive(:set_chef_attribute).with any_args
|
236
|
+
@node_obj.should_not_receive(:save).with any_args
|
237
|
+
|
238
|
+
expect {
|
239
|
+
@chef_i.update_node_attributes('node', { 'app.program.config' => 'bananas' })
|
240
|
+
}.to raise_exception SilverSpurs::NodeNotFoundException
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
end
|
135
245
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require 'silver_spurs/client/
|
1
|
+
require 'silver_spurs/client/chef_output'
|
2
2
|
|
3
|
-
describe SilverSpurs::
|
3
|
+
describe SilverSpurs::ChefOutput do
|
4
4
|
describe :convert_status do
|
5
5
|
before :each do
|
6
|
-
@chef_run = SilverSpurs::
|
6
|
+
@chef_run = SilverSpurs::ChefOutput.new(["ok",{'stdout' => '', 'stderr' => '', 'exit_code' => 0, 'exit_status' => 0}])
|
7
7
|
end
|
8
8
|
|
9
9
|
def call_convert_status(response)
|
@@ -34,7 +34,7 @@ describe SilverSpurs::ChefRun do
|
|
34
34
|
|
35
35
|
describe :prettify_log do
|
36
36
|
before :each do
|
37
|
-
@chef_run = SilverSpurs::
|
37
|
+
@chef_run = SilverSpurs::ChefOutput.new(["ok",{'stdout' => '', 'stderr' => '', 'exit_code' => 0, 'exit_status' => 0}])
|
38
38
|
end
|
39
39
|
|
40
40
|
def call_prettify_log(response)
|
@@ -118,7 +118,7 @@ describe SilverSpurs::Client do
|
|
118
118
|
@client.stub(:spur_host).and_return @resource
|
119
119
|
end
|
120
120
|
|
121
|
-
it 'returns a
|
121
|
+
it 'returns a ChefOutput object' do
|
122
122
|
response_payload = ["ok", {'stderr' => '', 'stdout' => '', 'exit_code' => 0, 'exit_status' => 0}]
|
123
123
|
response = double('response')
|
124
124
|
response.stub(:to_str).and_return response_payload.to_json
|
@@ -126,11 +126,51 @@ describe SilverSpurs::Client do
|
|
126
126
|
|
127
127
|
@resource.stub(:post).and_return response
|
128
128
|
|
129
|
-
SilverSpurs::
|
129
|
+
SilverSpurs::ChefOutput.should_receive(:new).with(response_payload)
|
130
130
|
|
131
131
|
@client.start_chef_run('hostname')
|
132
132
|
end
|
133
133
|
|
134
134
|
end
|
135
|
-
|
135
|
+
|
136
|
+
describe :set_node_attributes do
|
137
|
+
before :each do
|
138
|
+
@client = SilverSpurs::Client.new 'http://localhost'
|
139
|
+
@resource = double('rest-resource')
|
140
|
+
@resource.stub(:[]).and_return @resource
|
141
|
+
@client.stub(:spur_host).and_return @resource
|
142
|
+
end
|
143
|
+
|
144
|
+
it 'returns a String indicating success' do
|
145
|
+
response = 'true'
|
146
|
+
response.stub(:to_str).and_return 'true'
|
147
|
+
response.stub(:code).and_return 200
|
148
|
+
@resource.stub(:put).and_return response
|
149
|
+
|
150
|
+
@client.set_node_attributes('hostname', { 'this.attribute.right.here' => true })
|
151
|
+
.should be_a String
|
152
|
+
end
|
153
|
+
|
154
|
+
it 'raises an exception if a 404 is encountered' do
|
155
|
+
response = 'explosions'
|
156
|
+
response.stub(:to_str).and_return 'explosions'
|
157
|
+
response.stub(:code).and_return 404
|
158
|
+
@resource.stub(:put).and_raise RestClient::ResourceNotFound
|
159
|
+
|
160
|
+
expect {
|
161
|
+
@client.set_node_attributes('hostname', { 'this.attribute.right.here' => true })
|
162
|
+
}.to raise_exception SilverSpurs::ClientException
|
163
|
+
end
|
164
|
+
|
165
|
+
it 'raises a rather generic ClientException when any exception is caught' do
|
166
|
+
response = 'explosions'
|
167
|
+
response.stub(:to_str).and_return 'explosions'
|
168
|
+
@resource.stub(:put).and_raise 'uh ohes!'
|
169
|
+
|
170
|
+
expect {
|
171
|
+
@client.set_node_attributes('hostname', { 'this.attribute.right.here' => true })
|
172
|
+
}.to raise_exception SilverSpurs::ClientException
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
136
176
|
end
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: silver_spurs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.
|
5
|
-
prerelease: 6
|
4
|
+
version: 2.0.0.rc3
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Christian Blades
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-06-07 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: sinatra
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ! '>='
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ! '>='
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,7 +27,6 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: chef
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ! '>='
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ! '>='
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -46,7 +41,6 @@ dependencies:
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rest-client
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ~>
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -62,7 +55,6 @@ dependencies:
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: addressable
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ~>
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :runtime
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ~>
|
76
67
|
- !ruby/object:Gem::Version
|
@@ -78,7 +69,6 @@ dependencies:
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: ridley
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
73
|
- - ~>
|
84
74
|
- !ruby/object:Gem::Version
|
@@ -86,7 +76,6 @@ dependencies:
|
|
86
76
|
type: :runtime
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
80
|
- - ~>
|
92
81
|
- !ruby/object:Gem::Version
|
@@ -94,7 +83,6 @@ dependencies:
|
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: guard
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
87
|
- - ! '>='
|
100
88
|
- !ruby/object:Gem::Version
|
@@ -102,7 +90,6 @@ dependencies:
|
|
102
90
|
type: :development
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
94
|
- - ! '>='
|
108
95
|
- !ruby/object:Gem::Version
|
@@ -110,7 +97,6 @@ dependencies:
|
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
98
|
name: guard-rspec
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
100
|
requirements:
|
115
101
|
- - ! '>='
|
116
102
|
- !ruby/object:Gem::Version
|
@@ -118,7 +104,6 @@ dependencies:
|
|
118
104
|
type: :development
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
107
|
requirements:
|
123
108
|
- - ! '>='
|
124
109
|
- !ruby/object:Gem::Version
|
@@ -126,7 +111,6 @@ dependencies:
|
|
126
111
|
- !ruby/object:Gem::Dependency
|
127
112
|
name: simplecov
|
128
113
|
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
114
|
requirements:
|
131
115
|
- - ! '>='
|
132
116
|
- !ruby/object:Gem::Version
|
@@ -134,7 +118,6 @@ dependencies:
|
|
134
118
|
type: :development
|
135
119
|
prerelease: false
|
136
120
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
121
|
requirements:
|
139
122
|
- - ! '>='
|
140
123
|
- !ruby/object:Gem::Version
|
@@ -142,7 +125,6 @@ dependencies:
|
|
142
125
|
- !ruby/object:Gem::Dependency
|
143
126
|
name: growl
|
144
127
|
requirement: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
128
|
requirements:
|
147
129
|
- - ! '>='
|
148
130
|
- !ruby/object:Gem::Version
|
@@ -150,7 +132,6 @@ dependencies:
|
|
150
132
|
type: :development
|
151
133
|
prerelease: false
|
152
134
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
-
none: false
|
154
135
|
requirements:
|
155
136
|
- - ! '>='
|
156
137
|
- !ruby/object:Gem::Version
|
@@ -158,7 +139,6 @@ dependencies:
|
|
158
139
|
- !ruby/object:Gem::Dependency
|
159
140
|
name: rb-fsevent
|
160
141
|
requirement: !ruby/object:Gem::Requirement
|
161
|
-
none: false
|
162
142
|
requirements:
|
163
143
|
- - ~>
|
164
144
|
- !ruby/object:Gem::Version
|
@@ -166,7 +146,6 @@ dependencies:
|
|
166
146
|
type: :development
|
167
147
|
prerelease: false
|
168
148
|
version_requirements: !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
149
|
requirements:
|
171
150
|
- - ~>
|
172
151
|
- !ruby/object:Gem::Version
|
@@ -174,7 +153,6 @@ dependencies:
|
|
174
153
|
- !ruby/object:Gem::Dependency
|
175
154
|
name: rack-test
|
176
155
|
requirement: !ruby/object:Gem::Requirement
|
177
|
-
none: false
|
178
156
|
requirements:
|
179
157
|
- - ! '>='
|
180
158
|
- !ruby/object:Gem::Version
|
@@ -182,7 +160,6 @@ dependencies:
|
|
182
160
|
type: :development
|
183
161
|
prerelease: false
|
184
162
|
version_requirements: !ruby/object:Gem::Requirement
|
185
|
-
none: false
|
186
163
|
requirements:
|
187
164
|
- - ! '>='
|
188
165
|
- !ruby/object:Gem::Version
|
@@ -190,7 +167,6 @@ dependencies:
|
|
190
167
|
- !ruby/object:Gem::Dependency
|
191
168
|
name: rake
|
192
169
|
requirement: !ruby/object:Gem::Requirement
|
193
|
-
none: false
|
194
170
|
requirements:
|
195
171
|
- - ! '>='
|
196
172
|
- !ruby/object:Gem::Version
|
@@ -198,7 +174,6 @@ dependencies:
|
|
198
174
|
type: :development
|
199
175
|
prerelease: false
|
200
176
|
version_requirements: !ruby/object:Gem::Requirement
|
201
|
-
none: false
|
202
177
|
requirements:
|
203
178
|
- - ! '>='
|
204
179
|
- !ruby/object:Gem::Version
|
@@ -227,7 +202,7 @@ files:
|
|
227
202
|
- lib/silver_spurs/chef_interface.rb
|
228
203
|
- lib/silver_spurs/client.rb
|
229
204
|
- lib/silver_spurs/client/bootstrap_run.rb
|
230
|
-
- lib/silver_spurs/client/
|
205
|
+
- lib/silver_spurs/client/chef_output.rb
|
231
206
|
- lib/silver_spurs/client/exceptions.rb
|
232
207
|
- lib/silver_spurs/knife_interface.rb
|
233
208
|
- lib/silver_spurs/version.rb
|
@@ -242,27 +217,26 @@ files:
|
|
242
217
|
- spec/spec_helper.rb
|
243
218
|
homepage: http://github.com/christian-blades-cb/silver_spurs
|
244
219
|
licenses: []
|
220
|
+
metadata: {}
|
245
221
|
post_install_message:
|
246
222
|
rdoc_options: []
|
247
223
|
require_paths:
|
248
224
|
- lib
|
249
225
|
required_ruby_version: !ruby/object:Gem::Requirement
|
250
|
-
none: false
|
251
226
|
requirements:
|
252
227
|
- - ! '>='
|
253
228
|
- !ruby/object:Gem::Version
|
254
229
|
version: '0'
|
255
230
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
256
|
-
none: false
|
257
231
|
requirements:
|
258
232
|
- - ! '>'
|
259
233
|
- !ruby/object:Gem::Version
|
260
234
|
version: 1.3.1
|
261
235
|
requirements: []
|
262
236
|
rubyforge_project:
|
263
|
-
rubygems_version:
|
237
|
+
rubygems_version: 2.0.3
|
264
238
|
signing_key:
|
265
|
-
specification_version:
|
239
|
+
specification_version: 4
|
266
240
|
summary: RESTful service to kick off chef bootstraps
|
267
241
|
test_files:
|
268
242
|
- spec/lib/silver_spurs/app_spec.rb
|