motherbrain 1.1.1 → 1.1.2
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 +4 -4
- data/CHANGELOG.md +7 -0
- data/LICENSE +1 -1
- data/lib/mb/api/helpers.rb +1 -1
- data/lib/mb/api/v1/plugins_endpoint.rb +1 -1
- data/lib/mb/api/validators/sem_ver.rb +2 -2
- data/lib/mb/bootstrap/template.rb +1 -3
- data/lib/mb/cookbook_metadata.rb +3 -3
- data/lib/mb/mixin/attribute_setting.rb +2 -2
- data/lib/mb/node_querier.rb +67 -31
- data/lib/mb/plugin_manager.rb +5 -5
- data/lib/mb/version.rb +1 -1
- data/lib/motherbrain.rb +1 -0
- data/man/man_helper.rb +1 -1
- data/motherbrain.gemspec +7 -6
- data/spec/support/actor_mocking.rb +1 -1
- data/spec/unit/mb/cookbook_metadata_spec.rb +2 -2
- metadata +45 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 64cea7b12adcd4f120a1b7f0a580398d5544fbe1
|
4
|
+
data.tar.gz: a176fe1c0d298ae58ce95091cd310009cec02578
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c6117c6036b918db282d96af96c64a83d9142184ca213ae894b81390cc7c0d961bd397fb8cf2832498c6122fa24441b0b95d5c1a6d7ce17d6de87f9aa017f669
|
7
|
+
data.tar.gz: 12e87e68c1fab167236d1c299b5d82923a9e08bebfd9ee488d9b0a7eb8e0332ca43c33516c25ea9a654060e9e19f2882811d2bcc6f5b31e7e7e4a94eb2490d58
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
# 1.1.2
|
2
|
+
|
3
|
+
* [#691](https://github.com/RiotGames/motherbrain/pull/691) Add some extra error handling to NodeQuerier in order to prevent it from crashing
|
4
|
+
* [#692](https://github.com/RiotGames/motherbrain/pull/692) Fix a bug preventing Job reporting from causing the unlock to fail during enabling/disabling
|
5
|
+
* [#690](https://github.com/RiotGames/motherbrain/pull/690) More updates to gemspec to get bundler working appropriately
|
6
|
+
* [#689](https://github.com/RiotGames/motherbrain/pull/689) Update to newer versions of berkshelf, ridley, celluloid, and others
|
7
|
+
|
1
8
|
# 1.1.1
|
2
9
|
|
3
10
|
* Lock tighter on http gem
|
data/LICENSE
CHANGED
data/lib/mb/api/helpers.rb
CHANGED
@@ -8,7 +8,7 @@ module MotherBrain::API
|
|
8
8
|
rack_response(ex.to_json, 404, "Content-type" => "application/json")
|
9
9
|
end
|
10
10
|
|
11
|
-
rescue_from
|
11
|
+
rescue_from Semverse::InvalidVersionFormat do |ex|
|
12
12
|
rack_response(ex.to_json, 400, "Content-type" => "application/json")
|
13
13
|
end
|
14
14
|
|
@@ -9,9 +9,9 @@ module MotherBrain::API::Validators
|
|
9
9
|
return nil if params[attr_name].nil?
|
10
10
|
|
11
11
|
ver_string = params[attr_name].gsub('_', '.')
|
12
|
-
|
12
|
+
Semverse::Version.split(ver_string)
|
13
13
|
params[attr_name] = ver_string
|
14
|
-
rescue
|
14
|
+
rescue Semverse::InvalidVersionFormat => ex
|
15
15
|
throw :error, status: 400, message: ex.to_s
|
16
16
|
end
|
17
17
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'faraday_middleware/response/follow_redirects'
|
2
|
-
|
3
1
|
module MotherBrain
|
4
2
|
module Bootstrap
|
5
3
|
class Template
|
@@ -24,7 +22,7 @@ module MotherBrain
|
|
24
22
|
uri = URI.parse(filename_or_url)
|
25
23
|
begin
|
26
24
|
conn = Faraday.new do |b|
|
27
|
-
b.use
|
25
|
+
b.use Ridley::Middleware::FollowRedirects
|
28
26
|
b.adapter :net_http
|
29
27
|
end
|
30
28
|
response = conn.get filename_or_url
|
data/lib/mb/cookbook_metadata.rb
CHANGED
@@ -58,11 +58,11 @@ module MotherBrain
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
-
# Override the default version with [
|
61
|
+
# Override the default version with [Semverse::Version]
|
62
62
|
#
|
63
|
-
# @return [
|
63
|
+
# @return [Semverse::Version]
|
64
64
|
def version(data = nil)
|
65
|
-
@version = data.nil? ? @version :
|
65
|
+
@version = data.nil? ? @version : Semverse::Version.new(data)
|
66
66
|
end
|
67
67
|
|
68
68
|
private
|
@@ -233,11 +233,11 @@ module MotherBrain
|
|
233
233
|
# @return [Hash]
|
234
234
|
def expand_constraints(cookbook_versions)
|
235
235
|
expanded = cookbook_versions.collect do |name, constraint|
|
236
|
-
[name,
|
236
|
+
[name, Semverse::Constraint.new(constraint).to_s]
|
237
237
|
end
|
238
238
|
|
239
239
|
Hash[expanded]
|
240
|
-
rescue
|
240
|
+
rescue Semverse::InvalidConstraintFormat => ex
|
241
241
|
raise ArgumentError, ex
|
242
242
|
end
|
243
243
|
|
data/lib/mb/node_querier.rb
CHANGED
@@ -125,17 +125,17 @@ module MotherBrain
|
|
125
125
|
end
|
126
126
|
|
127
127
|
response = if options[:override_recipes]
|
128
|
-
|
128
|
+
override_recipes = options[:override_recipes]
|
129
129
|
|
130
|
-
|
131
|
-
|
132
|
-
|
130
|
+
cmd_recipe_syntax = override_recipes.join(',') { |recipe| "recipe[#{recipe}]" }
|
131
|
+
log.info { "Running Chef client with override runlist '#{cmd_recipe_syntax}' on: #{host}" }
|
132
|
+
chef_run_response = safe_remote(host) { chef_connection.node.execute_command(host, "chef-client --override-runlist #{cmd_recipe_syntax}") }
|
133
133
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
134
|
+
chef_run_response
|
135
|
+
else
|
136
|
+
log.info { "Running Chef client on: #{host}" }
|
137
|
+
safe_remote(host) { chef_connection.node.chef_run(host) }
|
138
|
+
end
|
139
139
|
|
140
140
|
if response.error?
|
141
141
|
log.info { "Failed Chef client run on: #{host}" }
|
@@ -181,7 +181,7 @@ module MotherBrain
|
|
181
181
|
abort RemoteCommandError.new("cannot put_secret without a hostname or ipaddress")
|
182
182
|
end
|
183
183
|
|
184
|
-
response = chef_connection.node.put_secret(host)
|
184
|
+
response = safe_remote(host) { chef_connection.node.put_secret(host) }
|
185
185
|
|
186
186
|
if response.error?
|
187
187
|
log.info { "Failed to put secret file on: #{host}" }
|
@@ -205,7 +205,7 @@ module MotherBrain
|
|
205
205
|
abort RemoteCommandError.new("cannot execute command without a hostname or ipaddress")
|
206
206
|
end
|
207
207
|
|
208
|
-
response = chef_connection.node.execute_command(host, command)
|
208
|
+
response = safe_remote(host) { chef_connection.node.execute_command(host, command) }
|
209
209
|
|
210
210
|
if response.error?
|
211
211
|
log.info { "Failed to execute command on: #{host}" }
|
@@ -250,7 +250,7 @@ module MotherBrain
|
|
250
250
|
if (client_id = node_name(host)).nil?
|
251
251
|
return nil
|
252
252
|
end
|
253
|
-
chef_connection.client.find(client_id).try(:name)
|
253
|
+
safe_remote(host) { chef_connection.client.find(client_id).try(:name) }
|
254
254
|
end
|
255
255
|
|
256
256
|
# Asynchronously remove Chef from a target host and purge it's client and node object from the
|
@@ -329,7 +329,12 @@ module MotherBrain
|
|
329
329
|
|
330
330
|
job.set_status("Cleaning up the host's file system.")
|
331
331
|
futures << chef_connection.node.future(:uninstall_chef, host, options.slice(:skip_chef))
|
332
|
-
|
332
|
+
|
333
|
+
begin
|
334
|
+
safe_remote(host) { futures.map(&:value) }
|
335
|
+
rescue RemoteCommandError => e
|
336
|
+
job.report_failure
|
337
|
+
end
|
333
338
|
|
334
339
|
job.report_success
|
335
340
|
ensure
|
@@ -358,9 +363,11 @@ module MotherBrain
|
|
358
363
|
end
|
359
364
|
|
360
365
|
job.set_status("Host registered as #{node_name}.")
|
361
|
-
|
366
|
+
|
367
|
+
node = fetch_node(job, node_name)
|
362
368
|
|
363
369
|
required_run_list = []
|
370
|
+
success = false
|
364
371
|
chef_synchronize(chef_environment: node.chef_environment, force: options[:force], job: job) do
|
365
372
|
if node.run_list.include?(DISABLED_RUN_LIST_ENTRY)
|
366
373
|
required_run_list = on_dynamic_services(job, node) do |dynamic_service, plugin|
|
@@ -377,14 +384,18 @@ module MotherBrain
|
|
377
384
|
node.run_list = node.run_list.reject { |r| r == DISABLED_RUN_LIST_ENTRY }
|
378
385
|
|
379
386
|
if node.save
|
380
|
-
job.
|
387
|
+
job.set_status "#{node.name} enabled successfully."
|
388
|
+
success = true
|
381
389
|
else
|
382
|
-
job.
|
390
|
+
job.set_status "#{node.name} did not save! Disabled run_list entry was unable to be removed to the node."
|
383
391
|
end
|
384
392
|
else
|
385
|
-
job.
|
393
|
+
job.set_status("#{node.name} is not disabled. No need to enable.")
|
394
|
+
success = true
|
386
395
|
end
|
387
396
|
end
|
397
|
+
|
398
|
+
job.report_boolean(success)
|
388
399
|
rescue MotherBrain::ResourceLocked => e
|
389
400
|
job.report_failure e.message
|
390
401
|
ensure
|
@@ -411,11 +422,15 @@ module MotherBrain
|
|
411
422
|
"node name may not be available. #{host} was not disabled!")
|
412
423
|
end
|
413
424
|
job.set_status("Host registered as #{node_name}.")
|
414
|
-
|
425
|
+
|
426
|
+
node = fetch_node(job, node_name)
|
427
|
+
|
415
428
|
required_run_list = []
|
429
|
+
success = false
|
416
430
|
chef_synchronize(chef_environment: node.chef_environment, force: options[:force], job: job) do
|
417
431
|
if node.run_list.include?(DISABLED_RUN_LIST_ENTRY)
|
418
|
-
job.
|
432
|
+
job.set_status("#{node.name} is already disabled.")
|
433
|
+
success = true
|
419
434
|
else
|
420
435
|
required_run_list = on_dynamic_services(job, node) do |dynamic_service, plugin|
|
421
436
|
dynamic_service.node_state_change(job,
|
@@ -425,20 +440,25 @@ module MotherBrain
|
|
425
440
|
false)
|
426
441
|
end
|
427
442
|
end
|
428
|
-
if !required_run_list.empty?
|
429
|
-
job.set_status "Running chef with the following run list: #{required_run_list.inspect}"
|
430
|
-
self.bulk_chef_run(job, [node], required_run_list)
|
431
|
-
else
|
432
|
-
job.set_status "No recipes required to run."
|
433
|
-
end
|
434
443
|
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
444
|
+
if !success
|
445
|
+
if !required_run_list.empty?
|
446
|
+
job.set_status "Running chef with the following run list: #{required_run_list.inspect}"
|
447
|
+
self.bulk_chef_run(job, [node], required_run_list)
|
448
|
+
else
|
449
|
+
job.set_status "No recipes required to run."
|
450
|
+
end
|
451
|
+
|
452
|
+
node.run_list = [DISABLED_RUN_LIST_ENTRY].concat(node.run_list)
|
453
|
+
if node.save
|
454
|
+
job.set_status "#{node.name} disabled."
|
455
|
+
success = true
|
456
|
+
else
|
457
|
+
job.set_status "#{node.name} did not save! Disabled run_list entry was unable to be added to the node."
|
458
|
+
end
|
440
459
|
end
|
441
460
|
end
|
461
|
+
job.report_boolean(success)
|
442
462
|
rescue MotherBrain::ResourceLocked => e
|
443
463
|
job.report_failure e.message
|
444
464
|
ensure
|
@@ -492,7 +512,7 @@ module MotherBrain
|
|
492
512
|
abort RemoteCommandError.new("cannot execute a ruby_script without a hostname or ipaddress")
|
493
513
|
end
|
494
514
|
|
495
|
-
response = chef_connection.node.ruby_script(host, command_lines)
|
515
|
+
response = safe_remote(host) { chef_connection.node.ruby_script(host, command_lines) }
|
496
516
|
|
497
517
|
if response.error?
|
498
518
|
raise RemoteScriptError.new(response.stderr.chomp)
|
@@ -527,5 +547,21 @@ module MotherBrain
|
|
527
547
|
end
|
528
548
|
end.flatten.uniq
|
529
549
|
end
|
550
|
+
|
551
|
+
def fetch_node(job, node_name)
|
552
|
+
node = safe_remote(node_name) { chef_connection.node.find(node_name) }
|
553
|
+
rescue RemoteCommandError => e
|
554
|
+
job.report_failure("Encountered error retrieving the node object.")
|
555
|
+
end
|
556
|
+
|
557
|
+
def safe_remote(host = nil)
|
558
|
+
yield
|
559
|
+
rescue Exception => e
|
560
|
+
msg = "Unhandled Exception: [#{e.class}] #{e.message}"
|
561
|
+
msg = "[#{host}] #{msg}" if host
|
562
|
+
log.warn { msg }
|
563
|
+
log.debug { e.backtrace.join("\n") }
|
564
|
+
abort RemoteCommandError.new(msg, host)
|
565
|
+
end
|
530
566
|
end
|
531
567
|
end
|
data/lib/mb/plugin_manager.rb
CHANGED
@@ -258,7 +258,7 @@ module MotherBrain
|
|
258
258
|
|
259
259
|
potentials = list(name: name, remote: false).map(&:version)
|
260
260
|
potentials += remote_cookbook_versions(name) if options[:remote]
|
261
|
-
potentials = potentials.collect { |version|
|
261
|
+
potentials = potentials.collect { |version| Semverse::Version.new(version) }.uniq.sort.reverse
|
262
262
|
|
263
263
|
potentials.find do |version|
|
264
264
|
found = find(name, version.to_s, options.slice(:remote))
|
@@ -412,7 +412,7 @@ module MotherBrain
|
|
412
412
|
#
|
413
413
|
# @param [String] plugin_name
|
414
414
|
# name of the plugin
|
415
|
-
# @param [String,
|
415
|
+
# @param [String, Semverse::Constraint] constraint
|
416
416
|
# constraint to satisfy
|
417
417
|
#
|
418
418
|
# @option options [Boolean] :remote (false)
|
@@ -424,7 +424,7 @@ module MotherBrain
|
|
424
424
|
# @return [MB::Plugin]
|
425
425
|
def satisfy(plugin_name, constraint, options = {})
|
426
426
|
options = options.reverse_merge(remote: false)
|
427
|
-
constraint =
|
427
|
+
constraint = Semverse::Constraint.new(constraint)
|
428
428
|
|
429
429
|
# Optimize for equality operator. Don't need to find all of the versions if
|
430
430
|
# we only care about one.
|
@@ -435,7 +435,7 @@ module MotherBrain
|
|
435
435
|
else
|
436
436
|
graph = Solve::Graph.new
|
437
437
|
versions(plugin_name, options[:remote]).each do |version|
|
438
|
-
graph.
|
438
|
+
graph.artifact(plugin_name, version)
|
439
439
|
end
|
440
440
|
|
441
441
|
solution = Solve.it!(graph, [[plugin_name, constraint]])
|
@@ -444,7 +444,7 @@ module MotherBrain
|
|
444
444
|
# calling versions() and including a {remote: true} option.
|
445
445
|
find(plugin_name, version, remote: false)
|
446
446
|
end
|
447
|
-
rescue
|
447
|
+
rescue Semverse::NoSolutionError
|
448
448
|
abort PluginNotFound.new(plugin_name, constraint)
|
449
449
|
end
|
450
450
|
|
data/lib/mb/version.rb
CHANGED
data/lib/motherbrain.rb
CHANGED
data/man/man_helper.rb
CHANGED
data/motherbrain.gemspec
CHANGED
@@ -34,7 +34,8 @@ Gem::Specification.new do |s|
|
|
34
34
|
s.require_paths = ["lib"]
|
35
35
|
s.version = MotherBrain::VERSION
|
36
36
|
|
37
|
-
s.add_dependency 'celluloid', '~> 0.
|
37
|
+
s.add_dependency 'celluloid', '~> 0.16.pre'
|
38
|
+
s.add_dependency 'celluloid-io', '~> 0.16.pre'
|
38
39
|
# s.add_dependency 'dcell', '~> 0.14.0'
|
39
40
|
s.add_dependency 'reel', '~> 0.4.0'
|
40
41
|
s.add_dependency 'reel-rack'
|
@@ -42,11 +43,10 @@ Gem::Specification.new do |s|
|
|
42
43
|
s.add_dependency 'grape', '~> 0.6.0'
|
43
44
|
s.add_dependency 'net-ssh'
|
44
45
|
s.add_dependency 'net-sftp'
|
45
|
-
s.add_dependency 'solve', '
|
46
|
-
s.add_dependency 'ridley-connectors', '~>
|
46
|
+
s.add_dependency 'solve', '~> 1.1'
|
47
|
+
s.add_dependency 'ridley-connectors', '~> 2.0'
|
47
48
|
s.add_dependency 'thor', '~> 0.18.0'
|
48
|
-
s.add_dependency 'faraday', '
|
49
|
-
s.add_dependency 'faraday_middleware'
|
49
|
+
s.add_dependency 'faraday', '~> 0.9'
|
50
50
|
s.add_dependency 'multi_json'
|
51
51
|
s.add_dependency 'fog', '~> 1.10.0'
|
52
52
|
s.add_dependency 'json', '>= 1.8.0'
|
@@ -55,5 +55,6 @@ Gem::Specification.new do |s|
|
|
55
55
|
s.add_dependency 'buff-platform', '~> 0.1'
|
56
56
|
s.add_dependency 'buff-ruby_engine', '~> 0.1'
|
57
57
|
s.add_dependency 'grape-swagger', '~> 0.6.0'
|
58
|
-
s.add_dependency 'berkshelf', '~> 3.0
|
58
|
+
s.add_dependency 'berkshelf', '~> 3.0'
|
59
|
+
s.add_dependency 'semverse', '~> 1.1'
|
59
60
|
end
|
@@ -53,8 +53,8 @@ describe MotherBrain::CookbookMetadata do
|
|
53
53
|
subject.long_description.should eql("Installs/Configures motherbrain")
|
54
54
|
end
|
55
55
|
|
56
|
-
it "sets a
|
57
|
-
subject.version.should be_a(
|
56
|
+
it "sets a Semverse::Version value for 'version'" do
|
57
|
+
subject.version.should be_a(Semverse::Version)
|
58
58
|
subject.version.to_s.should eql("0.1.0")
|
59
59
|
end
|
60
60
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: motherbrain
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jamie Winsor
|
@@ -15,7 +15,7 @@ authors:
|
|
15
15
|
autorequire:
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
|
-
date: 2014-04-
|
18
|
+
date: 2014-04-18 00:00:00.000000000 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: celluloid
|
@@ -23,14 +23,28 @@ dependencies:
|
|
23
23
|
requirements:
|
24
24
|
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 0.16.pre
|
27
27
|
type: :runtime
|
28
28
|
prerelease: false
|
29
29
|
version_requirements: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.16.pre
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: celluloid-io
|
36
|
+
requirement: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.16.pre
|
41
|
+
type: :runtime
|
42
|
+
prerelease: false
|
43
|
+
version_requirements: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.16.pre
|
34
48
|
- !ruby/object:Gem::Dependency
|
35
49
|
name: reel
|
36
50
|
requirement: !ruby/object:Gem::Requirement
|
@@ -119,30 +133,30 @@ dependencies:
|
|
119
133
|
name: solve
|
120
134
|
requirement: !ruby/object:Gem::Requirement
|
121
135
|
requirements:
|
122
|
-
- -
|
136
|
+
- - ~>
|
123
137
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
138
|
+
version: '1.1'
|
125
139
|
type: :runtime
|
126
140
|
prerelease: false
|
127
141
|
version_requirements: !ruby/object:Gem::Requirement
|
128
142
|
requirements:
|
129
|
-
- -
|
143
|
+
- - ~>
|
130
144
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
145
|
+
version: '1.1'
|
132
146
|
- !ruby/object:Gem::Dependency
|
133
147
|
name: ridley-connectors
|
134
148
|
requirement: !ruby/object:Gem::Requirement
|
135
149
|
requirements:
|
136
150
|
- - ~>
|
137
151
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
152
|
+
version: '2.0'
|
139
153
|
type: :runtime
|
140
154
|
prerelease: false
|
141
155
|
version_requirements: !ruby/object:Gem::Requirement
|
142
156
|
requirements:
|
143
157
|
- - ~>
|
144
158
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
159
|
+
version: '2.0'
|
146
160
|
- !ruby/object:Gem::Dependency
|
147
161
|
name: thor
|
148
162
|
requirement: !ruby/object:Gem::Requirement
|
@@ -161,30 +175,16 @@ dependencies:
|
|
161
175
|
name: faraday
|
162
176
|
requirement: !ruby/object:Gem::Requirement
|
163
177
|
requirements:
|
164
|
-
- -
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: 0.9.0
|
167
|
-
type: :runtime
|
168
|
-
prerelease: false
|
169
|
-
version_requirements: !ruby/object:Gem::Requirement
|
170
|
-
requirements:
|
171
|
-
- - <
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: 0.9.0
|
174
|
-
- !ruby/object:Gem::Dependency
|
175
|
-
name: faraday_middleware
|
176
|
-
requirement: !ruby/object:Gem::Requirement
|
177
|
-
requirements:
|
178
|
-
- - '>='
|
178
|
+
- - ~>
|
179
179
|
- !ruby/object:Gem::Version
|
180
|
-
version: '0'
|
180
|
+
version: '0.9'
|
181
181
|
type: :runtime
|
182
182
|
prerelease: false
|
183
183
|
version_requirements: !ruby/object:Gem::Requirement
|
184
184
|
requirements:
|
185
|
-
- -
|
185
|
+
- - ~>
|
186
186
|
- !ruby/object:Gem::Version
|
187
|
-
version: '0'
|
187
|
+
version: '0.9'
|
188
188
|
- !ruby/object:Gem::Dependency
|
189
189
|
name: multi_json
|
190
190
|
requirement: !ruby/object:Gem::Requirement
|
@@ -303,14 +303,28 @@ dependencies:
|
|
303
303
|
requirements:
|
304
304
|
- - ~>
|
305
305
|
- !ruby/object:Gem::Version
|
306
|
-
version: 3.0
|
306
|
+
version: '3.0'
|
307
|
+
type: :runtime
|
308
|
+
prerelease: false
|
309
|
+
version_requirements: !ruby/object:Gem::Requirement
|
310
|
+
requirements:
|
311
|
+
- - ~>
|
312
|
+
- !ruby/object:Gem::Version
|
313
|
+
version: '3.0'
|
314
|
+
- !ruby/object:Gem::Dependency
|
315
|
+
name: semverse
|
316
|
+
requirement: !ruby/object:Gem::Requirement
|
317
|
+
requirements:
|
318
|
+
- - ~>
|
319
|
+
- !ruby/object:Gem::Version
|
320
|
+
version: '1.1'
|
307
321
|
type: :runtime
|
308
322
|
prerelease: false
|
309
323
|
version_requirements: !ruby/object:Gem::Requirement
|
310
324
|
requirements:
|
311
325
|
- - ~>
|
312
326
|
- !ruby/object:Gem::Version
|
313
|
-
version:
|
327
|
+
version: '1.1'
|
314
328
|
description: An orchestrator for Chef
|
315
329
|
email:
|
316
330
|
- jamie@vialstudios.com
|
@@ -607,7 +621,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
607
621
|
version: '0'
|
608
622
|
requirements: []
|
609
623
|
rubyforge_project:
|
610
|
-
rubygems_version: 2.
|
624
|
+
rubygems_version: 2.2.2
|
611
625
|
signing_key:
|
612
626
|
specification_version: 4
|
613
627
|
summary: An orchestrator for Chef
|