morpheus-cli 0.9.9 → 0.9.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/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]
|