morpheus-cli 5.4.0 → 5.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Dockerfile +1 -1
- data/lib/morpheus/api/account_users_interface.rb +68 -0
- data/lib/morpheus/api/api_client.rb +51 -9
- data/lib/morpheus/api/audit_interface.rb +9 -0
- data/lib/morpheus/api/instances_interface.rb +21 -0
- data/lib/morpheus/api/load_balancer_monitors_interface.rb +9 -0
- data/lib/morpheus/api/load_balancer_pools_interface.rb +4 -4
- data/lib/morpheus/api/load_balancer_profiles_interface.rb +4 -5
- data/lib/morpheus/api/load_balancer_virtual_servers_interface.rb +13 -4
- data/lib/morpheus/api/load_balancers_interface.rb +5 -0
- data/lib/morpheus/api/network_routers_interface.rb +9 -0
- data/lib/morpheus/api/network_static_routes_interface.rb +36 -0
- data/lib/morpheus/api/read_interface.rb +4 -3
- data/lib/morpheus/api/rest_interface.rb +3 -3
- data/lib/morpheus/api/secondary_read_interface.rb +1 -1
- data/lib/morpheus/api/secondary_rest_interface.rb +19 -19
- data/lib/morpheus/api/storage_server_types_interface.rb +14 -0
- data/lib/morpheus/api/storage_servers_interface.rb +9 -0
- data/lib/morpheus/api/storage_volume_types_interface.rb +9 -0
- data/lib/morpheus/api/storage_volumes_interface.rb +9 -0
- data/lib/morpheus/api/users_interface.rb +16 -63
- data/lib/morpheus/cli/cli_command.rb +253 -5
- data/lib/morpheus/cli/cli_registry.rb +1 -1
- data/lib/morpheus/cli/commands/alias_command.rb +1 -1
- data/lib/morpheus/cli/commands/apps.rb +14 -78
- data/lib/morpheus/cli/commands/audit.rb +188 -0
- data/lib/morpheus/cli/commands/blueprints_command.rb +1 -1
- data/lib/morpheus/cli/commands/change_password_command.rb +4 -4
- data/lib/morpheus/cli/commands/clusters.rb +37 -12
- data/lib/morpheus/cli/commands/hosts.rb +15 -15
- data/lib/morpheus/cli/commands/instances.rb +109 -2
- data/lib/morpheus/cli/commands/load_balancer_monitors.rb +71 -0
- data/lib/morpheus/cli/commands/load_balancer_pools.rb +30 -50
- data/lib/morpheus/cli/commands/load_balancer_profiles.rb +65 -0
- data/lib/morpheus/cli/commands/load_balancer_types.rb +9 -4
- data/lib/morpheus/cli/commands/load_balancer_virtual_servers.rb +77 -57
- data/lib/morpheus/cli/commands/load_balancers.rb +93 -6
- data/lib/morpheus/cli/commands/network_firewalls_command.rb +22 -5
- data/lib/morpheus/cli/commands/network_routers_command.rb +96 -45
- data/lib/morpheus/cli/commands/network_static_routes_command.rb +446 -0
- data/lib/morpheus/cli/commands/network_transport_zones_command.rb +4 -4
- data/lib/morpheus/cli/commands/open_command.rb +30 -0
- data/lib/morpheus/cli/commands/options.rb +98 -0
- data/lib/morpheus/cli/commands/policies_command.rb +1 -1
- data/lib/morpheus/cli/commands/prices_command.rb +7 -7
- data/lib/morpheus/cli/commands/remote.rb +4 -2
- data/lib/morpheus/cli/commands/roles.rb +1 -1
- data/lib/morpheus/cli/commands/shell.rb +2 -2
- data/lib/morpheus/cli/commands/storage_server_types.rb +50 -0
- data/lib/morpheus/cli/commands/storage_servers.rb +122 -0
- data/lib/morpheus/cli/commands/storage_volume_types.rb +50 -0
- data/lib/morpheus/cli/commands/storage_volumes.rb +103 -0
- data/lib/morpheus/cli/commands/tenants_command.rb +1 -1
- data/lib/morpheus/cli/commands/user_groups_command.rb +1 -1
- data/lib/morpheus/cli/commands/user_settings_command.rb +2 -1
- data/lib/morpheus/cli/commands/user_sources_command.rb +1 -1
- data/lib/morpheus/cli/commands/users.rb +28 -28
- data/lib/morpheus/cli/commands/view.rb +102 -0
- data/lib/morpheus/cli/mixins/accounts_helper.rb +5 -5
- data/lib/morpheus/cli/mixins/load_balancers_helper.rb +24 -4
- data/lib/morpheus/cli/mixins/print_helper.rb +50 -18
- data/lib/morpheus/cli/mixins/processes_helper.rb +1 -2
- data/lib/morpheus/cli/mixins/provisioning_helper.rb +15 -5
- data/lib/morpheus/cli/mixins/rest_command.rb +145 -73
- data/lib/morpheus/cli/mixins/secondary_rest_command.rb +174 -81
- data/lib/morpheus/cli/mixins/storage_servers_helper.rb +156 -0
- data/lib/morpheus/cli/mixins/storage_volumes_helper.rb +119 -0
- data/lib/morpheus/cli/option_types.rb +45 -24
- data/lib/morpheus/cli/version.rb +1 -1
- data/lib/morpheus/cli.rb +1 -0
- data/lib/morpheus/ext/string.rb +29 -6
- data/lib/morpheus/routes.rb +238 -0
- data/lib/morpheus/util.rb +6 -1
- metadata +29 -8
@@ -86,6 +86,22 @@ module Morpheus::Cli::RestCommand
|
|
86
86
|
|
87
87
|
alias :set_rest_arg :rest_arg=
|
88
88
|
|
89
|
+
# rest_has_name indicates a resource has a name and can be retrieved by name or id
|
90
|
+
# true by default, set to false for lookups by only id
|
91
|
+
def rest_has_name
|
92
|
+
@rest_has_name != nil ? @rest_has_name : default_rest_has_name
|
93
|
+
end
|
94
|
+
|
95
|
+
def default_rest_has_name
|
96
|
+
true
|
97
|
+
end
|
98
|
+
|
99
|
+
def rest_has_name=(v)
|
100
|
+
@rest_has_name = !!v
|
101
|
+
end
|
102
|
+
|
103
|
+
alias :set_rest_has_name :rest_has_name=
|
104
|
+
|
89
105
|
# rest_label is the capitalized resource label eg. "Neat Thing"
|
90
106
|
def rest_label
|
91
107
|
@rest_label || default_rest_label
|
@@ -297,6 +313,10 @@ module Morpheus::Cli::RestCommand
|
|
297
313
|
self.class.rest_arg
|
298
314
|
end
|
299
315
|
|
316
|
+
def rest_has_name
|
317
|
+
self.class.rest_has_name
|
318
|
+
end
|
319
|
+
|
300
320
|
def rest_label
|
301
321
|
self.class.rest_label
|
302
322
|
end
|
@@ -316,23 +336,37 @@ module Morpheus::Cli::RestCommand
|
|
316
336
|
end
|
317
337
|
|
318
338
|
def rest_object_key
|
319
|
-
|
339
|
+
send("#{rest_key}_object_key")
|
320
340
|
end
|
321
341
|
|
322
342
|
def rest_list_key
|
323
|
-
|
343
|
+
send("#{rest_key}_list_key")
|
324
344
|
end
|
325
345
|
|
326
|
-
def rest_column_definitions
|
327
|
-
|
346
|
+
def rest_column_definitions(options)
|
347
|
+
send("#{rest_key}_column_definitions", options)
|
328
348
|
end
|
329
349
|
|
330
|
-
def rest_list_column_definitions
|
331
|
-
|
350
|
+
def rest_list_column_definitions(options)
|
351
|
+
send("#{rest_key}_list_column_definitions", options)
|
332
352
|
end
|
333
353
|
|
334
|
-
def rest_find_by_name_or_id(
|
335
|
-
|
354
|
+
def rest_find_by_name_or_id(val)
|
355
|
+
# use explicitly defined finders
|
356
|
+
# else default to new generic CliCommand method to find anything by type (singular underscore)
|
357
|
+
if rest_has_name
|
358
|
+
if respond_to?("find_#{rest_key}_by_name_or_id", true)
|
359
|
+
send("find_#{rest_key}_by_name_or_id", val)
|
360
|
+
else
|
361
|
+
find_by_name_or_id(rest_key, val)
|
362
|
+
end
|
363
|
+
else
|
364
|
+
if respond_to?("find_#{rest_key}_by_id", true)
|
365
|
+
send("find_#{rest_key}_by_id", val)
|
366
|
+
else
|
367
|
+
find_by_id(rest_key, val)
|
368
|
+
end
|
369
|
+
end
|
336
370
|
end
|
337
371
|
|
338
372
|
def rest_has_type
|
@@ -353,6 +387,10 @@ module Morpheus::Cli::RestCommand
|
|
353
387
|
self.class.rest_type_arg
|
354
388
|
end
|
355
389
|
|
390
|
+
def rest_has_name
|
391
|
+
self.class.rest_type_arg
|
392
|
+
end
|
393
|
+
|
356
394
|
def rest_type_label
|
357
395
|
self.class.rest_type_label
|
358
396
|
end
|
@@ -370,23 +408,29 @@ module Morpheus::Cli::RestCommand
|
|
370
408
|
end
|
371
409
|
|
372
410
|
def rest_type_object_key
|
373
|
-
|
411
|
+
send("#{rest_type_key}_object_key")
|
374
412
|
end
|
375
413
|
|
376
414
|
def rest_type_list_key
|
377
|
-
|
415
|
+
send("#{rest_type_key}_list_key")
|
378
416
|
end
|
379
417
|
|
380
|
-
def rest_type_column_definitions
|
381
|
-
|
418
|
+
def rest_type_column_definitions(options)
|
419
|
+
send("#{rest_type_key}_column_definitions", options)
|
382
420
|
end
|
383
421
|
|
384
|
-
def rest_type_list_column_definitions
|
385
|
-
|
422
|
+
def rest_type_list_column_definitions(options)
|
423
|
+
send("#{rest_type_key}_list_column_definitions", options)
|
386
424
|
end
|
387
425
|
|
388
|
-
def rest_type_find_by_name_or_id(
|
389
|
-
|
426
|
+
def rest_type_find_by_name_or_id(val)
|
427
|
+
# use explicately defined finders
|
428
|
+
# else default to new generic CliCommand method to find anything by type (singular underscore)
|
429
|
+
if respond_to?("find_#{rest_type_key}_by_name_or_id", true)
|
430
|
+
send("find_#{rest_type_key}_by_name_or_id", val)
|
431
|
+
else
|
432
|
+
find_by_name_or_id(rest_type_key, val)
|
433
|
+
end
|
390
434
|
end
|
391
435
|
|
392
436
|
def registered_interfaces
|
@@ -417,18 +461,15 @@ module Morpheus::Cli::RestCommand
|
|
417
461
|
options = {}
|
418
462
|
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
419
463
|
opts.banner = subcommand_usage("[search]")
|
420
|
-
|
421
|
-
|
464
|
+
build_list_options(opts, options, params)
|
465
|
+
opts.footer = <<-EOT
|
422
466
|
List #{rest_label_plural.downcase}.
|
423
467
|
[search] is optional. This is a search phrase to filter the results.
|
424
468
|
EOT
|
425
469
|
end
|
426
470
|
optparse.parse!(args)
|
427
471
|
connect(options)
|
428
|
-
|
429
|
-
options[:phrase] = args.join(" ")
|
430
|
-
end
|
431
|
-
params.merge!(parse_list_options(options))
|
472
|
+
parse_list_options!(args, options, params)
|
432
473
|
rest_interface.setopts(options)
|
433
474
|
if options[:dry_run]
|
434
475
|
print_dry_run rest_interface.dry.list(params)
|
@@ -441,7 +482,7 @@ EOT
|
|
441
482
|
if records.nil? || records.empty?
|
442
483
|
print cyan,"No #{rest_label_plural.downcase} found.",reset,"\n"
|
443
484
|
else
|
444
|
-
print as_pretty_table(records, rest_list_column_definitions.upcase_keys!, options)
|
485
|
+
print as_pretty_table(records, rest_list_column_definitions(options).upcase_keys!, options)
|
445
486
|
print_results_pagination(json_response) if json_response['meta']
|
446
487
|
end
|
447
488
|
print reset,"\n"
|
@@ -454,27 +495,25 @@ EOT
|
|
454
495
|
options = {}
|
455
496
|
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
456
497
|
opts.banner = subcommand_usage("[#{rest_arg}]")
|
457
|
-
|
498
|
+
build_get_options(opts, options, params)
|
458
499
|
opts.footer = <<-EOT
|
459
500
|
Get details about #{a_or_an(rest_label)} #{rest_label.downcase}.
|
460
|
-
[#{rest_arg}] is required. This is the name or id of #{a_or_an(rest_label)} #{rest_label.downcase}.
|
501
|
+
[#{rest_arg}] is required. This is the #{rest_has_name ? 'name or id' : 'id'} of #{a_or_an(rest_label)} #{rest_label.downcase}.
|
461
502
|
EOT
|
462
503
|
end
|
463
504
|
optparse.parse!(args)
|
464
505
|
verify_args!(args:args, optparse:optparse, min:1)
|
465
506
|
connect(options)
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
_get(arg, params, options)
|
470
|
-
end
|
507
|
+
parse_get_options!(args, options, params)
|
508
|
+
id = args.join(" ")
|
509
|
+
_get(id, params, options)
|
471
510
|
end
|
472
511
|
|
473
512
|
def _get(id, params, options)
|
474
|
-
if id !~ /\A\d{1,}\Z/
|
513
|
+
if id !~ /\A\d{1,}\Z/ && rest_has_name
|
475
514
|
record = rest_find_by_name_or_id(id)
|
476
515
|
if record.nil?
|
477
|
-
|
516
|
+
return 1, "#{rest_label} not found for '#{id}'"
|
478
517
|
end
|
479
518
|
id = record['id']
|
480
519
|
end
|
@@ -493,8 +532,14 @@ EOT
|
|
493
532
|
record = json_response[rest_object_key]
|
494
533
|
print_h1 rest_label, [], options
|
495
534
|
print cyan
|
496
|
-
print_description_list(rest_column_definitions, record, options)
|
497
|
-
# show config
|
535
|
+
print_description_list(rest_column_definitions(options), record, options)
|
536
|
+
# # could always show config eh? or maybe only with --config if that is nicer.
|
537
|
+
# # config = record['config'].is_a?(Hash) && !record['config'].empty?
|
538
|
+
# if config && !config.empty?
|
539
|
+
# print_h2 "Configuration"
|
540
|
+
# print_description_list(config.keys, config)
|
541
|
+
# end
|
542
|
+
# Option Types
|
498
543
|
if record['optionTypes'] && record['optionTypes'].size > 0
|
499
544
|
print_h2 "Option Types", options
|
500
545
|
print format_option_types_table(record['optionTypes'], options, rest_object_key)
|
@@ -507,19 +552,18 @@ EOT
|
|
507
552
|
record_type = nil
|
508
553
|
record_type_id = nil
|
509
554
|
options = {}
|
555
|
+
option_types = respond_to?("add_#{rest_key}_option_types", true) ? send("add_#{rest_key}_option_types") : []
|
556
|
+
advanced_option_types = respond_to?("add_#{rest_key}_advanced_option_types", true) ? send("add_#{rest_key}_advanced_option_types") : []
|
557
|
+
type_option_type = option_types.find {|it| it['fieldName'] == 'type'}
|
510
558
|
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
511
559
|
opts.banner = subcommand_usage("[#{rest_arg}]")
|
512
|
-
if rest_has_type
|
560
|
+
if rest_has_type && type_option_type.nil?
|
513
561
|
opts.on( '-t', "--#{rest_type_arg} TYPE", "#{rest_type_label}" ) do |val|
|
514
562
|
record_type_id = val
|
515
563
|
end
|
516
564
|
end
|
517
|
-
|
518
|
-
|
519
|
-
end
|
520
|
-
if self.class.method_defined?("add_#{rest_key}_advanced_option_types")
|
521
|
-
build_option_type_options(opts, options, self.send("add_#{rest_key}_advanced_option_types"))
|
522
|
-
end
|
565
|
+
build_option_type_options(opts, options, option_types)
|
566
|
+
build_option_type_options(opts, options, advanced_option_types)
|
523
567
|
build_standard_add_options(opts, options)
|
524
568
|
opts.footer = <<-EOT
|
525
569
|
Create a new #{rest_label.downcase}.
|
@@ -530,22 +574,26 @@ EOT
|
|
530
574
|
# todo: make supporting args[0] optional and more flexible
|
531
575
|
# for now args[0] is assumed to be the 'name'
|
532
576
|
record_name = nil
|
533
|
-
if
|
534
|
-
|
577
|
+
if rest_has_name
|
578
|
+
if args.count > 0
|
579
|
+
record_name = args.join(" ")
|
580
|
+
end
|
581
|
+
verify_args!(args:args, optparse:optparse, min:0, max: 1)
|
582
|
+
else
|
583
|
+
verify_args!(args:args, optparse:optparse, count: 0)
|
535
584
|
end
|
536
|
-
verify_args!(args:args, optparse:optparse, min:0, max: 1)
|
537
585
|
connect(options)
|
538
586
|
# load or prompt for type
|
539
|
-
if rest_has_type
|
587
|
+
if rest_has_type && type_option_type.nil?
|
540
588
|
if record_type_id.nil?
|
541
589
|
#raise_command_error "#{rest_type_label} is required.\n#{optparse}"
|
542
|
-
type_list = rest_type_interface.list({max:10000})[rest_type_list_key]
|
590
|
+
type_list = rest_type_interface.list({max:10000, creatable:true})[rest_type_list_key]
|
543
591
|
type_dropdown_options = type_list.collect {|it| {'name' => it['name'], 'value' => it['code']} }
|
544
592
|
record_type_id = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'type', 'fieldLabel' => rest_type_label, 'type' => 'select', 'selectOptions' => type_dropdown_options, 'required' => true}], options[:options], @api_client)['type']
|
545
593
|
end
|
546
594
|
record_type = rest_type_find_by_name_or_id(record_type_id)
|
547
595
|
if record_type.nil?
|
548
|
-
|
596
|
+
return 1, "#{rest_type_label} not found for '#{record_type_id}"
|
549
597
|
end
|
550
598
|
end
|
551
599
|
passed_options = parse_passed_options(options)
|
@@ -568,15 +616,32 @@ EOT
|
|
568
616
|
options[:params]['type'] = record_type['code']
|
569
617
|
end
|
570
618
|
record_payload.deep_merge!(passed_options)
|
571
|
-
if
|
572
|
-
|
573
|
-
v_prompt = Morpheus::Cli::OptionTypes.prompt(add_option_types, options[:options], @api_client, options[:params])
|
619
|
+
if option_types && !option_types.empty?
|
620
|
+
v_prompt = Morpheus::Cli::OptionTypes.prompt(option_types, options[:options], @api_client, options[:params])
|
574
621
|
v_prompt.deep_compact!
|
575
622
|
v_prompt.booleanize! # 'on' => true
|
576
623
|
record_payload.deep_merge!(v_prompt)
|
577
624
|
end
|
578
625
|
# options by type
|
579
|
-
|
626
|
+
if rest_has_type && record_type.nil?
|
627
|
+
type_value = record_payload['type'].is_a?(Hash) ? record_payload['type']['id'] : record_payload['type']
|
628
|
+
if type_value
|
629
|
+
record_type = rest_type_find_by_name_or_id(type_value)
|
630
|
+
if record_type.nil?
|
631
|
+
return 1, "#{rest_type_label} not found for '#{type_value}"
|
632
|
+
end
|
633
|
+
end
|
634
|
+
# reload the type by id to get all the details ie. optionTypes
|
635
|
+
if record_type && record_type['optionTypes'].nil?
|
636
|
+
record_type = rest_type_find_by_name_or_id(record_type['id'])
|
637
|
+
end
|
638
|
+
end
|
639
|
+
my_option_types = nil
|
640
|
+
if respond_to?("load_option_types_for_#{rest_key}", true)
|
641
|
+
my_option_types = send("load_option_types_for_#{rest_key}", record_type, nil)
|
642
|
+
else
|
643
|
+
my_option_types = record_type ? record_type['optionTypes'] : nil
|
644
|
+
end
|
580
645
|
if my_option_types && !my_option_types.empty?
|
581
646
|
# remove redundant fieldContext
|
582
647
|
my_option_types.each do |option_type|
|
@@ -584,15 +649,15 @@ EOT
|
|
584
649
|
option_type['fieldContext'] = nil
|
585
650
|
end
|
586
651
|
end
|
587
|
-
|
652
|
+
api_params = (options[:params] || {}).merge(record_payload)
|
653
|
+
v_prompt = Morpheus::Cli::OptionTypes.prompt(my_option_types, options[:options], @api_client, api_params)
|
588
654
|
v_prompt.deep_compact!
|
589
655
|
v_prompt.booleanize! # 'on' => true
|
590
656
|
record_payload.deep_merge!(v_prompt)
|
591
657
|
end
|
592
658
|
# advanced options (uses no_prompt)
|
593
|
-
if
|
594
|
-
|
595
|
-
v_prompt = Morpheus::Cli::OptionTypes.no_prompt(add_advanced_option_types, options[:options], @api_client, options[:params])
|
659
|
+
if advanced_option_types && !advanced_option_types.empty?
|
660
|
+
v_prompt = Morpheus::Cli::OptionTypes.no_prompt(advanced_option_types, options[:options], @api_client, options[:params])
|
596
661
|
v_prompt.deep_compact!
|
597
662
|
v_prompt.booleanize! # 'on' => true
|
598
663
|
record_payload.deep_merge!(v_prompt)
|
@@ -618,18 +683,16 @@ EOT
|
|
618
683
|
record_type = nil
|
619
684
|
record_type_id = nil
|
620
685
|
options = {}
|
686
|
+
option_types = respond_to?("update_#{rest_key}_option_types", true) ? send("update_#{rest_key}_option_types") : []
|
687
|
+
advanced_option_types = respond_to?("update_#{rest_key}_advanced_option_types", true) ? send("update_#{rest_key}_advanced_option_types") : []
|
621
688
|
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
622
689
|
opts.banner = subcommand_usage("[#{rest_arg}] [options]")
|
623
|
-
|
624
|
-
|
625
|
-
end
|
626
|
-
if self.class.method_defined?("update_#{rest_key}_advanced_option_types")
|
627
|
-
build_option_type_options(opts, options, self.send("update_#{rest_key}_advanced_option_types"))
|
628
|
-
end
|
690
|
+
build_option_type_options(opts, options, option_types)
|
691
|
+
build_option_type_options(opts, options, advanced_option_types)
|
629
692
|
build_standard_update_options(opts, options)
|
630
693
|
opts.footer = <<-EOT
|
631
694
|
Update an existing #{rest_label.downcase}.
|
632
|
-
[#{rest_arg}] is required. This is the name or id of #{a_or_an(rest_label)} #{rest_label.downcase}.
|
695
|
+
[#{rest_arg}] is required. This is the #{rest_has_name ? 'name or id' : 'id'} of #{a_or_an(rest_label)} #{rest_label.downcase}.
|
633
696
|
EOT
|
634
697
|
end
|
635
698
|
optparse.parse!(args)
|
@@ -644,7 +707,11 @@ EOT
|
|
644
707
|
record_type_id = record['type']['id']
|
645
708
|
record_type = rest_type_find_by_name_or_id(record_type_id)
|
646
709
|
if record_type.nil?
|
647
|
-
|
710
|
+
return 1, "#{rest_type_label} not found for '#{record_type_id}"
|
711
|
+
end
|
712
|
+
# reload the type by id to get all the details ie. optionTypes
|
713
|
+
if record_type['optionTypes'].nil?
|
714
|
+
record_type = rest_type_find_by_name_or_id(record_type['id'])
|
648
715
|
end
|
649
716
|
end
|
650
717
|
passed_options = parse_passed_options(options)
|
@@ -663,15 +730,20 @@ EOT
|
|
663
730
|
options[:params]['type'] = record_type['code']
|
664
731
|
end
|
665
732
|
# update options without prompting by default
|
666
|
-
if
|
667
|
-
|
668
|
-
v_prompt = Morpheus::Cli::OptionTypes.no_prompt(
|
733
|
+
if option_types && !option_types.empty?
|
734
|
+
api_params = (options[:params] || {}).merge(record_payload) # need to merge in values from record too, ughhh
|
735
|
+
v_prompt = Morpheus::Cli::OptionTypes.no_prompt(option_types, options[:options], @api_client, api_params)
|
669
736
|
v_prompt.deep_compact!
|
670
737
|
v_prompt.booleanize! # 'on' => true
|
671
738
|
record_payload.deep_merge!(v_prompt)
|
672
739
|
end
|
673
740
|
# options by type
|
674
|
-
my_option_types =
|
741
|
+
my_option_types = nil
|
742
|
+
if respond_to?("load_option_types_for_#{rest_key}", true)
|
743
|
+
my_option_types = send("load_option_types_for_#{rest_key}", record_type, nil)
|
744
|
+
else
|
745
|
+
my_option_types = record_type ? record_type['optionTypes'] : nil
|
746
|
+
end
|
675
747
|
if my_option_types && !my_option_types.empty?
|
676
748
|
# remove redundant fieldContext
|
677
749
|
# make them optional for updates
|
@@ -684,15 +756,15 @@ EOT
|
|
684
756
|
option_type.delete('required')
|
685
757
|
option_type.delete('defaultValue')
|
686
758
|
end
|
687
|
-
|
759
|
+
api_params = (options[:params] || {}).merge(record_payload) # need to merge in values from record too, ughhh
|
760
|
+
v_prompt = Morpheus::Cli::OptionTypes.no_prompt(my_option_types, options[:options], @api_client, api_params)
|
688
761
|
v_prompt.deep_compact!
|
689
762
|
v_prompt.booleanize! # 'on' => true
|
690
763
|
record_payload.deep_merge!(v_prompt)
|
691
764
|
end
|
692
765
|
# advanced options
|
693
|
-
if
|
694
|
-
|
695
|
-
v_prompt = Morpheus::Cli::OptionTypes.no_prompt(update_advanced_option_types, options[:options], @api_client, options[:params])
|
766
|
+
if advanced_option_types && !advanced_option_types.empty?
|
767
|
+
v_prompt = Morpheus::Cli::OptionTypes.no_prompt(advanced_option_types, options[:options], @api_client, options[:params])
|
696
768
|
v_prompt.deep_compact!
|
697
769
|
v_prompt.booleanize! # 'on' => true
|
698
770
|
record_payload.deep_merge!(v_prompt)
|
@@ -729,7 +801,7 @@ EOT
|
|
729
801
|
build_standard_remove_options(opts, options)
|
730
802
|
opts.footer = <<-EOT
|
731
803
|
Delete an existing #{rest_label.downcase}.
|
732
|
-
[#{rest_arg}] is required. This is the name or id of #{a_or_an(rest_label)} #{rest_label.downcase}.
|
804
|
+
[#{rest_arg}] is required. This is the #{rest_has_name ? 'name or id' : 'id'} of #{a_or_an(rest_label)} #{rest_label.downcase}.
|
733
805
|
EOT
|
734
806
|
end
|
735
807
|
optparse.parse!(args)
|
@@ -745,7 +817,7 @@ EOT
|
|
745
817
|
end
|
746
818
|
rest_interface.setopts(options)
|
747
819
|
if options[:dry_run]
|
748
|
-
print_dry_run rest_interface.dry.destroy(record['id'])
|
820
|
+
print_dry_run rest_interface.dry.destroy(record['id'], params)
|
749
821
|
return 0, nil
|
750
822
|
end
|
751
823
|
json_response = rest_interface.destroy(record['id'], params)
|