nuri 0.5.2 → 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/VERSION +1 -1
- data/bin/nuri +110 -82
- data/bin/{install_module → nuri-install-module} +7 -4
- data/bin/{sfw2graph → nuri-sfwgraph} +7 -6
- data/bin/nuri-uninstall-module +45 -0
- data/examples/.gitignore +1 -0
- data/examples/mockcloud/generator.rb +14 -58
- data/examples/mockcloud/generator.rb.bak +66 -0
- data/examples/mockcloud/hadoop2.sfp.template +25 -0
- data/lib/nuri.rb +5 -7
- data/lib/nuri/choreographer.rb +8 -8
- data/lib/nuri/helper.rb +10 -3
- data/lib/nuri/master.rb +53 -15
- data/lib/nuri/orchestrator.rb +34 -29
- data/modules/apache2/apache2.rb +9 -0
- data/modules/apache2/apache2.sfp +54 -0
- data/modules/file/file.rb +1 -1
- data/modules/file/file.sfp +1 -1
- data/modules/machine/machine.rb +17 -0
- data/modules/package2/package2.rb +85 -0
- data/modules/package2/package2.sfp +23 -0
- data/modules/pyfile/main +133 -0
- data/modules/pyfile/pyfile.sfp +23 -0
- data/modules/service2/service2.rb +62 -0
- data/modules/service2/service2.sfp +24 -0
- data/nuri.gemspec +1 -1
- metadata +17 -11
- data/bin/delete_modules +0 -35
- data/bin/nuri.old +0 -183
- data/modules/install_module +0 -54
- data/modules/service/model.json +0 -1
- data/modules/service/test.sfp +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 52435655f176b90c016bb5f1ae94348f03c480c7
|
4
|
+
data.tar.gz: 12e8e06d2689353bb6fd3dfe2b8047b709ba8d20
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fbe8ac30498b9f0c672dcf429d6c7a5e7178e00a24c50c725cd95d1472d06d570e0a35121913d266c112b797c4af141ad16b2bd0870c7899006484102093dadf
|
7
|
+
data.tar.gz: da39e1869ccf6eae68622497fe2f99c6143079dc57aa8675a6a6ebc2584f28c51d4477587e86359273c8c763537657bc4bf3c32c4dd0220e52ed6b0c9a5c9684
|
data/.travis.yml
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.3
|
data/bin/nuri
CHANGED
@@ -8,11 +8,6 @@ About = "Nuri #{Version} (c) 2013"
|
|
8
8
|
|
9
9
|
Nuri.init
|
10
10
|
|
11
|
-
def console(*args)
|
12
|
-
print Time.now.strftime('%Y-%m-%d %H:%M:%S '.yellow)
|
13
|
-
$stdout.puts(args)
|
14
|
-
end
|
15
|
-
|
16
11
|
class Nuri::Console
|
17
12
|
include Nuri::Helper
|
18
13
|
|
@@ -37,7 +32,7 @@ where [options] are:
|
|
37
32
|
EOS
|
38
33
|
opt :model_file, 'file contains a model of desired state', :default => Nuri.main, :short => '-m'
|
39
34
|
opt :json, 'print output in JSON'
|
40
|
-
opt :
|
35
|
+
opt :color, 'enable colorized output'
|
41
36
|
opt :no_push_module, 'disable automatic push module'
|
42
37
|
end
|
43
38
|
help, args = check_help(args)
|
@@ -54,9 +49,10 @@ EOS
|
|
54
49
|
state.accept(Sfp::Helper::Sfp2Ruby)
|
55
50
|
|
56
51
|
if opts[:json]
|
57
|
-
puts (opts[:
|
52
|
+
puts (!opts[:color] ? JSON.generate(state) : CodeRay.encode(JSON.pretty_generate(state), :json, :terminal))
|
58
53
|
else
|
59
|
-
puts (opts[:
|
54
|
+
puts (!opts[:color] ? YAML.dump(state) : CodeRay.encode(YAML.dump(state), :yaml, :terminal))
|
55
|
+
|
60
56
|
end
|
61
57
|
else
|
62
58
|
$stderr.puts "Model file '#{opts[:model_file]}' is not exist! Use \"-h\" option for more details.".red
|
@@ -73,7 +69,8 @@ EOS
|
|
73
69
|
opt :model_file, 'file contains a model of desired state', :default => Nuri.main, :short => '-m'
|
74
70
|
opt :parallel, 'generate a parallel plan', :short => '-l'
|
75
71
|
opt :apply, 'generate and execute a plan', :short => '-a'
|
76
|
-
opt :
|
72
|
+
opt :json, 'print the plan in JSON'
|
73
|
+
opt :color, 'enable colorized output'
|
77
74
|
opt :no_interactive, 'disable interactive input'
|
78
75
|
opt :no_push_module, 'disable automatic push module'
|
79
76
|
opt :image, 'image graph of the generated plan', :default => Dir.home + '/.nuri/plan.png'
|
@@ -83,6 +80,7 @@ EOS
|
|
83
80
|
|
84
81
|
if help
|
85
82
|
parser.educate(STDOUT)
|
83
|
+
|
86
84
|
elsif File.exist?(opts[:model_file])
|
87
85
|
opts[:plan] = true
|
88
86
|
opts[:push_modules] = true if !opts[:no_push_module]
|
@@ -95,22 +93,25 @@ EOS
|
|
95
93
|
File.open(plan_file, 'w') { |f| f.write(JSON.generate(plan)) }
|
96
94
|
|
97
95
|
if opts[:image]
|
98
|
-
system "#{File.dirname(__FILE__)}/
|
96
|
+
system "#{File.dirname(__FILE__)}/nuri-sfwgraph #{plan_file} #{opts[:image]}"
|
99
97
|
end
|
100
98
|
|
101
|
-
if opts[:
|
102
|
-
|
99
|
+
if opts[:json]
|
100
|
+
json = JSON.pretty_generate(plan)
|
101
|
+
puts (opts[:color] ? CodeRay.encode(json, :json, :terminal) : json)
|
102
|
+
|
103
103
|
else
|
104
104
|
actions = plan['workflow']
|
105
105
|
if plan['type'] == 'sequential'
|
106
|
-
p = 'Sequential Plan:'
|
106
|
+
p = 'Sequential Plan:'
|
107
107
|
actions.each_index { |i| p += "\n#{i+1}. #{actions[i]['name']} #{JSON.generate(actions[i]['parameters'])}" }
|
108
108
|
puts p
|
109
109
|
else
|
110
|
-
p = 'Partial-Order Plan:'
|
110
|
+
p = 'Partial-Order Plan:'
|
111
111
|
actions.each { |op| p += "\n#{op['id']+1}. #{op['name']} #{JSON.generate(op['parameters'])} (#{op['predecessors'].map{|i|i+1}}, #{op['successors'].map{|i|i+1}})" }
|
112
112
|
puts p
|
113
113
|
end
|
114
|
+
|
114
115
|
end
|
115
116
|
|
116
117
|
if not opts[:apply] and not opts[:no_interactive]
|
@@ -119,23 +120,23 @@ EOS
|
|
119
120
|
end
|
120
121
|
|
121
122
|
if opts[:apply]
|
122
|
-
puts 'Executing the plan:
|
123
|
+
puts 'Executing the plan:'
|
123
124
|
opts[:plan] = plan
|
124
125
|
if master.execute_plan(opts)
|
125
|
-
puts "Execution success
|
126
|
+
puts (opts[:color] ? "Execution success.".green : "Execution success.")
|
126
127
|
else
|
127
|
-
puts "Execution failed
|
128
|
+
puts (opts[:color] ? "Execution failed.".red : "Execution failed.")
|
128
129
|
end
|
129
130
|
end
|
130
131
|
|
131
132
|
elsif plan['workflow'].length == 0
|
132
|
-
puts (opts[:
|
133
|
+
puts (opts[:color] ? "Goal state has been achieved.".green : "Goal state has been achieved.")
|
133
134
|
end
|
134
135
|
else
|
135
|
-
$stderr.puts (opts[:
|
136
|
+
$stderr.puts (opts[:color] ? "No solution.".red : "No solution.")
|
136
137
|
end
|
137
138
|
else
|
138
|
-
$stderr.puts "Model file '#{opts[:model_file]}' is not exist! Use \"-h\" option for more details."
|
139
|
+
$stderr.puts "Model file '#{opts[:model_file]}' is not exist! Use \"-h\" option for more details."
|
139
140
|
end
|
140
141
|
end
|
141
142
|
|
@@ -148,7 +149,7 @@ EOS
|
|
148
149
|
opt :model_file, 'file contains a model of desired state', :default => Nuri.main, :short => '-m'
|
149
150
|
opt :purge, 'purge existing BSig model', :short => '-g'
|
150
151
|
opt :deploy, 'generate and then deploy a BSig model'
|
151
|
-
opt :
|
152
|
+
opt :color, 'enable colorized output'
|
152
153
|
opt :no_interactive, 'disable interactive input'
|
153
154
|
end
|
154
155
|
help, args = check_help(args)
|
@@ -163,21 +164,20 @@ EOS
|
|
163
164
|
master.set_model(opts)
|
164
165
|
|
165
166
|
if opts[:purge]
|
167
|
+
print "Purging Behavioural Signature model "
|
166
168
|
if master.purge_bsig(opts)
|
167
|
-
puts
|
169
|
+
puts (opts[:color] ? "[OK]".green : "[OK]")
|
168
170
|
else
|
169
|
-
puts
|
171
|
+
puts (opts[:color] ? "[Failed]".red : "[Failed]")
|
170
172
|
end
|
173
|
+
|
171
174
|
else
|
172
175
|
bsig = master.get_bsig(opts)
|
173
176
|
if bsig.is_a?(Hash) and bsig.length > 0
|
174
177
|
empty_local_bsig = bsig.select { |name,local_bsig| local_bsig['operators'].length <= 0 }
|
175
178
|
if empty_local_bsig.length != bsig.length
|
176
|
-
|
177
|
-
|
178
|
-
else
|
179
|
-
puts CodeRay.encode(JSON.pretty_generate(bsig), :json, :terminal)
|
180
|
-
end
|
179
|
+
json = JSON.pretty_generate(bsig)
|
180
|
+
puts (opts[:color] ? CodeRay.encode(json, :json, :terminal) : json)
|
181
181
|
|
182
182
|
if not opts[:no_interactive] and not opts[:deploy]
|
183
183
|
print "Deploy the BSig model [y/N]? "
|
@@ -185,23 +185,23 @@ EOS
|
|
185
185
|
end
|
186
186
|
|
187
187
|
if opts[:deploy]
|
188
|
-
|
188
|
+
print 'Deploying the BSig model '
|
189
189
|
opts[:bsig] = bsig
|
190
190
|
if master.deploy_bsig(opts)
|
191
|
-
puts
|
191
|
+
puts (opts[:color] ? "[OK]".green : "[OK]")
|
192
192
|
else
|
193
|
-
puts
|
193
|
+
puts (opts[:color] ? "[Failed]".red : "[Failed]")
|
194
194
|
end
|
195
195
|
end
|
196
196
|
else
|
197
|
-
puts (opts[:
|
197
|
+
puts (opts[:color] ? "Goal state has been achieved.".green : "Goal state has been achieved.")
|
198
198
|
end
|
199
199
|
else
|
200
|
-
$stderr.puts (opts[:
|
200
|
+
$stderr.puts (opts[:color] ? "No solution.".red : "No solution.")
|
201
201
|
end
|
202
202
|
end
|
203
203
|
else
|
204
|
-
$stderr.puts "Model file '#{opts[:model_file]}' is not exist! Use \"-h\" option for more details."
|
204
|
+
$stderr.puts "Model file '#{opts[:model_file]}' is not exist! Use \"-h\" option for more details."
|
205
205
|
end
|
206
206
|
end
|
207
207
|
|
@@ -216,13 +216,15 @@ where <subcommand> is:
|
|
216
216
|
restart restart the agent (use SSH for remode node)
|
217
217
|
stop stop the agent (use SSH for remote node)
|
218
218
|
status get status (use SSH for remote node)
|
219
|
+
reset delete all modules, model (desired state), bsig-model,
|
220
|
+
and agents list
|
219
221
|
state get current state
|
220
222
|
model get current model
|
221
223
|
bsig get current Behavioural Signature model
|
222
224
|
exec <action> execute given action description
|
223
225
|
<action> := <path> [param1=value1 param2=value2 ...]
|
224
226
|
module get modules list
|
225
|
-
log get last 100 lines of logs
|
227
|
+
log get last 100 lines of agent's logs file
|
226
228
|
list list of available agents from model file
|
227
229
|
|
228
230
|
where [options] are:
|
@@ -233,6 +235,7 @@ EOS
|
|
233
235
|
opt :ssh_user, "SSH username", :short => '-u', :default => 'root'
|
234
236
|
opt :ssh_port, "SSH port", :short => '-p', :default => '22'
|
235
237
|
opt :raw, "print a RAW output"
|
238
|
+
opt :color, "enable colorized output"
|
236
239
|
end
|
237
240
|
help, args = check_help(args)
|
238
241
|
subcommand = (args.length > 0 ? args.shift : '')
|
@@ -248,26 +251,26 @@ EOS
|
|
248
251
|
parser.educate(STDOUT)
|
249
252
|
elsif `which sfpagent`.strip.length > 0 or ssh_opt.length > 0
|
250
253
|
case subcommand
|
251
|
-
when 'install'
|
254
|
+
when 'i', 'install'
|
252
255
|
system("#{ssh_opt} sudo gem install sfpagent --no-ri --no-rdoc")
|
253
256
|
|
254
|
-
when 'start'
|
257
|
+
when 's', 'start'
|
255
258
|
system "#{ssh_opt} sfpagent -s && sleep 5"
|
256
259
|
system "#{ssh_opt} sfpagent -a"
|
257
260
|
|
258
|
-
when 'restart'
|
261
|
+
when 'r', 'restart'
|
259
262
|
system "#{ssh_opt} sfpagent -r"
|
260
263
|
|
261
|
-
when 'stop'
|
264
|
+
when 't', 'stop'
|
262
265
|
system("#{ssh_opt} sfpagent -t")
|
263
266
|
|
264
|
-
when 'status'
|
267
|
+
when 'a', 'status'
|
265
268
|
system("#{ssh_opt} sfpagent -a")
|
266
269
|
|
267
270
|
when 'upgrade'
|
268
271
|
system("#{ssh_opt} sudo gem update sfpagent --no-ri --no-rdoc")
|
269
272
|
|
270
|
-
when 'state'
|
273
|
+
when 'e', 'state'
|
271
274
|
code, state = get_data(opts[:address], 1314, "/state")
|
272
275
|
if code == '200' and state =~ /{.*}/
|
273
276
|
state = JSON[state]['state']
|
@@ -275,47 +278,51 @@ EOS
|
|
275
278
|
state.keys.each { |key| state.delete(key) if state[key]['_context'] != 'object' }
|
276
279
|
state.accept(Sfp::Helper::Sfp2Ruby)
|
277
280
|
end
|
278
|
-
puts CodeRay.encode(YAML.dump(state), :yaml, :terminal)
|
281
|
+
puts (opts[:color] ? CodeRay.encode(YAML.dump(state), :yaml, :terminal) : YAML.dump(state))
|
282
|
+
|
279
283
|
else
|
280
284
|
puts state
|
285
|
+
|
281
286
|
end
|
282
287
|
|
283
|
-
when 'model'
|
288
|
+
when 'm', 'model'
|
284
289
|
code, model = get_data(opts[:address], 1314, "/model")
|
285
|
-
if code == '200' and model =~ /{
|
290
|
+
if code == '200' and model =~ /{.+}/
|
286
291
|
model = JSON[model]
|
287
292
|
if not opts[:raw]
|
288
293
|
model.select! { |k,v| k[0,1] != '_' and (not v.is_a?(Hash) or v['_context'] == 'object') }
|
289
294
|
model.accept(Sfp::Helper::Sfp2Ruby)
|
290
295
|
end
|
291
|
-
puts CodeRay.encode(YAML.dump(model), :yaml, :terminal)
|
292
|
-
elsif code == '404'
|
293
|
-
puts "
|
296
|
+
puts (opts[:color] ? CodeRay.encode(YAML.dump(model), :yaml, :terminal) : YAML.dump(model))
|
297
|
+
elsif code == '404' or model == '{}'
|
298
|
+
puts "Model of desired state is not exist."
|
294
299
|
else
|
295
300
|
$stderr.puts "Error: #{code}"
|
296
301
|
end
|
297
302
|
|
298
|
-
when 'bsig'
|
299
|
-
code,
|
300
|
-
if code == '200' and
|
301
|
-
|
302
|
-
|
303
|
-
|
303
|
+
when 'b', 'bsig'
|
304
|
+
code, bsig = get_data(opts[:address], 1314, "/bsig")
|
305
|
+
if code == '200' and bsig =~ /{.+}/
|
306
|
+
json = JSON.pretty_generate(JSON[json])
|
307
|
+
puts (opts[:color] ? CodeRay.encode(json, :json, :terminal) : json)
|
308
|
+
elsif code == '404' or bsig == '{}'
|
309
|
+
puts 'Behavioural Signature model is not exist.'
|
304
310
|
else
|
305
311
|
$stderr.puts "Error: #{code}"
|
306
312
|
end
|
307
313
|
|
308
|
-
when 'module'
|
309
|
-
code,
|
310
|
-
if code == '200' and
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
+
when 'mod', 'module', 'modules'
|
315
|
+
code, modules = get_data(opts[:address], 1314, "/modules")
|
316
|
+
if code == '200' and modules =~ /{.+}/
|
317
|
+
output = YAML.dump(JSON[modules])
|
318
|
+
puts (opts[:color] ? CodeRay.encode(output, :yaml, :terminal) : output)
|
319
|
+
elsif code == '404' or modules == '{}'
|
320
|
+
puts 'No module is available.'
|
314
321
|
else
|
315
322
|
$stderr.puts "Error: #{code}"
|
316
323
|
end
|
317
324
|
|
318
|
-
when 'exec', 'execute'
|
325
|
+
when 'x', 'exec', 'execute'
|
319
326
|
if args.length > 0
|
320
327
|
name = args.shift
|
321
328
|
name = '$.' + name if !name.isref
|
@@ -328,25 +335,44 @@ EOS
|
|
328
335
|
end
|
329
336
|
data = { 'action' => JSON.generate({ 'name' => name, 'parameters' => parameters }) }
|
330
337
|
code, _ = post_data(opts[:address], 1314, "/execute", data)
|
331
|
-
|
338
|
+
if opts[:color]
|
339
|
+
puts (code == '200' ? "Executing #{name} [OK]".green : "Executing #{name} [Failed]".red)
|
340
|
+
else
|
341
|
+
puts (code == '200' ? "Executing #{name} [OK]" : "Executing #{name} [Failed]")
|
342
|
+
end
|
332
343
|
else
|
333
344
|
$stderr.puts 'Invalid parameters (usage: agent exec <action-path> [action-arguments]).'
|
334
345
|
end
|
335
346
|
|
336
|
-
when 'log'
|
347
|
+
when 'g', 'log', 'logs'
|
337
348
|
puts Net::HTTP.get "#{opts[:address]}", "/log", 1314
|
338
349
|
|
339
|
-
when 'list'
|
350
|
+
when 'l', 'list'
|
340
351
|
get_agents(opts).each { |name,model| puts "#{name} address=#{model['sfpAddress']} port=#{model['sfpPort']}" }
|
341
352
|
|
342
|
-
when '
|
353
|
+
when 'reset'
|
354
|
+
codes = []
|
355
|
+
codes[0], _ = delete_data(opts[:address], 1314, "/bsig")
|
356
|
+
codes[1], _ = delete_data(opts[:address], 1314, "/model/cache")
|
357
|
+
codes[2], _ = delete_data(opts[:address], 1314, "/model")
|
358
|
+
codes[3], _ = delete_data(opts[:address], 1314, "/modules")
|
359
|
+
codes[4], _ = delete_data(opts[:address], 1314, "/agents")
|
360
|
+
|
361
|
+
failed = codes.index { |x| x != '200' }
|
362
|
+
if opts[:color]
|
363
|
+
puts (failed ? "Reset agent [Failed]".red : "Reset agent [OK]".green)
|
364
|
+
else
|
365
|
+
puts (failed ? "Reset agent [Failed]" : "Reset agent [OK]")
|
366
|
+
end
|
367
|
+
|
368
|
+
when 'h', 'help'
|
343
369
|
parser.educate(STDOUT)
|
344
370
|
|
345
371
|
else
|
346
|
-
$stderr.puts 'Unrecognized command! Use
|
372
|
+
$stderr.puts 'Unrecognized command! Use -h to print available commands.'
|
347
373
|
end
|
348
374
|
else
|
349
|
-
$stderr.puts 'sfpagent gem is not installed!'
|
375
|
+
$stderr.puts 'sfpagent gem is not installed!'
|
350
376
|
end
|
351
377
|
end
|
352
378
|
|
@@ -382,7 +408,8 @@ EOS
|
|
382
408
|
end
|
383
409
|
|
384
410
|
def do_console
|
385
|
-
|
411
|
+
parser = Trollop::Parser.new do
|
412
|
+
banner <<-EOS
|
386
413
|
Usage: <command> [options]
|
387
414
|
when <command> is:
|
388
415
|
state get current state
|
@@ -394,12 +421,13 @@ when <command> is:
|
|
394
421
|
exit exit this console
|
395
422
|
|
396
423
|
EOS
|
424
|
+
end
|
397
425
|
|
398
426
|
username = `whoami`.strip
|
399
427
|
puts About
|
400
428
|
loop do
|
401
429
|
begin
|
402
|
-
print "nuri@#{username}> ".
|
430
|
+
print "nuri@#{username}> ".cyan
|
403
431
|
begin
|
404
432
|
input = STDIN.gets
|
405
433
|
raise Exception if input.nil?
|
@@ -434,13 +462,13 @@ EOS
|
|
434
462
|
when 'pwd'
|
435
463
|
puts Dir.pwd
|
436
464
|
when 'ls'
|
437
|
-
system "ls
|
465
|
+
system "ls #{args.join(" ")}"
|
438
466
|
when 'help'
|
439
|
-
|
467
|
+
parser.educate(STDOUT)
|
440
468
|
when 'version', '-v'
|
441
469
|
puts About
|
442
470
|
else
|
443
|
-
$stderr.puts 'Unrecognized command! Use
|
471
|
+
$stderr.puts 'Unrecognized command! Use -h option to print available commands.'
|
444
472
|
end
|
445
473
|
end
|
446
474
|
rescue Exception => e
|
@@ -458,7 +486,7 @@ where [options] are:
|
|
458
486
|
EOS
|
459
487
|
opt :model_file, 'file contains a model of desired state', :default => Nuri.main, :short => '-m'
|
460
488
|
opt :json, 'print output in JSON'
|
461
|
-
opt :
|
489
|
+
opt :color, 'enable colorized output'
|
462
490
|
end
|
463
491
|
help, args = check_help(args)
|
464
492
|
opts = process_args args, parser
|
@@ -475,13 +503,13 @@ EOS
|
|
475
503
|
model.accept(Sfp::Helper::Sfp2Ruby)
|
476
504
|
|
477
505
|
if opts[:json]
|
478
|
-
puts (opts[:
|
506
|
+
puts (!opts[:color] ? JSON.generate(model) : CodeRay.encode(JSON.pretty_generate(model), :json, :terminal))
|
479
507
|
else
|
480
|
-
puts (opts[:
|
508
|
+
puts (!opts[:color] ? YAML.dump(model) : CodeRay.encode(YAML.dump(model), :yaml, :terminal))
|
481
509
|
end
|
482
510
|
|
483
511
|
else
|
484
|
-
$stderr.puts "Model file '#{opts[:model_file]}' is not exist! Use \"-h\" option for more details."
|
512
|
+
$stderr.puts "Model file '#{opts[:model_file]}' is not exist! Use \"-h\" option for more details."
|
485
513
|
|
486
514
|
end
|
487
515
|
|
@@ -503,19 +531,19 @@ EOS
|
|
503
531
|
if ARGV.length > 0
|
504
532
|
success = false
|
505
533
|
case ARGV.shift
|
506
|
-
when 'state'
|
534
|
+
when 's', 'state'
|
507
535
|
do_state
|
508
|
-
when 'plan'
|
536
|
+
when 'p', 'plan'
|
509
537
|
do_plan
|
510
|
-
when 'bsig'
|
538
|
+
when 'b', 'bsig'
|
511
539
|
do_bsig
|
512
|
-
when 'agent'
|
540
|
+
when 'a', 'agent'
|
513
541
|
do_agent
|
514
|
-
when 'console'
|
542
|
+
when 'c', 'console'
|
515
543
|
do_console
|
516
|
-
when 'edit'
|
544
|
+
when 'e', 'edit'
|
517
545
|
do_edit
|
518
|
-
when 'model'
|
546
|
+
when 'm', 'model'
|
519
547
|
do_model
|
520
548
|
else
|
521
549
|
puts banner
|