motherbrain 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +5 -0
- data/lib/mb/cli/sub_command/plugin.rb +6 -0
- data/lib/mb/cli/sub_command.rb +1 -1
- data/lib/mb/cli_gateway/sub_commands/environment.rb +7 -1
- data/lib/mb/environment_manager.rb +7 -3
- data/lib/mb/gears/dynamic_service.rb +11 -8
- data/lib/mb/node_querier.rb +13 -0
- data/lib/mb/version.rb +1 -1
- data/man/man_helper.rb +2 -3
- data/man/mb.1 +111 -1
- data/man/mb.1.html +45 -1
- data/motherbrain.gemspec +1 -1
- metadata +71 -23
- checksums.yaml +0 -7
data/CHANGELOG.md
CHANGED
@@ -154,9 +154,15 @@ module MotherBrain
|
|
154
154
|
default: false,
|
155
155
|
desc: "Perform service change even if the environment is locked",
|
156
156
|
aliases: "-f"
|
157
|
+
method_option :only,
|
158
|
+
type: :array,
|
159
|
+
default: nil,
|
160
|
+
desc: "Run command only on the given hostnames or IPs",
|
161
|
+
aliases: "-o"
|
157
162
|
desc("service [COMPONENT].[SERVICE] [STATE]", "Change the specified service to a new state")
|
158
163
|
define_method(:service) do |service, state|
|
159
164
|
service_options = Hash.new.merge(options).deep_symbolize_keys
|
165
|
+
service_options[:node_filter] = service_options.delete(:only)
|
160
166
|
|
161
167
|
job = MB::Gear::DynamicService.change_service_state(
|
162
168
|
service.freeze,
|
data/lib/mb/cli/sub_command.rb
CHANGED
@@ -9,6 +9,12 @@ module MotherBrain
|
|
9
9
|
default: false,
|
10
10
|
desc: "perform the configuration even if the environment is locked",
|
11
11
|
aliases: "-f"
|
12
|
+
method_option :only,
|
13
|
+
type: :array,
|
14
|
+
default: nil,
|
15
|
+
desc: "Run command only on the given hostnames or IPs",
|
16
|
+
aliases: "-o",
|
17
|
+
hide: true
|
12
18
|
desc "configure ENVIRONMENT FILE", "configure a Chef environment"
|
13
19
|
def configure(environment, attributes_file)
|
14
20
|
attributes_file = File.expand_path(attributes_file)
|
@@ -28,7 +34,7 @@ module MotherBrain
|
|
28
34
|
exit(1)
|
29
35
|
end
|
30
36
|
|
31
|
-
job = environment_manager.async_configure(environment, attributes: attributes, force: options[:force])
|
37
|
+
job = environment_manager.async_configure(environment, attributes: attributes, force: options[:force], node_filter: options[:only])
|
32
38
|
|
33
39
|
CliClient.new(job).display
|
34
40
|
end
|
@@ -52,7 +52,8 @@ module MotherBrain
|
|
52
52
|
# a hash of attributes to merge with the existing attributes of an environment
|
53
53
|
# @option options [Boolean] :force (false)
|
54
54
|
# force configure even if the environment is locked
|
55
|
-
#
|
55
|
+
# @option options [String] :node_filter
|
56
|
+
# limit chef-run to certain nodes - NOT RECOMMENDED
|
56
57
|
# @api private
|
57
58
|
def configure(job, id, options = {})
|
58
59
|
options = options.reverse_merge(
|
@@ -76,6 +77,7 @@ module MotherBrain
|
|
76
77
|
|
77
78
|
job.set_status("Searching for nodes in the environment")
|
78
79
|
nodes = nodes_for_environment(environment.name)
|
80
|
+
nodes = MB::NodeFilter.filter(options[:node_filter], nodes) if options[:node_filter]
|
79
81
|
|
80
82
|
job.set_status("Performing a chef client run on #{nodes.length} nodes")
|
81
83
|
nodes.collect do |node|
|
@@ -117,14 +119,16 @@ module MotherBrain
|
|
117
119
|
nodes = nodes_for_environment(environment.name)
|
118
120
|
|
119
121
|
job.set_status("Examining #{nodes.length} nodes")
|
122
|
+
|
120
123
|
nodes.collect do |node|
|
121
|
-
log.debug "About to execute on #{node.public_hostname}"
|
124
|
+
log.debug "About to execute on: \"#{node.public_hostname}\""
|
122
125
|
node_querier.future(:execute_command, node.public_hostname, "echo %time%")
|
123
126
|
end.each do |future|
|
124
127
|
begin
|
125
128
|
response = future.value
|
126
129
|
rescue RemoteCommandError => error
|
127
|
-
log.warn "Examine command on #{error.host}
|
130
|
+
log.warn "Examine command failed on: \"#{error.host}\""
|
131
|
+
log.warn " " + error.message
|
128
132
|
end
|
129
133
|
end
|
130
134
|
job.report_success("Completed on #{nodes.length} nodes.")
|
@@ -15,7 +15,7 @@ module MotherBrain
|
|
15
15
|
# @param state [String]
|
16
16
|
# the state of the service to change to
|
17
17
|
# @param options [Hash]
|
18
|
-
#
|
18
|
+
#
|
19
19
|
# @return [MB::JobTicket]
|
20
20
|
def change_service_state(service, plugin, environment, state, run_chef = true, options = {})
|
21
21
|
job = Job.new(:dynamic_service_state_change)
|
@@ -67,12 +67,13 @@ module MotherBrain
|
|
67
67
|
# the environment to execute on
|
68
68
|
# @param state [String]
|
69
69
|
# the state to change the service to
|
70
|
-
# @
|
70
|
+
# @option options [String] node_filter filter to apply to the
|
71
|
+
# list of nodes
|
71
72
|
#
|
72
73
|
# @return [MB::JobTicket]
|
73
74
|
def state_change(job, plugin, environment, state, run_chef = true, options = {})
|
74
|
-
log.warn {
|
75
|
-
"Component's service state is being changed to #{state}, which is not one of #{COMMON_STATES}"
|
75
|
+
log.warn {
|
76
|
+
"Component's service state is being changed to #{state}, which is not one of #{COMMON_STATES}"
|
76
77
|
} unless COMMON_STATES.include?(state)
|
77
78
|
|
78
79
|
chef_synchronize(chef_environment: environment, force: options[:force]) do
|
@@ -80,6 +81,8 @@ module MotherBrain
|
|
80
81
|
service_object = component_object.get_service(name)
|
81
82
|
group = component_object.group(service_object.service_group)
|
82
83
|
nodes = group.nodes(environment)
|
84
|
+
nodes = MB::NodeFilter.filter(options[:node_filter], nodes) if options[:node_filter]
|
85
|
+
|
83
86
|
job.report_running("preparing to change the #{name} service to #{state}")
|
84
87
|
|
85
88
|
if options[:cluster_override]
|
@@ -95,8 +98,8 @@ module MotherBrain
|
|
95
98
|
end
|
96
99
|
|
97
100
|
def node_state_change(job, plugin, node, state, run_chef = true)
|
98
|
-
log.warn {
|
99
|
-
"Component's service state is being changed to #{state}, which is not one of #{COMMON_STATES}"
|
101
|
+
log.warn {
|
102
|
+
"Component's service state is being changed to #{state}, which is not one of #{COMMON_STATES}"
|
100
103
|
} unless COMMON_STATES.include?(state)
|
101
104
|
|
102
105
|
component_object = plugin.component(component)
|
@@ -110,7 +113,7 @@ module MotherBrain
|
|
110
113
|
def remove_node_state_change(job, plugin, node, run_chef = true)
|
111
114
|
component_object = plugin.component(component)
|
112
115
|
service = component_object.get_service(name)
|
113
|
-
|
116
|
+
|
114
117
|
unset_node_attributes(job, [node], service.service_attribute)
|
115
118
|
if run_chef
|
116
119
|
node_querier.bulk_chef_run(job, [node], service.service_recipe)
|
@@ -118,7 +121,7 @@ module MotherBrain
|
|
118
121
|
end
|
119
122
|
|
120
123
|
# Finds the environment object, sets an attribute at the
|
121
|
-
# override level, and saves the environment back to the
|
124
|
+
# override level, and saves the environment back to the
|
122
125
|
# Chef server
|
123
126
|
#
|
124
127
|
# @param job [MB::Job]
|
data/lib/mb/node_querier.rb
CHANGED
@@ -177,6 +177,10 @@ module MotherBrain
|
|
177
177
|
return nil
|
178
178
|
end
|
179
179
|
|
180
|
+
unless host.present?
|
181
|
+
abort RemoteCommandError.new("cannot put_secret without a hostname or ipaddress")
|
182
|
+
end
|
183
|
+
|
180
184
|
response = chef_connection.node.put_secret(host)
|
181
185
|
|
182
186
|
if response.error?
|
@@ -196,6 +200,11 @@ module MotherBrain
|
|
196
200
|
#
|
197
201
|
# @return [Ridley::HostConnection::Response]
|
198
202
|
def execute_command(host, command)
|
203
|
+
|
204
|
+
unless host.present?
|
205
|
+
abort RemoteCommandError.new("cannot execute command without a hostname or ipaddress")
|
206
|
+
end
|
207
|
+
|
199
208
|
response = chef_connection.node.execute_command(host, command)
|
200
209
|
|
201
210
|
if response.error?
|
@@ -479,6 +488,10 @@ module MotherBrain
|
|
479
488
|
lines = File.readlines(MB.scripts.join("#{name}.rb"))
|
480
489
|
command_lines = lines.collect { |line| line.gsub('"', "'").strip.chomp }
|
481
490
|
|
491
|
+
unless host.present?
|
492
|
+
abort RemoteCommandError.new("cannot execute a ruby_script without a hostname or ipaddress")
|
493
|
+
end
|
494
|
+
|
482
495
|
response = chef_connection.node.ruby_script(host, command_lines)
|
483
496
|
|
484
497
|
if response.error?
|
data/lib/mb/version.rb
CHANGED
data/man/man_helper.rb
CHANGED
@@ -45,7 +45,7 @@ module MB
|
|
45
45
|
klass.instance_eval do
|
46
46
|
meth = normalize_command_name(command_name)
|
47
47
|
command = all_commands[meth]
|
48
|
-
banner(command).sub(/\S+:/,'')
|
48
|
+
banner(command).sub(/\S+:/,'').sub(/` :/,'` ')
|
49
49
|
end
|
50
50
|
}
|
51
51
|
|
@@ -53,7 +53,7 @@ module MB
|
|
53
53
|
klass.instance_eval do
|
54
54
|
meth = normalize_command_name(command_name)
|
55
55
|
command = all_commands[meth]
|
56
|
-
[banner(command).sub(/\S+:/,''), command.description, command.long_description, command.options]
|
56
|
+
[banner(command).sub(/\S+:/,'').sub(/` :/,'` '), command.description, command.long_description, command.options]
|
57
57
|
end
|
58
58
|
}
|
59
59
|
|
@@ -78,4 +78,3 @@ module MB
|
|
78
78
|
end
|
79
79
|
end
|
80
80
|
end
|
81
|
-
|
data/man/mb.1
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "MB" "1" "
|
4
|
+
.TH "MB" "1" "March 2014" "" ""
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBmb\fR \- command and control clusters of machines with Chef
|
@@ -16,6 +16,12 @@
|
|
16
16
|
\fBmb\fR purge HOST
|
17
17
|
.
|
18
18
|
.br
|
19
|
+
\fBmb\fR enable HOST
|
20
|
+
.
|
21
|
+
.br
|
22
|
+
\fBmb\fR disable HOST
|
23
|
+
.
|
24
|
+
.br
|
19
25
|
\fBmb\fR version
|
20
26
|
.
|
21
27
|
.br
|
@@ -43,9 +49,15 @@
|
|
43
49
|
\fBmb\fR \fBenvironment\fR unlock ENVIRONMENT
|
44
50
|
.
|
45
51
|
.br
|
52
|
+
\fBmb\fR \fBenvironment\fR from FILE
|
53
|
+
.
|
54
|
+
.br
|
46
55
|
\fBmb\fR \fBenvironment\fR create ENVIRONMENT
|
47
56
|
.
|
48
57
|
.br
|
58
|
+
\fBmb\fR \fBenvironment\fR examine ENVIRONMENT
|
59
|
+
.
|
60
|
+
.br
|
49
61
|
\fBmb\fR \fBenvironment\fR help [COMMAND]
|
50
62
|
.
|
51
63
|
.br
|
@@ -76,9 +88,15 @@
|
|
76
88
|
\fBmb\fR \fB<plugin>\fR provision MANIFEST
|
77
89
|
.
|
78
90
|
.br
|
91
|
+
\fBmb\fR \fB<plugin>\fR service [COMPONENT]\.[SERVICE] [STATE]
|
92
|
+
.
|
93
|
+
.br
|
79
94
|
\fBmb\fR \fB<plugin>\fR upgrade
|
80
95
|
.
|
81
96
|
.br
|
97
|
+
\fBmb\fR \fB<plugin>\fR attributes
|
98
|
+
.
|
99
|
+
.br
|
82
100
|
\fBmb\fR \fB<plugin>\fR \fB<component>\fR \fB<command>\fR
|
83
101
|
.
|
84
102
|
.br
|
@@ -154,6 +172,32 @@ Skip removing the Chef installation from the node
|
|
154
172
|
.
|
155
173
|
.br
|
156
174
|
|
175
|
+
.
|
176
|
+
.P
|
177
|
+
\fBmb\fR enable HOST
|
178
|
+
.
|
179
|
+
.br
|
180
|
+
Remove stop service attributes and \'disabled\' run list entry from HOST\'s node\.
|
181
|
+
.
|
182
|
+
.TP
|
183
|
+
\-f, \-\-force
|
184
|
+
Perform HOST enable even if the environment is locked
|
185
|
+
.
|
186
|
+
.br
|
187
|
+
|
188
|
+
.
|
189
|
+
.P
|
190
|
+
\fBmb\fR disable HOST
|
191
|
+
.
|
192
|
+
.br
|
193
|
+
Stop services on HOST and prevent chef\-client from running until reenabled\.
|
194
|
+
.
|
195
|
+
.TP
|
196
|
+
\-f, \-\-force
|
197
|
+
Perform HOST disable even if the environment is locked
|
198
|
+
.
|
199
|
+
.br
|
200
|
+
|
157
201
|
.
|
158
202
|
.P
|
159
203
|
\fBmb\fR version
|
@@ -191,6 +235,13 @@ perform the configuration even if the environment is locked
|
|
191
235
|
.
|
192
236
|
.br
|
193
237
|
|
238
|
+
.
|
239
|
+
.TP
|
240
|
+
\-o, \-\-only=one two three
|
241
|
+
Run command only on the given hostnames or IPs
|
242
|
+
.
|
243
|
+
.br
|
244
|
+
|
194
245
|
.
|
195
246
|
.P
|
196
247
|
\fBmb\fR \fBenvironment\fR destroy ENVIRONMENT
|
@@ -238,12 +289,24 @@ Lock an environment
|
|
238
289
|
Unlock an environment
|
239
290
|
.
|
240
291
|
.P
|
292
|
+
\fBmb\fR \fBenvironment\fR from FILE
|
293
|
+
.
|
294
|
+
.br
|
295
|
+
Create an environment from JSON in a file
|
296
|
+
.
|
297
|
+
.P
|
241
298
|
\fBmb\fR \fBenvironment\fR create ENVIRONMENT
|
242
299
|
.
|
243
300
|
.br
|
244
301
|
Create an empty environment
|
245
302
|
.
|
246
303
|
.P
|
304
|
+
\fBmb\fR \fBenvironment\fR examine ENVIRONMENT
|
305
|
+
.
|
306
|
+
.br
|
307
|
+
Examine nodes in a Chef environment
|
308
|
+
.
|
309
|
+
.P
|
247
310
|
\fBmb\fR \fBenvironment\fR help [COMMAND]
|
248
311
|
.
|
249
312
|
.br
|
@@ -442,6 +505,33 @@ Perform bootstrap even if the environment is locked
|
|
442
505
|
.
|
443
506
|
.br
|
444
507
|
|
508
|
+
.
|
509
|
+
.P
|
510
|
+
\fBmb\fR \fB<plugin>\fR service [COMPONENT]\.[SERVICE] [STATE]
|
511
|
+
.
|
512
|
+
.br
|
513
|
+
Change the specified service to a new state
|
514
|
+
.
|
515
|
+
.TP
|
516
|
+
\-\-cluster\-override
|
517
|
+
Sets the service operation to execute at the environment level
|
518
|
+
.
|
519
|
+
.br
|
520
|
+
|
521
|
+
.
|
522
|
+
.TP
|
523
|
+
\-f, \-\-force
|
524
|
+
Perform service change even if the environment is locked
|
525
|
+
.
|
526
|
+
.br
|
527
|
+
|
528
|
+
.
|
529
|
+
.TP
|
530
|
+
\-o, \-\-only=one two three
|
531
|
+
Run command only on the given hostnames or IPs
|
532
|
+
.
|
533
|
+
.br
|
534
|
+
|
445
535
|
.
|
446
536
|
.P
|
447
537
|
\fBmb\fR \fB<plugin>\fR upgrade
|
@@ -483,6 +573,26 @@ Perform upgrade even if the environment is locked
|
|
483
573
|
.
|
484
574
|
.br
|
485
575
|
|
576
|
+
.
|
577
|
+
.TP
|
578
|
+
\-C, \-\-concurrency=N
|
579
|
+
The max number of nodes to upgrade concurrently\.
|
580
|
+
.
|
581
|
+
.br
|
582
|
+
|
583
|
+
.
|
584
|
+
.TP
|
585
|
+
\-\-stack\-order
|
586
|
+
The upgrade will be constrained to the order defined in the plugin\'s stack_order\.
|
587
|
+
.
|
588
|
+
.br
|
589
|
+
|
590
|
+
.
|
591
|
+
.P
|
592
|
+
\fBmb\fR \fB<plugin>\fR attributes
|
593
|
+
.
|
594
|
+
.br
|
595
|
+
View available attributes for plugin\.
|
486
596
|
.
|
487
597
|
.P
|
488
598
|
\fBmb\fR \fB<plugin>\fR \fB<component>\fR \fB<command>\fR
|
data/man/mb.1.html
CHANGED
@@ -78,6 +78,8 @@
|
|
78
78
|
<p><code>mb</code> configure<br />
|
79
79
|
<code>mb</code> console<br />
|
80
80
|
<code>mb</code> purge HOST<br />
|
81
|
+
<code>mb</code> enable HOST<br />
|
82
|
+
<code>mb</code> disable HOST<br />
|
81
83
|
<code>mb</code> version<br />
|
82
84
|
<code>mb</code> template NAME PATH_OR_URL<br />
|
83
85
|
<code>mb</code> environment<br />
|
@@ -87,7 +89,9 @@
|
|
87
89
|
<code>mb</code> <code>environment</code> list<br />
|
88
90
|
<code>mb</code> <code>environment</code> lock ENVIRONMENT<br />
|
89
91
|
<code>mb</code> <code>environment</code> unlock ENVIRONMENT<br />
|
92
|
+
<code>mb</code> <code>environment</code> from FILE<br />
|
90
93
|
<code>mb</code> <code>environment</code> create ENVIRONMENT<br />
|
94
|
+
<code>mb</code> <code>environment</code> examine ENVIRONMENT<br />
|
91
95
|
<code>mb</code> <code>environment</code> help [COMMAND]<br />
|
92
96
|
<code>mb</code> <code>plugin</code> init [PATH]<br />
|
93
97
|
<code>mb</code> <code>plugin</code> install NAME<br />
|
@@ -98,7 +102,9 @@
|
|
98
102
|
<code>mb</code> <code><plugin></code> nodes<br />
|
99
103
|
<code>mb</code> <code><plugin></code> bootstrap MANIFEST<br />
|
100
104
|
<code>mb</code> <code><plugin></code> provision MANIFEST<br />
|
105
|
+
<code>mb</code> <code><plugin></code> service [COMPONENT].[SERVICE] [STATE]<br />
|
101
106
|
<code>mb</code> <code><plugin></code> upgrade<br />
|
107
|
+
<code>mb</code> <code><plugin></code> attributes<br />
|
102
108
|
<code>mb</code> <code><plugin></code> <code><component></code> <code><command></code><br /></p>
|
103
109
|
|
104
110
|
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
@@ -153,6 +159,22 @@ Remove Chef from node and purge it's data from the Chef server</p>
|
|
153
159
|
</dl>
|
154
160
|
|
155
161
|
|
162
|
+
<p><code>mb</code> enable HOST<br />
|
163
|
+
Remove stop service attributes and 'disabled' run list entry from HOST's node.</p>
|
164
|
+
|
165
|
+
<dl>
|
166
|
+
<dt>-f, --force</dt><dd>Perform HOST enable even if the environment is locked<br /></dd>
|
167
|
+
</dl>
|
168
|
+
|
169
|
+
|
170
|
+
<p><code>mb</code> disable HOST<br />
|
171
|
+
Stop services on HOST and prevent chef-client from running until reenabled.</p>
|
172
|
+
|
173
|
+
<dl>
|
174
|
+
<dt>-f, --force</dt><dd>Perform HOST disable even if the environment is locked<br /></dd>
|
175
|
+
</dl>
|
176
|
+
|
177
|
+
|
156
178
|
<p><code>mb</code> version<br />
|
157
179
|
Display version and license information</p>
|
158
180
|
|
@@ -170,6 +192,7 @@ configure a Chef environment</p>
|
|
170
192
|
|
171
193
|
<dl>
|
172
194
|
<dt>-f, --force</dt><dd>perform the configuration even if the environment is locked<br /></dd>
|
195
|
+
<dt>-o, --only=one two three</dt><dd>Run command only on the given hostnames or IPs<br /></dd>
|
173
196
|
</dl>
|
174
197
|
|
175
198
|
|
@@ -192,9 +215,15 @@ Lock an environment</p>
|
|
192
215
|
<p><code>mb</code> <code>environment</code> unlock ENVIRONMENT<br />
|
193
216
|
Unlock an environment</p>
|
194
217
|
|
218
|
+
<p><code>mb</code> <code>environment</code> from FILE<br />
|
219
|
+
Create an environment from JSON in a file</p>
|
220
|
+
|
195
221
|
<p><code>mb</code> <code>environment</code> create ENVIRONMENT<br />
|
196
222
|
Create an empty environment</p>
|
197
223
|
|
224
|
+
<p><code>mb</code> <code>environment</code> examine ENVIRONMENT<br />
|
225
|
+
Examine nodes in a Chef environment</p>
|
226
|
+
|
198
227
|
<p><code>mb</code> <code>environment</code> help [COMMAND]<br />
|
199
228
|
Describe subcommands or one specific subcommand</p>
|
200
229
|
|
@@ -269,6 +298,16 @@ Create a cluster of nodes and add them to a Chef environment</p>
|
|
269
298
|
</dl>
|
270
299
|
|
271
300
|
|
301
|
+
<p><code>mb</code> <code><plugin></code> service [COMPONENT].[SERVICE] [STATE]<br />
|
302
|
+
Change the specified service to a new state</p>
|
303
|
+
|
304
|
+
<dl>
|
305
|
+
<dt>--cluster-override</dt><dd>Sets the service operation to execute at the environment level<br /></dd>
|
306
|
+
<dt>-f, --force</dt><dd>Perform service change even if the environment is locked<br /></dd>
|
307
|
+
<dt>-o, --only=one two three</dt><dd>Run command only on the given hostnames or IPs<br /></dd>
|
308
|
+
</dl>
|
309
|
+
|
310
|
+
|
272
311
|
<p><code>mb</code> <code><plugin></code> upgrade<br />
|
273
312
|
Upgrade an environment to the specified versions</p>
|
274
313
|
|
@@ -278,9 +317,14 @@ Upgrade an environment to the specified versions</p>
|
|
278
317
|
<dt>--attributes, --environment-attributes=key:value</dt><dd>Any additional attributes to set on the environment<br /></dd>
|
279
318
|
<dt>--attributes-file, --environment-attributes-file=ENVIRONMENT_ATTRIBUTES_FILE</dt><dd>Any additional attributes to set on the environment via a json file.<br /></dd>
|
280
319
|
<dt>-f, --force</dt><dd>Perform upgrade even if the environment is locked<br /></dd>
|
320
|
+
<dt>-C, --concurrency=N</dt><dd>The max number of nodes to upgrade concurrently.<br /></dd>
|
321
|
+
<dt>--stack-order</dt><dd>The upgrade will be constrained to the order defined in the plugin's stack_order.<br /></dd>
|
281
322
|
</dl>
|
282
323
|
|
283
324
|
|
325
|
+
<p><code>mb</code> <code><plugin></code> attributes<br />
|
326
|
+
View available attributes for plugin.</p>
|
327
|
+
|
284
328
|
<p><code>mb</code> <code><plugin></code> <code><component></code> <code><command></code><br />
|
285
329
|
Run a command defined in a component in the specified plugin. Options and usage are plugin-defined.</p>
|
286
330
|
|
@@ -291,7 +335,7 @@ Run a command defined in a component in the specified plugin. Options and usage
|
|
291
335
|
|
292
336
|
<ol class='man-decor man-foot man foot'>
|
293
337
|
<li class='tl'></li>
|
294
|
-
<li class='tc'>
|
338
|
+
<li class='tc'>March 2014</li>
|
295
339
|
<li class='tr'>mb(1)</li>
|
296
340
|
</ol>
|
297
341
|
|
data/motherbrain.gemspec
CHANGED
@@ -42,7 +42,7 @@ Gem::Specification.new do |s|
|
|
42
42
|
s.add_dependency 'net-ssh'
|
43
43
|
s.add_dependency 'net-sftp'
|
44
44
|
s.add_dependency 'solve', '>= 0.4.4'
|
45
|
-
s.add_dependency 'ridley-connectors', '~> 1.
|
45
|
+
s.add_dependency 'ridley-connectors', '~> 1.7.1'
|
46
46
|
s.add_dependency 'thor', '~> 0.18.0'
|
47
47
|
s.add_dependency 'faraday', '< 0.9.0'
|
48
48
|
s.add_dependency 'faraday_middleware'
|
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: motherbrain
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Jamie Winsor
|
@@ -15,11 +16,12 @@ authors:
|
|
15
16
|
autorequire:
|
16
17
|
bindir: bin
|
17
18
|
cert_chain: []
|
18
|
-
date: 2014-
|
19
|
+
date: 2014-04-01 00:00:00.000000000 Z
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: celluloid
|
22
23
|
requirement: !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
23
25
|
requirements:
|
24
26
|
- - ~>
|
25
27
|
- !ruby/object:Gem::Version
|
@@ -27,6 +29,7 @@ dependencies:
|
|
27
29
|
type: :runtime
|
28
30
|
prerelease: false
|
29
31
|
version_requirements: !ruby/object:Gem::Requirement
|
32
|
+
none: false
|
30
33
|
requirements:
|
31
34
|
- - ~>
|
32
35
|
- !ruby/object:Gem::Version
|
@@ -34,6 +37,7 @@ dependencies:
|
|
34
37
|
- !ruby/object:Gem::Dependency
|
35
38
|
name: reel
|
36
39
|
requirement: !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
37
41
|
requirements:
|
38
42
|
- - ~>
|
39
43
|
- !ruby/object:Gem::Version
|
@@ -41,6 +45,7 @@ dependencies:
|
|
41
45
|
type: :runtime
|
42
46
|
prerelease: false
|
43
47
|
version_requirements: !ruby/object:Gem::Requirement
|
48
|
+
none: false
|
44
49
|
requirements:
|
45
50
|
- - ~>
|
46
51
|
- !ruby/object:Gem::Version
|
@@ -48,20 +53,23 @@ dependencies:
|
|
48
53
|
- !ruby/object:Gem::Dependency
|
49
54
|
name: reel-rack
|
50
55
|
requirement: !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
51
57
|
requirements:
|
52
|
-
- - '>='
|
58
|
+
- - ! '>='
|
53
59
|
- !ruby/object:Gem::Version
|
54
60
|
version: '0'
|
55
61
|
type: :runtime
|
56
62
|
prerelease: false
|
57
63
|
version_requirements: !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
58
65
|
requirements:
|
59
|
-
- - '>='
|
66
|
+
- - ! '>='
|
60
67
|
- !ruby/object:Gem::Version
|
61
68
|
version: '0'
|
62
69
|
- !ruby/object:Gem::Dependency
|
63
70
|
name: grape
|
64
71
|
requirement: !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
65
73
|
requirements:
|
66
74
|
- - ~>
|
67
75
|
- !ruby/object:Gem::Version
|
@@ -69,6 +77,7 @@ dependencies:
|
|
69
77
|
type: :runtime
|
70
78
|
prerelease: false
|
71
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
72
81
|
requirements:
|
73
82
|
- - ~>
|
74
83
|
- !ruby/object:Gem::Version
|
@@ -76,62 +85,71 @@ dependencies:
|
|
76
85
|
- !ruby/object:Gem::Dependency
|
77
86
|
name: net-ssh
|
78
87
|
requirement: !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
79
89
|
requirements:
|
80
|
-
- - '>='
|
90
|
+
- - ! '>='
|
81
91
|
- !ruby/object:Gem::Version
|
82
92
|
version: '0'
|
83
93
|
type: :runtime
|
84
94
|
prerelease: false
|
85
95
|
version_requirements: !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
86
97
|
requirements:
|
87
|
-
- - '>='
|
98
|
+
- - ! '>='
|
88
99
|
- !ruby/object:Gem::Version
|
89
100
|
version: '0'
|
90
101
|
- !ruby/object:Gem::Dependency
|
91
102
|
name: net-sftp
|
92
103
|
requirement: !ruby/object:Gem::Requirement
|
104
|
+
none: false
|
93
105
|
requirements:
|
94
|
-
- - '>='
|
106
|
+
- - ! '>='
|
95
107
|
- !ruby/object:Gem::Version
|
96
108
|
version: '0'
|
97
109
|
type: :runtime
|
98
110
|
prerelease: false
|
99
111
|
version_requirements: !ruby/object:Gem::Requirement
|
112
|
+
none: false
|
100
113
|
requirements:
|
101
|
-
- - '>='
|
114
|
+
- - ! '>='
|
102
115
|
- !ruby/object:Gem::Version
|
103
116
|
version: '0'
|
104
117
|
- !ruby/object:Gem::Dependency
|
105
118
|
name: solve
|
106
119
|
requirement: !ruby/object:Gem::Requirement
|
120
|
+
none: false
|
107
121
|
requirements:
|
108
|
-
- - '>='
|
122
|
+
- - ! '>='
|
109
123
|
- !ruby/object:Gem::Version
|
110
124
|
version: 0.4.4
|
111
125
|
type: :runtime
|
112
126
|
prerelease: false
|
113
127
|
version_requirements: !ruby/object:Gem::Requirement
|
128
|
+
none: false
|
114
129
|
requirements:
|
115
|
-
- - '>='
|
130
|
+
- - ! '>='
|
116
131
|
- !ruby/object:Gem::Version
|
117
132
|
version: 0.4.4
|
118
133
|
- !ruby/object:Gem::Dependency
|
119
134
|
name: ridley-connectors
|
120
135
|
requirement: !ruby/object:Gem::Requirement
|
136
|
+
none: false
|
121
137
|
requirements:
|
122
138
|
- - ~>
|
123
139
|
- !ruby/object:Gem::Version
|
124
|
-
version: 1.
|
140
|
+
version: 1.7.1
|
125
141
|
type: :runtime
|
126
142
|
prerelease: false
|
127
143
|
version_requirements: !ruby/object:Gem::Requirement
|
144
|
+
none: false
|
128
145
|
requirements:
|
129
146
|
- - ~>
|
130
147
|
- !ruby/object:Gem::Version
|
131
|
-
version: 1.
|
148
|
+
version: 1.7.1
|
132
149
|
- !ruby/object:Gem::Dependency
|
133
150
|
name: thor
|
134
151
|
requirement: !ruby/object:Gem::Requirement
|
152
|
+
none: false
|
135
153
|
requirements:
|
136
154
|
- - ~>
|
137
155
|
- !ruby/object:Gem::Version
|
@@ -139,6 +157,7 @@ dependencies:
|
|
139
157
|
type: :runtime
|
140
158
|
prerelease: false
|
141
159
|
version_requirements: !ruby/object:Gem::Requirement
|
160
|
+
none: false
|
142
161
|
requirements:
|
143
162
|
- - ~>
|
144
163
|
- !ruby/object:Gem::Version
|
@@ -146,6 +165,7 @@ dependencies:
|
|
146
165
|
- !ruby/object:Gem::Dependency
|
147
166
|
name: faraday
|
148
167
|
requirement: !ruby/object:Gem::Requirement
|
168
|
+
none: false
|
149
169
|
requirements:
|
150
170
|
- - <
|
151
171
|
- !ruby/object:Gem::Version
|
@@ -153,6 +173,7 @@ dependencies:
|
|
153
173
|
type: :runtime
|
154
174
|
prerelease: false
|
155
175
|
version_requirements: !ruby/object:Gem::Requirement
|
176
|
+
none: false
|
156
177
|
requirements:
|
157
178
|
- - <
|
158
179
|
- !ruby/object:Gem::Version
|
@@ -160,34 +181,39 @@ dependencies:
|
|
160
181
|
- !ruby/object:Gem::Dependency
|
161
182
|
name: faraday_middleware
|
162
183
|
requirement: !ruby/object:Gem::Requirement
|
184
|
+
none: false
|
163
185
|
requirements:
|
164
|
-
- - '>='
|
186
|
+
- - ! '>='
|
165
187
|
- !ruby/object:Gem::Version
|
166
188
|
version: '0'
|
167
189
|
type: :runtime
|
168
190
|
prerelease: false
|
169
191
|
version_requirements: !ruby/object:Gem::Requirement
|
192
|
+
none: false
|
170
193
|
requirements:
|
171
|
-
- - '>='
|
194
|
+
- - ! '>='
|
172
195
|
- !ruby/object:Gem::Version
|
173
196
|
version: '0'
|
174
197
|
- !ruby/object:Gem::Dependency
|
175
198
|
name: multi_json
|
176
199
|
requirement: !ruby/object:Gem::Requirement
|
200
|
+
none: false
|
177
201
|
requirements:
|
178
|
-
- - '>='
|
202
|
+
- - ! '>='
|
179
203
|
- !ruby/object:Gem::Version
|
180
204
|
version: '0'
|
181
205
|
type: :runtime
|
182
206
|
prerelease: false
|
183
207
|
version_requirements: !ruby/object:Gem::Requirement
|
208
|
+
none: false
|
184
209
|
requirements:
|
185
|
-
- - '>='
|
210
|
+
- - ! '>='
|
186
211
|
- !ruby/object:Gem::Version
|
187
212
|
version: '0'
|
188
213
|
- !ruby/object:Gem::Dependency
|
189
214
|
name: fog
|
190
215
|
requirement: !ruby/object:Gem::Requirement
|
216
|
+
none: false
|
191
217
|
requirements:
|
192
218
|
- - ~>
|
193
219
|
- !ruby/object:Gem::Version
|
@@ -195,6 +221,7 @@ dependencies:
|
|
195
221
|
type: :runtime
|
196
222
|
prerelease: false
|
197
223
|
version_requirements: !ruby/object:Gem::Requirement
|
224
|
+
none: false
|
198
225
|
requirements:
|
199
226
|
- - ~>
|
200
227
|
- !ruby/object:Gem::Version
|
@@ -202,20 +229,23 @@ dependencies:
|
|
202
229
|
- !ruby/object:Gem::Dependency
|
203
230
|
name: json
|
204
231
|
requirement: !ruby/object:Gem::Requirement
|
232
|
+
none: false
|
205
233
|
requirements:
|
206
|
-
- - '>='
|
234
|
+
- - ! '>='
|
207
235
|
- !ruby/object:Gem::Version
|
208
236
|
version: 1.8.0
|
209
237
|
type: :runtime
|
210
238
|
prerelease: false
|
211
239
|
version_requirements: !ruby/object:Gem::Requirement
|
240
|
+
none: false
|
212
241
|
requirements:
|
213
|
-
- - '>='
|
242
|
+
- - ! '>='
|
214
243
|
- !ruby/object:Gem::Version
|
215
244
|
version: 1.8.0
|
216
245
|
- !ruby/object:Gem::Dependency
|
217
246
|
name: buff-config
|
218
247
|
requirement: !ruby/object:Gem::Requirement
|
248
|
+
none: false
|
219
249
|
requirements:
|
220
250
|
- - ~>
|
221
251
|
- !ruby/object:Gem::Version
|
@@ -223,6 +253,7 @@ dependencies:
|
|
223
253
|
type: :runtime
|
224
254
|
prerelease: false
|
225
255
|
version_requirements: !ruby/object:Gem::Requirement
|
256
|
+
none: false
|
226
257
|
requirements:
|
227
258
|
- - ~>
|
228
259
|
- !ruby/object:Gem::Version
|
@@ -230,6 +261,7 @@ dependencies:
|
|
230
261
|
- !ruby/object:Gem::Dependency
|
231
262
|
name: buff-extensions
|
232
263
|
requirement: !ruby/object:Gem::Requirement
|
264
|
+
none: false
|
233
265
|
requirements:
|
234
266
|
- - ~>
|
235
267
|
- !ruby/object:Gem::Version
|
@@ -237,6 +269,7 @@ dependencies:
|
|
237
269
|
type: :runtime
|
238
270
|
prerelease: false
|
239
271
|
version_requirements: !ruby/object:Gem::Requirement
|
272
|
+
none: false
|
240
273
|
requirements:
|
241
274
|
- - ~>
|
242
275
|
- !ruby/object:Gem::Version
|
@@ -244,6 +277,7 @@ dependencies:
|
|
244
277
|
- !ruby/object:Gem::Dependency
|
245
278
|
name: buff-platform
|
246
279
|
requirement: !ruby/object:Gem::Requirement
|
280
|
+
none: false
|
247
281
|
requirements:
|
248
282
|
- - ~>
|
249
283
|
- !ruby/object:Gem::Version
|
@@ -251,6 +285,7 @@ dependencies:
|
|
251
285
|
type: :runtime
|
252
286
|
prerelease: false
|
253
287
|
version_requirements: !ruby/object:Gem::Requirement
|
288
|
+
none: false
|
254
289
|
requirements:
|
255
290
|
- - ~>
|
256
291
|
- !ruby/object:Gem::Version
|
@@ -258,6 +293,7 @@ dependencies:
|
|
258
293
|
- !ruby/object:Gem::Dependency
|
259
294
|
name: buff-ruby_engine
|
260
295
|
requirement: !ruby/object:Gem::Requirement
|
296
|
+
none: false
|
261
297
|
requirements:
|
262
298
|
- - ~>
|
263
299
|
- !ruby/object:Gem::Version
|
@@ -265,6 +301,7 @@ dependencies:
|
|
265
301
|
type: :runtime
|
266
302
|
prerelease: false
|
267
303
|
version_requirements: !ruby/object:Gem::Requirement
|
304
|
+
none: false
|
268
305
|
requirements:
|
269
306
|
- - ~>
|
270
307
|
- !ruby/object:Gem::Version
|
@@ -272,6 +309,7 @@ dependencies:
|
|
272
309
|
- !ruby/object:Gem::Dependency
|
273
310
|
name: grape-swagger
|
274
311
|
requirement: !ruby/object:Gem::Requirement
|
312
|
+
none: false
|
275
313
|
requirements:
|
276
314
|
- - ~>
|
277
315
|
- !ruby/object:Gem::Version
|
@@ -279,6 +317,7 @@ dependencies:
|
|
279
317
|
type: :runtime
|
280
318
|
prerelease: false
|
281
319
|
version_requirements: !ruby/object:Gem::Requirement
|
320
|
+
none: false
|
282
321
|
requirements:
|
283
322
|
- - ~>
|
284
323
|
- !ruby/object:Gem::Version
|
@@ -286,6 +325,7 @@ dependencies:
|
|
286
325
|
- !ruby/object:Gem::Dependency
|
287
326
|
name: berkshelf
|
288
327
|
requirement: !ruby/object:Gem::Requirement
|
328
|
+
none: false
|
289
329
|
requirements:
|
290
330
|
- - ~>
|
291
331
|
- !ruby/object:Gem::Version
|
@@ -293,6 +333,7 @@ dependencies:
|
|
293
333
|
type: :runtime
|
294
334
|
prerelease: false
|
295
335
|
version_requirements: !ruby/object:Gem::Requirement
|
336
|
+
none: false
|
296
337
|
requirements:
|
297
338
|
- - ~>
|
298
339
|
- !ruby/object:Gem::Version
|
@@ -576,26 +617,33 @@ files:
|
|
576
617
|
homepage: https://github.com/RiotGames/motherbrain
|
577
618
|
licenses:
|
578
619
|
- Apache 2.0
|
579
|
-
metadata: {}
|
580
620
|
post_install_message:
|
581
621
|
rdoc_options: []
|
582
622
|
require_paths:
|
583
623
|
- lib
|
584
624
|
required_ruby_version: !ruby/object:Gem::Requirement
|
625
|
+
none: false
|
585
626
|
requirements:
|
586
|
-
- - '>='
|
627
|
+
- - ! '>='
|
587
628
|
- !ruby/object:Gem::Version
|
588
629
|
version: '0'
|
630
|
+
segments:
|
631
|
+
- 0
|
632
|
+
hash: 3921402493733653067
|
589
633
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
634
|
+
none: false
|
590
635
|
requirements:
|
591
|
-
- - '>='
|
636
|
+
- - ! '>='
|
592
637
|
- !ruby/object:Gem::Version
|
593
638
|
version: '0'
|
639
|
+
segments:
|
640
|
+
- 0
|
641
|
+
hash: 3921402493733653067
|
594
642
|
requirements: []
|
595
643
|
rubyforge_project:
|
596
|
-
rubygems_version:
|
644
|
+
rubygems_version: 1.8.23
|
597
645
|
signing_key:
|
598
|
-
specification_version:
|
646
|
+
specification_version: 3
|
599
647
|
summary: An orchestrator for Chef
|
600
648
|
test_files:
|
601
649
|
- features/cli/bootstrap_command/configurable_scripts.feature
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 487c01b8a8a569d17138c7208f165139864ef4ff
|
4
|
-
data.tar.gz: 98c88f8faa6ab6470bfe0d59cc34fcb85eb14f77
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: c21287087e19aa6bec75950753a4f5b72036a8f034d92e3948c9e535b39d1c90a79039e2ab9695b08248b67af5e67c8d4be742ec387307d7cbf8e1b38a827913
|
7
|
-
data.tar.gz: 906a7a13e369811987d7c83563787f317ca0e2b16ef21e618e78e5deb3064a8eb566bd5665c291210743b9b04650887d42336d31abecfb53d962e82c06192748
|