morpheus-cli 0.9.9 → 0.9.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/morpheus/api/api_client.rb +4 -0
- data/lib/morpheus/api/app_templates_interface.rb +74 -0
- data/lib/morpheus/api/instance_types_interface.rb +9 -0
- data/lib/morpheus/api/instances_interface.rb +16 -0
- data/lib/morpheus/api/roles_interface.rb +37 -1
- data/lib/morpheus/cli.rb +4 -1
- data/lib/morpheus/cli/accounts.rb +82 -58
- data/lib/morpheus/cli/app_templates.rb +908 -0
- data/lib/morpheus/cli/apps.rb +226 -187
- data/lib/morpheus/cli/cli_command.rb +57 -30
- data/lib/morpheus/cli/clouds.rb +50 -65
- data/lib/morpheus/cli/deployments.rb +18 -33
- data/lib/morpheus/cli/deploys.rb +1 -3
- data/lib/morpheus/cli/groups.rb +54 -38
- data/lib/morpheus/cli/hosts.rb +86 -80
- data/lib/morpheus/cli/instance_types.rb +42 -29
- data/lib/morpheus/cli/instances.rb +192 -69
- data/lib/morpheus/cli/key_pairs.rb +70 -87
- data/lib/morpheus/cli/license.rb +7 -9
- data/lib/morpheus/cli/load_balancers.rb +23 -53
- data/lib/morpheus/cli/mixins/accounts_helper.rb +7 -8
- data/lib/morpheus/cli/mixins/print_helper.rb +67 -0
- data/lib/morpheus/cli/mixins/provisioning_helper.rb +461 -0
- data/lib/morpheus/cli/option_types.rb +71 -18
- data/lib/morpheus/cli/roles.rb +725 -34
- data/lib/morpheus/cli/security_group_rules.rb +50 -70
- data/lib/morpheus/cli/security_groups.rb +61 -48
- data/lib/morpheus/cli/shell.rb +123 -14
- data/lib/morpheus/cli/tasks.rb +24 -59
- data/lib/morpheus/cli/users.rb +86 -71
- data/lib/morpheus/cli/version.rb +1 -1
- data/lib/morpheus/cli/virtual_images.rb +21 -51
- data/lib/morpheus/cli/workflows.rb +14 -29
- data/lib/morpheus/ext/nil_class.rb +5 -0
- data/lib/morpheus/formatters.rb +1 -0
- metadata +7 -3
- data/lib/morpheus/cli/error_handler.rb +0 -44
data/lib/morpheus/cli/apps.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# require 'yaml'
|
2
2
|
require 'io/console'
|
3
3
|
require 'rest_client'
|
4
|
-
require 'term/ansicolor'
|
5
4
|
require 'optparse'
|
6
5
|
require 'filesize'
|
7
6
|
require 'table_print'
|
@@ -9,10 +8,17 @@ require 'morpheus/cli/cli_command'
|
|
9
8
|
|
10
9
|
class Morpheus::Cli::Apps
|
11
10
|
include Morpheus::Cli::CliCommand
|
12
|
-
|
11
|
+
|
13
12
|
def initialize()
|
14
13
|
@appliance_name, @appliance_url = Morpheus::Cli::Remote.active_appliance
|
14
|
+
end
|
15
|
+
|
16
|
+
def connect(opts)
|
15
17
|
@access_token = Morpheus::Cli::Credentials.new(@appliance_name,@appliance_url).request_credentials()
|
18
|
+
if @access_token.empty?
|
19
|
+
print_red_alert "Invalid Credentials. Unable to acquire access token. Please verify your credentials and try again."
|
20
|
+
exit 1
|
21
|
+
end
|
16
22
|
@apps_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).apps
|
17
23
|
@instance_types_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).instance_types
|
18
24
|
@apps_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).apps
|
@@ -20,13 +26,8 @@ class Morpheus::Cli::Apps
|
|
20
26
|
@active_groups = ::Morpheus::Cli::Groups.load_group_file
|
21
27
|
end
|
22
28
|
|
23
|
-
|
24
29
|
def handle(args)
|
25
|
-
|
26
|
-
print red,bold, "\nInvalid Credentials. Unable to acquire access token. Please verify your credentials and try again.\n\n",reset
|
27
|
-
return 1
|
28
|
-
end
|
29
|
-
|
30
|
+
usage = "Usage: morpheus apps [list,add,remove,stop,start,restart,resize,upgrade,clone,envs,setenv,delenv,firewall_disable,firewall_enable,security_groups,apply_security_groups] [name]"
|
30
31
|
case args[0]
|
31
32
|
when 'list'
|
32
33
|
list(args[1..-1])
|
@@ -59,27 +60,35 @@ class Morpheus::Cli::Apps
|
|
59
60
|
when 'apply_security_groups'
|
60
61
|
apply_security_groups(args[1..-1])
|
61
62
|
else
|
62
|
-
puts "\
|
63
|
+
puts "\n#{usage}\n\n"
|
64
|
+
exit 127
|
63
65
|
end
|
64
66
|
end
|
65
67
|
|
66
68
|
def add(args)
|
69
|
+
options = {}
|
70
|
+
optparse = OptionParser.new do|opts|
|
71
|
+
opts.banner = "Usage: morpheus apps add NAME TYPE"
|
72
|
+
build_common_options(opts, options, [])
|
73
|
+
end
|
74
|
+
optparse.parse(args)
|
67
75
|
if args.count < 2
|
68
|
-
puts "\
|
69
|
-
|
76
|
+
puts "\n#{optparse.banner}\n\n"
|
77
|
+
exit 1
|
70
78
|
end
|
79
|
+
connect(options)
|
71
80
|
|
72
81
|
app_name = args[0]
|
73
82
|
instance_type_code = args[1]
|
74
83
|
instance_type = find_instance_type_by_code(instance_type_code)
|
75
84
|
if instance_type.nil?
|
76
85
|
print reset,"\n\n"
|
77
|
-
|
86
|
+
exit 1
|
78
87
|
end
|
79
88
|
|
80
89
|
groupId = @active_groups[@appliance_name.to_sym]
|
81
90
|
|
82
|
-
|
91
|
+
params = {
|
83
92
|
:servicePlan => nil,
|
84
93
|
:app => {
|
85
94
|
:name => app_name,
|
@@ -108,9 +117,9 @@ class Morpheus::Cli::Apps
|
|
108
117
|
end
|
109
118
|
end
|
110
119
|
layout = instance_type['appTypeLayouts'][layout_selection-1]['id']
|
111
|
-
|
120
|
+
params[:app][:layout] = {id: layout}
|
112
121
|
print "\n"
|
113
|
-
if
|
122
|
+
if params[:servicePlan].nil?
|
114
123
|
plans = @instance_types_interface.service_plans(layout)
|
115
124
|
puts "Select a Plan: "
|
116
125
|
plans['servicePlans'].each_with_index do |plan, index|
|
@@ -125,7 +134,7 @@ class Morpheus::Cli::Apps
|
|
125
134
|
break
|
126
135
|
end
|
127
136
|
end
|
128
|
-
|
137
|
+
params[:servicePlan] = plans['servicePlans'][plan_selection-1]['id']
|
129
138
|
print "\n"
|
130
139
|
end
|
131
140
|
|
@@ -135,25 +144,20 @@ class Morpheus::Cli::Apps
|
|
135
144
|
instance_type_config['options'].each do |opt|
|
136
145
|
print "#{opt['label']}: "
|
137
146
|
if(opt['name'].downcase.include?("password"))
|
138
|
-
|
147
|
+
params[opt['name']] = STDIN.noecho(&:gets).chomp!
|
139
148
|
print "\n"
|
140
149
|
else
|
141
|
-
|
150
|
+
params[opt['name']] = $stdin.gets.chomp!
|
142
151
|
end
|
143
152
|
|
144
153
|
end
|
145
154
|
end
|
146
155
|
end
|
147
156
|
begin
|
148
|
-
@apps_interface.create(
|
149
|
-
rescue => e
|
150
|
-
|
151
|
-
|
152
|
-
::Morpheus::Cli::ErrorHandler.new.print_errors(error)
|
153
|
-
else
|
154
|
-
puts "Error Communicating with the Appliance. Please try again later. #{e}"
|
155
|
-
end
|
156
|
-
return nil
|
157
|
+
@apps_interface.create(params)
|
158
|
+
rescue RestClient::Exception => e
|
159
|
+
print_rest_exception(e, options)
|
160
|
+
exit 1
|
157
161
|
end
|
158
162
|
list([])
|
159
163
|
end
|
@@ -162,13 +166,13 @@ class Morpheus::Cli::Apps
|
|
162
166
|
options = {}
|
163
167
|
optparse = OptionParser.new do|opts|
|
164
168
|
opts.banner = "Usage: morpheus apps logs [name] [options]"
|
165
|
-
|
169
|
+
build_common_options(opts, options, [:list, :json])
|
166
170
|
end
|
171
|
+
optparse.parse(args)
|
167
172
|
if args.count < 1
|
168
173
|
puts "\n#{optparse.banner}\n\n"
|
169
|
-
|
174
|
+
exit 1
|
170
175
|
end
|
171
|
-
optparse.parse(args)
|
172
176
|
connect(options)
|
173
177
|
begin
|
174
178
|
app = find_app_by_name(args[0])
|
@@ -178,7 +182,11 @@ class Morpheus::Cli::Apps
|
|
178
182
|
containers += app_instance['instance']['containers']
|
179
183
|
end
|
180
184
|
end
|
181
|
-
|
185
|
+
params = {}
|
186
|
+
[:phrase, :offset, :max, :sort, :direction].each do |k|
|
187
|
+
params[k] = options[k] unless options[k].nil?
|
188
|
+
end
|
189
|
+
logs = @logs_interface.container_logs(containers, params)
|
182
190
|
if options[:json]
|
183
191
|
puts logs
|
184
192
|
else
|
@@ -201,21 +209,28 @@ class Morpheus::Cli::Apps
|
|
201
209
|
print reset,"\n"
|
202
210
|
end
|
203
211
|
rescue RestClient::Exception => e
|
204
|
-
|
212
|
+
print_rest_exception(e, options)
|
205
213
|
exit 1
|
206
214
|
end
|
207
215
|
end
|
208
216
|
|
209
217
|
def stats(args)
|
218
|
+
options = {}
|
219
|
+
optparse = OptionParser.new do|opts|
|
220
|
+
opts.banner = "Usage: morpheus apps stats [name]"
|
221
|
+
build_common_options(opts, options, [:json])
|
222
|
+
end
|
223
|
+
optparse.parse(args)
|
210
224
|
if args.count < 1
|
211
|
-
puts "\
|
212
|
-
|
225
|
+
puts "\n#{optparse.banner}\n\n"
|
226
|
+
exit 1
|
213
227
|
end
|
228
|
+
connect(options)
|
214
229
|
begin
|
215
230
|
app_results = @apps_interface.get({name: args[0]})
|
216
231
|
if app_results['apps'].empty?
|
217
|
-
|
218
|
-
|
232
|
+
print_red_alert "App not found by name #{args[0]}"
|
233
|
+
exit 1
|
219
234
|
end
|
220
235
|
app = app_results['apps'][0]
|
221
236
|
app_id = app['id']
|
@@ -225,26 +240,28 @@ class Morpheus::Cli::Apps
|
|
225
240
|
print cyan, "Storage: \t#{Filesize.from("#{stats['usedStorage']} B").pretty} / #{Filesize.from("#{stats['maxStorage']} B").pretty}\n\n",reset
|
226
241
|
puts
|
227
242
|
rescue RestClient::Exception => e
|
228
|
-
|
229
|
-
|
230
|
-
::Morpheus::Cli::ErrorHandler.new.print_errors(error)
|
231
|
-
else
|
232
|
-
puts "Error Communicating with the Appliance. Please try again later. #{e}"
|
233
|
-
end
|
234
|
-
return nil
|
243
|
+
print_rest_exception(e, options)
|
244
|
+
exit 1
|
235
245
|
end
|
236
246
|
end
|
237
247
|
|
238
248
|
def details(args)
|
249
|
+
options = {}
|
250
|
+
optparse = OptionParser.new do|opts|
|
251
|
+
opts.banner = "Usage: morpheus apps details [name]"
|
252
|
+
build_common_options(opts, options, [:json])
|
253
|
+
end
|
254
|
+
optparse.parse(args)
|
239
255
|
if args.count < 1
|
240
|
-
puts "\
|
241
|
-
|
256
|
+
puts "\n#{optparse.banner}\n\n"
|
257
|
+
exit 1
|
242
258
|
end
|
259
|
+
connect(options)
|
243
260
|
begin
|
244
261
|
app_results = @apps_interface.get({name: args[0]})
|
245
262
|
if app_results['apps'].empty?
|
246
|
-
|
247
|
-
|
263
|
+
print_red_alert "App not found by name #{args[0]}"
|
264
|
+
exit 1
|
248
265
|
end
|
249
266
|
app = app_results['apps'][0]
|
250
267
|
app_id = app['id']
|
@@ -254,25 +271,27 @@ class Morpheus::Cli::Apps
|
|
254
271
|
print cyan, "Storage: \t#{Filesize.from("#{stats['usedStorage']} B").pretty} / #{Filesize.from("#{stats['maxStorage']} B").pretty}\n\n",reset
|
255
272
|
puts app
|
256
273
|
rescue RestClient::Exception => e
|
257
|
-
|
258
|
-
|
259
|
-
::Morpheus::Cli::ErrorHandler.new.print_errors(error)
|
260
|
-
else
|
261
|
-
puts "Error Communicating with the Appliance. Please try again later. #{e}"
|
262
|
-
end
|
263
|
-
return nil
|
274
|
+
print_rest_exception(e, options)
|
275
|
+
exit 1
|
264
276
|
end
|
265
277
|
end
|
266
278
|
|
267
279
|
def envs(args)
|
280
|
+
options = {}
|
281
|
+
optparse = OptionParser.new do|opts|
|
282
|
+
opts.banner = "Usage: morpheus apps envs [name]"
|
283
|
+
build_common_options(opts, options, [:json])
|
284
|
+
end
|
285
|
+
optparse.parse(args)
|
268
286
|
if args.count < 1
|
269
|
-
puts "\
|
270
|
-
|
287
|
+
puts "\n#{optparse.banner}\n\n"
|
288
|
+
exit 1
|
271
289
|
end
|
290
|
+
connect(options)
|
272
291
|
begin
|
273
292
|
app_results = @apps_interface.get({name: args[0]})
|
274
293
|
if app_results['apps'].empty?
|
275
|
-
|
294
|
+
print_red_alert "App not found by name #{args[0]}"
|
276
295
|
return
|
277
296
|
end
|
278
297
|
app = app_results['apps'][0]
|
@@ -290,61 +309,63 @@ class Morpheus::Cli::Apps
|
|
290
309
|
print reset, "\n"
|
291
310
|
|
292
311
|
rescue RestClient::Exception => e
|
293
|
-
|
294
|
-
|
295
|
-
::Morpheus::Cli::ErrorHandler.new.print_errors(error)
|
296
|
-
else
|
297
|
-
puts "Error Communicating with the Appliance. Please try again later. #{e}"
|
298
|
-
end
|
299
|
-
return nil
|
312
|
+
print_rest_exception(e, options)
|
313
|
+
exit 1
|
300
314
|
end
|
301
315
|
end
|
302
316
|
|
303
317
|
def setenv(args)
|
318
|
+
options = {}
|
319
|
+
evar = {name: args[1], value: args[2], export: false}
|
320
|
+
optparse = OptionParser.new do|opts|
|
321
|
+
opts.banner = "Usage: morpheus apps setenv INSTANCE NAME VALUE [-e]"
|
322
|
+
opts.on( '-e', "Exportable" ) do |exportable|
|
323
|
+
evar[:export] = exportable
|
324
|
+
end
|
325
|
+
build_common_options(opts, options, [:json])
|
326
|
+
end
|
327
|
+
optparse.parse(args)
|
304
328
|
if args.count < 3
|
305
|
-
puts "\
|
306
|
-
|
329
|
+
puts "\n#{optparse.banner}\n\n"
|
330
|
+
exit 1
|
307
331
|
end
|
332
|
+
connect(options)
|
308
333
|
begin
|
309
334
|
app_results = @apps_interface.get({name: args[0]})
|
310
335
|
if app_results['apps'].empty?
|
311
|
-
|
312
|
-
|
336
|
+
print_red_alert "App not found by name #{args[0]}"
|
337
|
+
exit 1
|
313
338
|
end
|
314
339
|
app = app_results['apps'][0]
|
315
340
|
app_id = app['id']
|
316
|
-
evar = {name: args[1], value: args[2], export: false}
|
317
341
|
params = {}
|
318
|
-
optparse = OptionParser.new do|opts|
|
319
|
-
opts.on( '-e', "Exportable" ) do |exportable|
|
320
|
-
evar[:export] = exportable
|
321
|
-
end
|
322
|
-
end
|
323
|
-
optparse.parse(args)
|
324
342
|
|
325
343
|
@apps_interface.create_env(app_id, [evar])
|
326
344
|
envs([args[0]])
|
327
345
|
rescue RestClient::Exception => e
|
328
|
-
|
329
|
-
|
330
|
-
::Morpheus::Cli::ErrorHandler.new.print_errors(error)
|
331
|
-
else
|
332
|
-
puts "Error Communicating with the Appliance. Please try again later. #{e}"
|
333
|
-
end
|
334
|
-
return nil
|
346
|
+
print_rest_exception(e, options)
|
347
|
+
exit 1
|
335
348
|
end
|
336
349
|
end
|
337
350
|
|
338
351
|
def delenv(args)
|
352
|
+
options = {}
|
353
|
+
optparse = OptionParser.new do|opts|
|
354
|
+
opts.banner = "Usage: morpheus apps setenv INSTANCE NAME"
|
355
|
+
build_common_options(opts, options, [:json])
|
356
|
+
end
|
357
|
+
optparse.parse(args)
|
339
358
|
if args.count < 2
|
340
|
-
puts "\
|
341
|
-
|
359
|
+
puts "\n#{optparse.banner}\n\n"
|
360
|
+
exit 1
|
342
361
|
end
|
362
|
+
connect(options)
|
363
|
+
|
343
364
|
begin
|
344
365
|
app_results = @apps_interface.get({name: args[0]})
|
345
366
|
if app_results['apps'].empty?
|
346
|
-
|
347
|
-
|
367
|
+
print_red_alert "App not found by name #{args[0]}"
|
368
|
+
exit 1
|
348
369
|
end
|
349
370
|
app = app_results['apps'][0]
|
350
371
|
app_id = app['id']
|
@@ -353,99 +374,108 @@ class Morpheus::Cli::Apps
|
|
353
374
|
@apps_interface.del_env(app_id, name)
|
354
375
|
envs([args[0]])
|
355
376
|
rescue RestClient::Exception => e
|
356
|
-
|
357
|
-
|
358
|
-
::Morpheus::Cli::ErrorHandler.new.print_errors(error)
|
359
|
-
else
|
360
|
-
puts "Error Communicating with the Appliance. Please try again later. #{e}"
|
361
|
-
end
|
362
|
-
return nil
|
377
|
+
print_rest_exception(e, options)
|
378
|
+
exit 1
|
363
379
|
end
|
364
380
|
end
|
365
381
|
|
366
382
|
def stop(args)
|
383
|
+
options = {}
|
384
|
+
optparse = OptionParser.new do|opts|
|
385
|
+
opts.banner = "Usage: morpheus apps stop [name]"
|
386
|
+
build_common_options(opts, options, [:json])
|
387
|
+
end
|
388
|
+
optparse.parse(args)
|
367
389
|
if args.count < 1
|
368
|
-
puts "\
|
369
|
-
|
390
|
+
puts "\n#{optparse.banner}\n\n"
|
391
|
+
exit 1
|
370
392
|
end
|
393
|
+
connect(options)
|
371
394
|
begin
|
372
395
|
app_results = @apps_interface.get({name: args[0]})
|
373
396
|
if app_results['apps'].empty?
|
374
|
-
|
375
|
-
|
397
|
+
print_red_alert "App not found by name #{args[0]}"
|
398
|
+
exit 1
|
376
399
|
end
|
377
400
|
@apps_interface.stop(app_results['apps'][0]['id'])
|
378
401
|
list([])
|
379
402
|
rescue RestClient::Exception => e
|
380
|
-
|
381
|
-
|
382
|
-
::Morpheus::Cli::ErrorHandler.new.print_errors(error)
|
383
|
-
else
|
384
|
-
puts "Error Communicating with the Appliance. Please try again later. #{e}"
|
385
|
-
end
|
386
|
-
return nil
|
403
|
+
print_rest_exception(e, options)
|
404
|
+
exit 1
|
387
405
|
end
|
388
406
|
end
|
389
407
|
|
390
408
|
def start(args)
|
409
|
+
options = {}
|
410
|
+
optparse = OptionParser.new do|opts|
|
411
|
+
opts.banner = "Usage: morpheus apps start [name]"
|
412
|
+
build_common_options(opts, options, [:json])
|
413
|
+
end
|
414
|
+
optparse.parse(args)
|
391
415
|
if args.count < 1
|
392
|
-
puts "\
|
393
|
-
|
416
|
+
puts "\n#{optparse.banner}\n\n"
|
417
|
+
exit 1
|
394
418
|
end
|
419
|
+
connect(options)
|
395
420
|
begin
|
396
421
|
app_results = @apps_interface.get({name: args[0]})
|
397
422
|
if app_results['apps'].empty?
|
398
|
-
|
399
|
-
|
423
|
+
print_red_alert "App not found by name #{args[0]}"
|
424
|
+
exit 1
|
400
425
|
end
|
401
426
|
@apps_interface.start(app_results['apps'][0]['id'])
|
402
427
|
list([])
|
403
428
|
rescue RestClient::Exception => e
|
404
|
-
|
405
|
-
|
406
|
-
::Morpheus::Cli::ErrorHandler.new.print_errors(error)
|
407
|
-
else
|
408
|
-
puts "Error Communicating with the Appliance. Please try again later. #{e}"
|
409
|
-
end
|
410
|
-
return nil
|
429
|
+
print_rest_exception(e, options)
|
430
|
+
exit 1
|
411
431
|
end
|
412
432
|
end
|
413
433
|
|
414
434
|
def restart(args)
|
435
|
+
options = {}
|
436
|
+
optparse = OptionParser.new do|opts|
|
437
|
+
opts.banner = "Usage: morpheus apps restart [name]"
|
438
|
+
build_common_options(opts, options, [:json])
|
439
|
+
end
|
440
|
+
optparse.parse(args)
|
415
441
|
if args.count < 1
|
416
|
-
puts "\
|
417
|
-
|
442
|
+
puts "\n#{optparse.banner}\n\n"
|
443
|
+
exit 1
|
418
444
|
end
|
445
|
+
connect(options)
|
419
446
|
begin
|
420
447
|
app_results = @apps_interface.get({name: args[0]})
|
421
448
|
if app_results['apps'].empty?
|
422
|
-
|
423
|
-
|
449
|
+
print_red_alert "App not found by name #{args[0]}"
|
450
|
+
exit 1
|
424
451
|
end
|
425
452
|
@apps_interface.restart(app_results['apps'][0]['id'])
|
426
453
|
list([])
|
427
454
|
rescue RestClient::Exception => e
|
428
|
-
|
429
|
-
|
430
|
-
::Morpheus::Cli::ErrorHandler.new.print_errors(error)
|
431
|
-
else
|
432
|
-
puts "Error Communicating with the Appliance. Please try again later. #{e}"
|
433
|
-
end
|
434
|
-
return nil
|
455
|
+
print_rest_exception(e, options)
|
456
|
+
exit 1
|
435
457
|
end
|
436
458
|
end
|
437
459
|
|
438
460
|
def list(args)
|
439
461
|
options = {}
|
440
462
|
optparse = OptionParser.new do|opts|
|
463
|
+
opts.banner = "Usage: morpheus apps list"
|
441
464
|
opts.on( '-g', '--group GROUP', "Group Name" ) do |group|
|
442
465
|
options[:group] = group
|
443
466
|
end
|
467
|
+
build_common_options(opts, options, [:json])
|
444
468
|
end
|
445
469
|
optparse.parse(args)
|
470
|
+
|
471
|
+
connect(options)
|
472
|
+
|
446
473
|
begin
|
447
474
|
params = {}
|
448
|
-
|
475
|
+
[:phrase, :offset, :max, :sort, :direction].each do |k|
|
476
|
+
params[k] = options[k] unless options[k].nil?
|
477
|
+
end
|
478
|
+
# todo: include options[:group] in params?
|
449
479
|
json_response = @apps_interface.get(params)
|
450
480
|
apps = json_response['apps']
|
451
481
|
print "\n" ,cyan, bold, "Morpheus Apps\n","==================", reset, "\n\n"
|
@@ -465,87 +495,104 @@ class Morpheus::Cli::Apps
|
|
465
495
|
end
|
466
496
|
|
467
497
|
def remove(args)
|
498
|
+
options = {}
|
499
|
+
optparse = OptionParser.new do|opts|
|
500
|
+
opts.banner = "Usage: morpheus apps remove [name]"
|
501
|
+
build_common_options(opts, options, [:json])
|
502
|
+
end
|
503
|
+
optparse.parse(args)
|
468
504
|
if args.count < 1
|
469
|
-
puts "\
|
470
|
-
|
505
|
+
puts "\n#{optparse.banner}\n\n"
|
506
|
+
exit 1
|
471
507
|
end
|
508
|
+
connect(options)
|
509
|
+
|
472
510
|
begin
|
473
511
|
app_results = @apps_interface.get({name: args[0]})
|
474
512
|
if app_results['apps'].empty?
|
475
|
-
|
476
|
-
|
513
|
+
print_red_alert "App not found by name #{args[0]}"
|
514
|
+
exit 1
|
477
515
|
end
|
478
516
|
@apps_interface.destroy(app_results['apps'][0]['id'])
|
479
517
|
list([])
|
480
518
|
rescue RestClient::Exception => e
|
481
|
-
|
482
|
-
|
483
|
-
::Morpheus::Cli::ErrorHandler.new.print_errors(error)
|
484
|
-
else
|
485
|
-
puts "Error Communicating with the Appliance. Please try again later. #{e}"
|
486
|
-
end
|
487
|
-
return nil
|
519
|
+
print_rest_exception(e, options)
|
520
|
+
exit 1
|
488
521
|
end
|
489
522
|
end
|
490
523
|
|
491
524
|
def firewall_disable(args)
|
525
|
+
options = {}
|
526
|
+
optparse = OptionParser.new do|opts|
|
527
|
+
opts.banner = "Usage: morpheus apps firewall_disable [name]"
|
528
|
+
build_common_options(opts, options, [:json])
|
529
|
+
end
|
530
|
+
optparse.parse(args)
|
492
531
|
if args.count < 1
|
493
|
-
puts "\
|
494
|
-
|
532
|
+
puts "\n#{optparse.banner}\n\n"
|
533
|
+
exit 1
|
495
534
|
end
|
535
|
+
connect(options)
|
536
|
+
|
496
537
|
begin
|
497
538
|
app_results = @apps_interface.get({name: args[0]})
|
498
539
|
if app_results['apps'].empty?
|
499
|
-
|
500
|
-
|
540
|
+
print_red_alert "App not found by name #{args[0]}"
|
541
|
+
exit 1
|
501
542
|
end
|
502
543
|
@apps_interface.firewall_disable(app_results['apps'][0]['id'])
|
503
544
|
security_groups([args[0]])
|
504
545
|
rescue RestClient::Exception => e
|
505
|
-
|
506
|
-
|
507
|
-
::Morpheus::Cli::ErrorHandler.new.print_errors(error)
|
508
|
-
else
|
509
|
-
puts "Error Communicating with the Appliance. Please try again later. #{e}"
|
510
|
-
end
|
511
|
-
return nil
|
546
|
+
print_rest_exception(e, options)
|
547
|
+
exit 1
|
512
548
|
end
|
513
549
|
end
|
514
550
|
|
515
551
|
def firewall_enable(args)
|
552
|
+
options = {}
|
553
|
+
optparse = OptionParser.new do|opts|
|
554
|
+
opts.banner = "Usage: morpheus apps firewall_enable [name]"
|
555
|
+
build_common_options(opts, options, [:json])
|
556
|
+
end
|
557
|
+
optparse.parse(args)
|
516
558
|
if args.count < 1
|
517
|
-
puts "\
|
518
|
-
|
559
|
+
puts "\n#{optparse.banner}\n\n"
|
560
|
+
exit 1
|
519
561
|
end
|
562
|
+
connect(options)
|
563
|
+
|
520
564
|
begin
|
521
565
|
app_results = @apps_interface.get({name: args[0]})
|
522
566
|
if app_results['apps'].empty?
|
523
|
-
|
524
|
-
|
567
|
+
print_red_alert "App not found by name #{args[0]}"
|
568
|
+
exit 1
|
525
569
|
end
|
526
570
|
@apps_interface.firewall_enable(app_results['apps'][0]['id'])
|
527
571
|
security_groups([args[0]])
|
528
572
|
rescue RestClient::Exception => e
|
529
|
-
|
530
|
-
|
531
|
-
::Morpheus::Cli::ErrorHandler.new.print_errors(error)
|
532
|
-
else
|
533
|
-
puts "Error Communicating with the Appliance. Please try again later. #{e}"
|
534
|
-
end
|
535
|
-
return nil
|
573
|
+
print_rest_exception(e, options)
|
574
|
+
exit 1
|
536
575
|
end
|
537
576
|
end
|
538
577
|
|
539
578
|
def security_groups(args)
|
579
|
+
options = {}
|
580
|
+
optparse = OptionParser.new do|opts|
|
581
|
+
opts.banner = "Usage: morpheus apps security_groups [name]"
|
582
|
+
build_common_options(opts, options, [:json])
|
583
|
+
end
|
584
|
+
optparse.parse(args)
|
540
585
|
if args.count < 1
|
541
|
-
puts "\
|
542
|
-
|
586
|
+
puts "\n#{optparse.banner}\n\n"
|
587
|
+
exit 1
|
543
588
|
end
|
589
|
+
connect(options)
|
590
|
+
|
544
591
|
begin
|
545
592
|
app_results = @apps_interface.get({name: args[0]})
|
546
593
|
if app_results['apps'].empty?
|
547
|
-
|
548
|
-
|
594
|
+
print_red_alert "App not found by name #{args[0]}"
|
595
|
+
exit 1
|
549
596
|
end
|
550
597
|
|
551
598
|
app_id = app_results['apps'][0]['id']
|
@@ -564,13 +611,8 @@ class Morpheus::Cli::Apps
|
|
564
611
|
print reset,"\n\n"
|
565
612
|
|
566
613
|
rescue RestClient::Exception => e
|
567
|
-
|
568
|
-
|
569
|
-
::Morpheus::Cli::ErrorHandler.new.print_errors(error)
|
570
|
-
else
|
571
|
-
puts "Error Communicating with the Appliance. Please try again later. #{e}"
|
572
|
-
end
|
573
|
-
return nil
|
614
|
+
print_rest_exception(e, options)
|
615
|
+
exit 1
|
574
616
|
end
|
575
617
|
end
|
576
618
|
|
@@ -578,10 +620,6 @@ class Morpheus::Cli::Apps
|
|
578
620
|
usage = <<-EOF
|
579
621
|
Usage: morpheus apps apply_security_groups [name] [options]
|
580
622
|
EOF
|
581
|
-
if args.count < 1
|
582
|
-
puts usage
|
583
|
-
return
|
584
|
-
end
|
585
623
|
|
586
624
|
options = {}
|
587
625
|
clear_or_secgroups_specified = false
|
@@ -599,31 +637,32 @@ EOF
|
|
599
637
|
puts opts
|
600
638
|
exit
|
601
639
|
end
|
640
|
+
build_common_options(opts, options, [:json])
|
602
641
|
end
|
603
642
|
optparse.parse(args)
|
604
|
-
|
643
|
+
if args.count < 1
|
644
|
+
puts "\n#{optparse.banner}\n\n"
|
645
|
+
exit 1
|
646
|
+
end
|
605
647
|
if !clear_or_secgroups_specified
|
606
648
|
puts usage
|
607
|
-
exit
|
649
|
+
exit 1
|
608
650
|
end
|
609
651
|
|
652
|
+
connect(options)
|
653
|
+
|
610
654
|
begin
|
611
655
|
app_results = @apps_interface.get({name: args[0]})
|
612
656
|
if app_results['apps'].empty?
|
613
|
-
|
614
|
-
|
657
|
+
print_red_alert "App not found by name #{args[0]}"
|
658
|
+
exit 1
|
615
659
|
end
|
616
660
|
|
617
661
|
@apps_interface.apply_security_groups(app_results['apps'][0]['id'], options)
|
618
662
|
security_groups([args[0]])
|
619
663
|
rescue RestClient::Exception => e
|
620
|
-
|
621
|
-
|
622
|
-
::Morpheus::Cli::ErrorHandler.new.print_errors(error)
|
623
|
-
else
|
624
|
-
puts "Error Communicating with the Appliance. Please try again later. #{e}"
|
625
|
-
end
|
626
|
-
return nil
|
664
|
+
print_rest_exception(e, options)
|
665
|
+
exit 1
|
627
666
|
end
|
628
667
|
end
|
629
668
|
|
@@ -632,7 +671,7 @@ private
|
|
632
671
|
def find_app_by_name(name)
|
633
672
|
app_results = @apps_interface.get({name: name})
|
634
673
|
if app_results['apps'].empty?
|
635
|
-
|
674
|
+
print_red_alert "App not found by name #{name}"
|
636
675
|
exit 1
|
637
676
|
end
|
638
677
|
return app_results['apps'][0]
|