motherbrain 1.0.0 → 1.1.0
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.
- 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
|