morpheus-cli 5.4.3.1 → 5.4.4.2

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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/Dockerfile +1 -1
  3. data/lib/morpheus/api/api_client.rb +8 -0
  4. data/lib/morpheus/api/catalog_item_types_interface.rb +9 -12
  5. data/lib/morpheus/api/clusters_interface.rb +12 -0
  6. data/lib/morpheus/api/credential_types_interface.rb +9 -0
  7. data/lib/morpheus/api/credentials_interface.rb +9 -0
  8. data/lib/morpheus/api/monitoring_apps_interface.rb +12 -4
  9. data/lib/morpheus/api/monitoring_checks_interface.rb +12 -4
  10. data/lib/morpheus/api/monitoring_groups_interface.rb +13 -5
  11. data/lib/morpheus/api/monitoring_incidents_interface.rb +12 -4
  12. data/lib/morpheus/api/options_interface.rb +8 -1
  13. data/lib/morpheus/api/power_schedules_interface.rb +2 -2
  14. data/lib/morpheus/api/service_plans_interface.rb +6 -0
  15. data/lib/morpheus/cli/cli_command.rb +10 -17
  16. data/lib/morpheus/cli/commands/catalog_item_types_command.rb +75 -8
  17. data/lib/morpheus/cli/commands/clusters.rb +119 -5
  18. data/lib/morpheus/cli/commands/credential_types_command.rb +36 -0
  19. data/lib/morpheus/cli/commands/credentials_command.rb +124 -0
  20. data/lib/morpheus/cli/commands/hosts.rb +20 -2
  21. data/lib/morpheus/cli/commands/instances.rb +19 -4
  22. data/lib/morpheus/cli/commands/monitoring_apps_command.rb +8 -8
  23. data/lib/morpheus/cli/commands/monitoring_checks_command.rb +8 -8
  24. data/lib/morpheus/cli/commands/monitoring_groups_command.rb +8 -8
  25. data/lib/morpheus/cli/commands/monitoring_incidents_command.rb +8 -8
  26. data/lib/morpheus/cli/commands/power_schedules_command.rb +189 -258
  27. data/lib/morpheus/cli/commands/service_plans_command.rb +51 -4
  28. data/lib/morpheus/cli/commands/storage_server_types.rb +0 -5
  29. data/lib/morpheus/cli/commands/storage_servers.rb +0 -6
  30. data/lib/morpheus/cli/commands/storage_volume_types.rb +0 -5
  31. data/lib/morpheus/cli/commands/storage_volumes.rb +0 -6
  32. data/lib/morpheus/cli/mixins/provisioning_helper.rb +37 -27
  33. data/lib/morpheus/cli/mixins/rest_command.rb +20 -4
  34. data/lib/morpheus/cli/mixins/secondary_rest_command.rb +10 -4
  35. data/lib/morpheus/cli/mixins/storage_servers_helper.rb +0 -63
  36. data/lib/morpheus/cli/mixins/storage_volumes_helper.rb +0 -43
  37. data/lib/morpheus/cli/option_types.rb +4 -3
  38. data/lib/morpheus/cli/version.rb +1 -1
  39. data/lib/morpheus/routes.rb +13 -3
  40. metadata +11 -7
@@ -8,7 +8,7 @@ class Morpheus::Cli::Clusters
8
8
  include Morpheus::Cli::AccountsHelper
9
9
 
10
10
  register_subcommands :list, :count, :get, :view, :add, :update, :remove, :logs, :history, {:'history-details' => :history_details}, {:'history-event' => :history_event_details}
11
- register_subcommands :list_workers, :add_worker
11
+ register_subcommands :list_workers, :add_worker, :remove_worker, :update_worker_count
12
12
  register_subcommands :list_masters
13
13
  register_subcommands :list_volumes, :remove_volume
14
14
  register_subcommands :list_namespaces, :get_namespace, :add_namespace, :update_namespace, :remove_namespace
@@ -595,7 +595,7 @@ class Morpheus::Cli::Clusters
595
595
 
596
596
  # Multi-disk / prompt for volumes
597
597
  if provision_type['hasVolumes']
598
- volumes = options[:volumes] || prompt_volumes(service_plan, options.merge({'defaultAddFirstDataVolume': true}), @api_client, api_params)
598
+ volumes = options[:volumes] || prompt_volumes(service_plan, provision_type, options.merge({'defaultAddFirstDataVolume': true}), @api_client, api_params)
599
599
  if !volumes.empty?
600
600
  server_payload['volumes'] = volumes
601
601
  end
@@ -1177,7 +1177,9 @@ class Morpheus::Cli::Clusters
1177
1177
  cloud = @clouds_interface.get(cloud_id)['zone']
1178
1178
  cloud['zoneType'] = get_cloud_type(cloud['zoneType']['id'])
1179
1179
  group = @groups_interface.get(cluster['site']['id'])['group']
1180
-
1180
+ provision_type = server_type['provisionType'] || {}
1181
+ provision_type = @provision_types_interface.get(provision_type['id'])['provisionType'] if !provision_type.nil?
1182
+
1181
1183
  server_payload['cloud'] = {'id' => cloud_id}
1182
1184
  service_plan = prompt_service_plan({zoneId: cloud_id, siteId: cluster['site']['id'], provisionTypeId: server_type['provisionType']['id'], groupTypeId: cluster_type['id'], }, options)
1183
1185
 
@@ -1190,7 +1192,7 @@ class Morpheus::Cli::Clusters
1190
1192
  end
1191
1193
 
1192
1194
  # Multi-disk / prompt for volumes
1193
- volumes = options[:volumes] || prompt_volumes(service_plan, options.merge({'defaultAddFirstDataVolume': true}), @api_client, {zoneId: cloud['id'], siteId: group['id']})
1195
+ volumes = options[:volumes] || prompt_volumes(service_plan, provision_type, options.merge({'defaultAddFirstDataVolume': true}), @api_client, {zoneId: cloud['id'], siteId: group['id']})
1194
1196
 
1195
1197
  if !volumes.empty?
1196
1198
  server_payload['volumes'] = volumes
@@ -1198,7 +1200,6 @@ class Morpheus::Cli::Clusters
1198
1200
 
1199
1201
  # Networks
1200
1202
  # NOTE: You must choose subnets in the same availability zone
1201
- provision_type = server_type['provisionType'] || {}
1202
1203
  if provision_type && cloud['zoneType']['code'] != 'esxi'
1203
1204
  server_payload['networkInterfaces'] = options[:networkInterfaces] || prompt_network_interfaces(cloud['id'], server_type['provisionType']['id'], (resource_pool['id'] rescue nil), options)
1204
1205
  end
@@ -1274,6 +1275,90 @@ class Morpheus::Cli::Clusters
1274
1275
  end
1275
1276
  end
1276
1277
 
1278
+ def remove_worker(args)
1279
+ params = {}
1280
+ options = {}
1281
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
1282
+ opts.banner = subcommand_usage("[cluster] [worker]")
1283
+ opts.on( '-f', '--force', "Force Delete" ) do
1284
+ params[:force] = 'on'
1285
+ end
1286
+ build_standard_remove_options(opts, options)
1287
+ opts.footer = "Delete a worker from a cluster.\n" +
1288
+ "[cluster] is required. This is the name or id of an existing cluster.\n" +
1289
+ "[worker] is required. This is the name or (server) id of an existing worker."
1290
+ end
1291
+ optparse.parse!(args)
1292
+ verify_args!(args:args, optparse:optparse, count:2)
1293
+ connect(options)
1294
+ params.merge!(parse_query_options(options))
1295
+
1296
+ cluster = find_cluster_by_name_or_id(args[0])
1297
+ return 1 if cluster.nil?
1298
+
1299
+ worker_id = args[1]
1300
+ if worker_id.empty?
1301
+ raise_command_error "missing required worker parameter"
1302
+ end
1303
+
1304
+ worker = find_worker_by_name_or_id(cluster['id'], worker_id)
1305
+ if worker.nil?
1306
+ print_red_alert "Worker not found for '#{worker_id}'"
1307
+ return 1
1308
+ end
1309
+ unless options[:yes] || ::Morpheus::Cli::OptionTypes::confirm("Are you sure you would like to remove the cluster worker '#{worker['name'] || worker['id']}'?", options)
1310
+ return 9, "aborted command"
1311
+ end
1312
+
1313
+ @clusters_interface.setopts(options)
1314
+ if options[:dry_run]
1315
+ print_dry_run @clusters_interface.dry.destroy_worker(cluster['id'], worker['id'], params)
1316
+ return
1317
+ end
1318
+ json_response = @clusters_interface.destroy_worker(cluster['id'], worker['id'], params)
1319
+ render_response(json_response, options) do
1320
+ print_green_success "Worker #{worker['name']} is being removed from cluster #{cluster['name']}..."
1321
+ end
1322
+ return 0, nil
1323
+ end
1324
+
1325
+ def update_worker_count(args)
1326
+ params = {}
1327
+ options = {}
1328
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
1329
+ opts.banner = subcommand_usage("[cluster] [worker_count]")
1330
+ build_standard_update_options(opts, options)
1331
+ opts.footer = "Resizes a cluster to the specified number of worker nodes.\n" +
1332
+ "[cluster] is required. This is the name or id of an existing cluster.\n" +
1333
+ "[worker_count] is required. This is the desired number of workers."
1334
+ end
1335
+ optparse.parse!(args)
1336
+ verify_args!(args:args, optparse:optparse, count:2)
1337
+ connect(options)
1338
+
1339
+ cluster = find_cluster_by_name_or_id(args[0])
1340
+ return 1 if cluster.nil?
1341
+
1342
+ worker_count = args[1]
1343
+ payload = {}
1344
+ if options[:payload]
1345
+ payload = options[:payload]
1346
+ payload.deep_merge!({'workerCount' => worker_count.to_i})
1347
+ else
1348
+ payload.deep_merge!({'workerCount' => worker_count.to_i})
1349
+ end
1350
+ @clusters_interface.setopts(options)
1351
+ if options[:dry_run]
1352
+ print_dry_run @clusters_interface.dry.update_worker_count(cluster['id'], payload)
1353
+ return
1354
+ end
1355
+ json_response = @clusters_interface.update_worker_count(cluster['id'], payload)
1356
+ render_response(json_response, options) do
1357
+ print_green_success "Cluster #{cluster['name']} is being resized to #{worker_count} worker nodes..."
1358
+ end
1359
+ return 0, nil
1360
+ end
1361
+
1277
1362
  def list_masters(args)
1278
1363
  options = {}
1279
1364
  optparse = Morpheus::Cli::OptionParser.new do |opts|
@@ -3479,6 +3564,35 @@ class Morpheus::Cli::Clusters
3479
3564
  out
3480
3565
  end
3481
3566
 
3567
+ def find_worker_by_name_or_id(cluster_id, val)
3568
+ if val.to_s =~ /\A\d{1,}\Z/
3569
+ find_worker_by_id(cluster_id, val.to_i)
3570
+ else
3571
+ find_worker_by_name(cluster_id, val)
3572
+ end
3573
+
3574
+ end
3575
+
3576
+ def find_worker_by_id(cluster_id, id)
3577
+ json_results = @clusters_interface.list_workers(cluster_id)
3578
+ filtered_results = json_results['workers'].select {|worker| worker['id'] == id}
3579
+ if filtered_results.empty? || filtered_results.count > 1
3580
+ print_red_alert "Worker not found by id #{id}"
3581
+ exit 1
3582
+ end
3583
+ filtered_results[0]
3584
+ end
3585
+
3586
+ def find_worker_by_name(cluster_id, name)
3587
+ params = {phrase: name}
3588
+ json_results = @clusters_interface.list_workers(cluster_id, params)
3589
+ if json_results['workers'].empty? || json_results['workers'].count > 1
3590
+ print_red_alert "Worker not found by name #{name}"
3591
+ exit 1
3592
+ end
3593
+ json_results['workers'][0]
3594
+ end
3595
+
3482
3596
  def find_cluster_by_name_or_id(val)
3483
3597
  if val.to_s =~ /\A\d{1,}\Z/
3484
3598
  find_cluster_by_id(val)
@@ -0,0 +1,36 @@
1
+ require 'morpheus/cli/cli_command'
2
+
3
+ class Morpheus::Cli::CredentialTypesCommand
4
+ include Morpheus::Cli::CliCommand
5
+ include Morpheus::Cli::RestCommand
6
+
7
+ set_command_description "View credential types"
8
+ set_command_name :'credential-types'
9
+ register_subcommands :list, :get
10
+
11
+ # register_interfaces :credential_types
12
+
13
+ protected
14
+
15
+ def credential_type_list_column_definitions(options)
16
+ {
17
+ "ID" => 'id',
18
+ "Name" => 'name',
19
+ "Code" => 'code',
20
+ }
21
+ end
22
+
23
+ def credential_type_column_definitions(options)
24
+ {
25
+ "ID" => 'id',
26
+ "Name" => 'name',
27
+ "Code" => 'code',
28
+ # "Description" => 'description',
29
+ "Enabled" => lambda {|it| format_boolean(it['enabled']) },
30
+ "Creatable" => lambda {|it| format_boolean(it['creatable']) },
31
+ "Editable" => lambda {|it| format_boolean(it['editable']) },
32
+ }
33
+ end
34
+
35
+ end
36
+
@@ -0,0 +1,124 @@
1
+ require 'morpheus/cli/cli_command'
2
+
3
+ class Morpheus::Cli::CredentialsCommand
4
+ include Morpheus::Cli::CliCommand
5
+ include Morpheus::Cli::RestCommand
6
+
7
+ set_command_name :'credentials'
8
+ set_command_description "View and manage credentials."
9
+ register_subcommands :list, :get, :add, :update, :remove
10
+
11
+ # RestCommand settings
12
+ register_interfaces :credentials, :credential_types
13
+ set_rest_has_type true
14
+ # set_rest_type :credential_types
15
+
16
+ protected
17
+
18
+ def render_response_for_get(json_response, options)
19
+ render_response(json_response, options, rest_object_key) do
20
+ record = json_response[rest_object_key]
21
+ print_h1 rest_label, [], options
22
+ print cyan
23
+ print_description_list(credential_column_definitions(options, record), record, options)
24
+ print reset,"\n"
25
+ end
26
+ end
27
+
28
+ def credential_list_column_definitions(options)
29
+ {
30
+ "ID" => 'id',
31
+ "Name" => 'name',
32
+ "Type" => lambda {|it| it['type'] ? it['type']['name'] : '' },
33
+ }
34
+ end
35
+
36
+ def credential_column_definitions(options, credential)
37
+ columns = [
38
+ {"ID" => 'id' },
39
+ {"Credential Store" => lambda {|it| it['integration'] ? it['integration']['name'] : 'Internal'} },
40
+ {"Name" => 'name' },
41
+ {"Description" => 'description' },
42
+ {"Type" => lambda {|it| it['type'] ? it['type']['name'] : '' } },
43
+ {"Enabled" => lambda {|it| format_boolean(it['enabled']) } },
44
+ ]
45
+ type_code = credential['type']['code']
46
+ if type_code == "access-key-secret"
47
+ columns += [
48
+ {"Access Key" => lambda {|it| it['username'] } },
49
+ {"Secret Key" => lambda {|it| it['password'] } },
50
+ ]
51
+ elsif type_code == "client-id-secret"
52
+ columns += [
53
+ {"Client ID" => lambda {|it| it['username'] } },
54
+ {"Client Secret" => lambda {|it| it['password'] } },
55
+ ]
56
+ elsif type_code == "email-private-key"
57
+ columns += [
58
+ {"Email" => lambda {|it| it['username'] } },
59
+ {"Private Key" => lambda {|it| it['authKey'] ? it['authKey']['name'] : '' } },
60
+ ]
61
+ elsif type_code == "tenant-username-keypair" || type_code == "tenant-username-key"
62
+ columns += [
63
+ {"Tenant" => lambda {|it| it['authPath'] } },
64
+ {"Username" => lambda {|it| it['username'] } },
65
+ {"Private Key" => lambda {|it| it['authKey'] ? it['authKey']['name'] : '' } },
66
+ ]
67
+ elsif type_code == "username-api-key"
68
+ columns += [
69
+ {"Username" => lambda {|it| it['username'] } },
70
+ {"API Key" => lambda {|it| it['password'] } },
71
+ ]
72
+ elsif type_code == "username-keypair" || type_code == "username-key"
73
+ columns += [
74
+ {"Username" => lambda {|it| it['username'] } },
75
+ {"Private Key" => lambda {|it| it['authKey'] ? it['authKey']['name'] : '' } },
76
+ ]
77
+ elsif type_code == "username-password"
78
+ columns += [
79
+ {"Username" => lambda {|it| it['username'] } },
80
+ {"Password" => lambda {|it| it['password'] } },
81
+ ]
82
+ elsif type_code == "username-password-keypair" || type_code == "username-password-key"
83
+ columns += [
84
+ {"Username" => lambda {|it| it['username'] } },
85
+ {"Password" => lambda {|it| it['password'] } },
86
+ {"Private Key" => lambda {|it| it['authKey'] ? it['authKey']['name'] : '' } },
87
+ ]
88
+ end
89
+ columns += [
90
+ {"Created" => lambda {|it| format_local_dt(it['dateCreated']) } },
91
+ {"Updated" => lambda {|it| format_local_dt(it['lastUpdated']) } },
92
+ ]
93
+ return columns
94
+ end
95
+
96
+ def add_credential_option_types()
97
+ [
98
+ {'shorthand' => '-t', 'fieldName' => 'type', 'fieldLabel' => 'Credential Type', 'type' => 'select', 'optionSource' => lambda {|api_client, api_params|
99
+ api_client.credential_types.list({max:10000})['credentialTypes'].collect { |it| {"name" => it["name"], "value" => it["code"]} }
100
+ }, 'required' => true},
101
+ {'fieldName' => 'integration.id', 'fieldLabel' => 'Credential Store', 'type' => 'select', 'optionSource' => 'credentialIntegrations'},
102
+ {'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true},
103
+ {'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text', 'required' => false},
104
+ {'fieldName' => 'enabled', 'fieldLabel' => 'Enabled', 'type' => 'checkbox', 'required' => false, 'defaultValue' => true},
105
+ ]
106
+ end
107
+
108
+ def add_credential_advanced_option_types()
109
+ []
110
+ end
111
+
112
+ def update_credential_option_types()
113
+ [
114
+ {'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text'},
115
+ {'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text'},
116
+ {'fieldName' => 'enabled', 'fieldLabel' => 'Enabled', 'type' => 'checkbox'},
117
+ ]
118
+ end
119
+
120
+ def update_credential_advanced_option_types()
121
+ add_credential_advanced_option_types()
122
+ end
123
+
124
+ end
@@ -29,6 +29,7 @@ class Morpheus::Cli::Hosts
29
29
  @task_sets_interface = @api_client.task_sets
30
30
  @servers_interface = @api_client.servers
31
31
  @server_types_interface = @api_client.server_types
32
+ @provision_types_interface = @api_client.provision_types
32
33
  @logs_interface = @api_client.logs
33
34
  @accounts_interface = @api_client.accounts
34
35
  @active_group_id = Morpheus::Cli::Groups.active_groups[@appliance_name]
@@ -854,6 +855,19 @@ class Morpheus::Cli::Hosts
854
855
  # remove cpu and memory option types, which now come from the plan
855
856
  option_type_list = reject_service_plan_option_types(option_type_list)
856
857
 
858
+ # need to GET provision type for optionTypes, and other settings...
859
+ provision_type_code = server_type["provisionType"] ? server_type["provisionType"]["code"] : nil
860
+ provision_type = nil
861
+ if provision_type_code
862
+ provision_type = provision_types_interface.list({code:provision_type_code})['provisionTypes'][0]
863
+ if provision_type.nil?
864
+ print_red_alert "Provision Type not found by code #{provision_type_code}"
865
+ exit 1
866
+ end
867
+ else
868
+ provision_type = get_provision_type_for_zone_type(cloud['zoneType']['id'])
869
+ end
870
+
857
871
  # prompt for resource pool
858
872
  pool_id = nil
859
873
  has_zone_pools = server_type["provisionType"] && server_type["provisionType"]["hasZonePools"]
@@ -873,7 +887,7 @@ class Morpheus::Cli::Hosts
873
887
  end
874
888
 
875
889
  # prompt for volumes
876
- volumes = prompt_volumes(service_plan, options, @api_client, {zoneId: cloud_id, serverTypeId: server_type['id'], siteId: group_id})
890
+ volumes = prompt_volumes(service_plan, provision_type, options, @api_client, {zoneId: cloud_id, serverTypeId: server_type['id'], siteId: group_id})
877
891
  if !volumes.empty?
878
892
  payload['volumes'] = volumes
879
893
  end
@@ -1226,6 +1240,10 @@ class Morpheus::Cli::Hosts
1226
1240
  :server => {:id => server["id"]}
1227
1241
  }
1228
1242
 
1243
+ # need to GET provision type for some settings...
1244
+ server_type = @server_types_interface.get(server_type_id)['serverType']
1245
+ provision_type = @provision_types_interface.get(server_type['provisionType']['id'])['provisionType']
1246
+
1229
1247
  # avoid 500 error
1230
1248
  # payload[:servicePlanOptions] = {}
1231
1249
  unless options[:no_prompt]
@@ -1253,7 +1271,7 @@ class Morpheus::Cli::Hosts
1253
1271
  current_volumes = volumes_response['volumes'].sort {|x,y| x['displayOrder'] <=> y['displayOrder'] }
1254
1272
 
1255
1273
  # prompt for volumes
1256
- volumes = prompt_resize_volumes(current_volumes, service_plan, options)
1274
+ volumes = prompt_resize_volumes(current_volumes, service_plan, provision_type, options)
1257
1275
  if !volumes.empty?
1258
1276
  payload[:volumes] = volumes
1259
1277
  end
@@ -2694,6 +2694,10 @@ class Morpheus::Cli::Instances
2694
2694
  layout_id = instance['layout']['id']
2695
2695
  plan_id = instance['plan']['id']
2696
2696
  current_plan_name = instance['plan']['name']
2697
+
2698
+ # need to GET provision type for some settings...
2699
+ provision_type = @provision_types_interface.get(instance['layout']['provisionTypeId'])['provisionType']
2700
+
2697
2701
  # prompt for service plan
2698
2702
  service_plans_json = @instances_interface.service_plans({zoneId: cloud_id, siteId: group_id, layoutId: layout_id})
2699
2703
  service_plans = service_plans_json["plans"]
@@ -2715,7 +2719,7 @@ class Morpheus::Cli::Instances
2715
2719
  current_volumes = volumes_response['volumes'].sort {|x,y| x['displayOrder'] <=> y['displayOrder'] }
2716
2720
 
2717
2721
  # prompt for volumes
2718
- volumes = prompt_resize_volumes(current_volumes, service_plan, options)
2722
+ volumes = prompt_resize_volumes(current_volumes, service_plan, provision_type, options)
2719
2723
  if !volumes.empty?
2720
2724
  payload["volumes"] = volumes
2721
2725
  end
@@ -4399,9 +4403,20 @@ EOT
4399
4403
  #if instance['layout']['provisionTypeCode'] == 'vmware'
4400
4404
  if provision_type && provision_type["hasFolders"]
4401
4405
  if payload['zoneFolder'].nil?
4402
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'zoneFolder', 'type' => 'select', 'optionSource' => 'vmwareFolders', 'fieldLabel' => 'Folder', 'description' => "Folder externalId or '/' to use the root folder", 'required' => true}], options[:options], @api_client, {siteId: instance['group']['id'], zoneId: instance['cloud']['id']})
4403
- if v_prompt['zoneFolder'].to_s != ''
4404
- payload['zoneFolder'] = v_prompt['zoneFolder']
4406
+ # vmwareFolders moved from /api/options/vmwareFolders to /api/options/vmware/vmwareFolders
4407
+ folder_prompt = nil
4408
+ begin
4409
+ folder_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'zoneFolder', 'type' => 'select', 'optionSource' => 'vmwareFolders', 'optionSourceType' => 'vmware', 'fieldLabel' => 'Folder', 'description' => "Folder externalId or '/' to use the root folder", 'required' => true}], options[:options], @api_client, {siteId: instance['group']['id'], zoneId: instance['cloud']['id']})
4410
+ rescue RestClient::Exception => e
4411
+ Morpheus::Logging::DarkPrinter.puts "Failed to load folder options" if Morpheus::Logging.debug?
4412
+ begin
4413
+ folder_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'zoneFolder', 'type' => 'select', 'optionSource' => 'vmwareFolders', 'fieldLabel' => 'Folder', 'description' => "Folder externalId or '/' to use the root folder", 'required' => true}], options[:options], @api_client, {siteId: instance['group']['id'], zoneId: instance['cloud']['id']})
4414
+ rescue RestClient::Exception => e2
4415
+ Morpheus::Logging::DarkPrinter.puts "Failed to load folder options from alternative endpoint too" if Morpheus::Logging.debug?
4416
+ end
4417
+ end
4418
+ if folder_prompt && folder_prompt['zoneFolder'].to_s != ''
4419
+ payload['zoneFolder'] = folder_prompt['zoneFolder']
4405
4420
  end
4406
4421
  end
4407
4422
  end
@@ -509,10 +509,10 @@ class Morpheus::Cli::MonitoringAppsCommand
509
509
  end
510
510
  @monitoring_apps_interface.setopts(options)
511
511
  if options[:dry_run]
512
- print_dry_run @monitoring_apps_interface.dry.quarantine(monitor_app["id"], payload)
512
+ print_dry_run @monitoring_apps_interface.dry.mute(monitor_app["id"], payload)
513
513
  return 0
514
514
  end
515
- json_response = @monitoring_apps_interface.quarantine(monitor_app["id"], payload)
515
+ json_response = @monitoring_apps_interface.mute(monitor_app["id"], payload)
516
516
  if options[:json]
517
517
  puts as_json(json_response, options)
518
518
  elsif !options[:quiet]
@@ -557,10 +557,10 @@ class Morpheus::Cli::MonitoringAppsCommand
557
557
  end
558
558
  @monitoring_apps_interface.setopts(options)
559
559
  if options[:dry_run]
560
- print_dry_run @monitoring_apps_interface.dry.quarantine(monitor_app["id"], payload)
560
+ print_dry_run @monitoring_apps_interface.dry.mute(monitor_app["id"], payload)
561
561
  return 0
562
562
  end
563
- json_response = @monitoring_apps_interface.quarantine(monitor_app["id"], payload)
563
+ json_response = @monitoring_apps_interface.mute(monitor_app["id"], payload)
564
564
  if options[:json]
565
565
  puts as_json(json_response, options)
566
566
  elsif !options[:quiet]
@@ -602,10 +602,10 @@ class Morpheus::Cli::MonitoringAppsCommand
602
602
  end
603
603
  @monitoring_apps_interface.setopts(options)
604
604
  if options[:dry_run]
605
- print_dry_run @monitoring_apps_interface.dry.quarantine_all(payload)
605
+ print_dry_run @monitoring_apps_interface.dry.mute_all(payload)
606
606
  return 0
607
607
  end
608
- json_response = @monitoring_apps_interface.quarantine_all(payload)
608
+ json_response = @monitoring_apps_interface.mute_all(payload)
609
609
  if options[:json]
610
610
  puts as_json(json_response, options)
611
611
  elsif !options[:quiet]
@@ -648,10 +648,10 @@ class Morpheus::Cli::MonitoringAppsCommand
648
648
  end
649
649
  @monitoring_apps_interface.setopts(options)
650
650
  if options[:dry_run]
651
- print_dry_run @monitoring_apps_interface.dry.quarantine_all(payload)
651
+ print_dry_run @monitoring_apps_interface.dry.mute_all(payload)
652
652
  return 0
653
653
  end
654
- json_response = @monitoring_apps_interface.quarantine_all(payload)
654
+ json_response = @monitoring_apps_interface.mute_all(payload)
655
655
  if options[:json]
656
656
  puts as_json(json_response, options)
657
657
  elsif !options[:quiet]
@@ -507,10 +507,10 @@ class Morpheus::Cli::MonitoringChecksCommand
507
507
  end
508
508
  @monitoring_checks_interface.setopts(options)
509
509
  if options[:dry_run]
510
- print_dry_run @monitoring_checks_interface.dry.quarantine(check["id"], payload)
510
+ print_dry_run @monitoring_checks_interface.dry.mute(check["id"], payload)
511
511
  return 0
512
512
  end
513
- json_response = @monitoring_checks_interface.quarantine(check["id"], payload)
513
+ json_response = @monitoring_checks_interface.mute(check["id"], payload)
514
514
  if options[:json]
515
515
  puts as_json(json_response, options)
516
516
  elsif !options[:quiet]
@@ -555,10 +555,10 @@ class Morpheus::Cli::MonitoringChecksCommand
555
555
  end
556
556
  @monitoring_checks_interface.setopts(options)
557
557
  if options[:dry_run]
558
- print_dry_run @monitoring_checks_interface.dry.quarantine(check["id"], payload)
558
+ print_dry_run @monitoring_checks_interface.dry.mute(check["id"], payload)
559
559
  return 0
560
560
  end
561
- json_response = @monitoring_checks_interface.quarantine(check["id"], payload)
561
+ json_response = @monitoring_checks_interface.mute(check["id"], payload)
562
562
  if options[:json]
563
563
  puts as_json(json_response, options)
564
564
  elsif !options[:quiet]
@@ -600,10 +600,10 @@ class Morpheus::Cli::MonitoringChecksCommand
600
600
  end
601
601
  @monitoring_checks_interface.setopts(options)
602
602
  if options[:dry_run]
603
- print_dry_run @monitoring_checks_interface.dry.quarantine_all(payload)
603
+ print_dry_run @monitoring_checks_interface.dry.mute_all(payload)
604
604
  return 0
605
605
  end
606
- json_response = @monitoring_checks_interface.quarantine_all(payload)
606
+ json_response = @monitoring_checks_interface.mute_all(payload)
607
607
  if options[:json]
608
608
  puts as_json(json_response, options)
609
609
  elsif !options[:quiet]
@@ -646,10 +646,10 @@ class Morpheus::Cli::MonitoringChecksCommand
646
646
  end
647
647
  @monitoring_checks_interface.setopts(options)
648
648
  if options[:dry_run]
649
- print_dry_run @monitoring_checks_interface.dry.quarantine_all(payload)
649
+ print_dry_run @monitoring_checks_interface.dry.mute_all(payload)
650
650
  return 0
651
651
  end
652
- json_response = @monitoring_checks_interface.quarantine_all(payload)
652
+ json_response = @monitoring_checks_interface.mute_all(payload)
653
653
  if options[:json]
654
654
  puts as_json(json_response, options)
655
655
  elsif !options[:quiet]
@@ -467,10 +467,10 @@ class Morpheus::Cli::MonitoringGroupsCommand
467
467
  end
468
468
  @monitoring_groups_interface.setopts(options)
469
469
  if options[:dry_run]
470
- print_dry_run @monitoring_groups_interface.dry.quarantine(check_group["id"], payload)
470
+ print_dry_run @monitoring_groups_interface.dry.mute(check_group["id"], payload)
471
471
  return 0
472
472
  end
473
- json_response = @monitoring_groups_interface.quarantine(check_group["id"], payload)
473
+ json_response = @monitoring_groups_interface.mute(check_group["id"], payload)
474
474
  if options[:json]
475
475
  puts as_json(json_response, options)
476
476
  elsif !options[:quiet]
@@ -515,10 +515,10 @@ class Morpheus::Cli::MonitoringGroupsCommand
515
515
  end
516
516
  @monitoring_groups_interface.setopts(options)
517
517
  if options[:dry_run]
518
- print_dry_run @monitoring_groups_interface.dry.quarantine(check_group["id"], payload)
518
+ print_dry_run @monitoring_groups_interface.dry.mute(check_group["id"], payload)
519
519
  return 0
520
520
  end
521
- json_response = @monitoring_groups_interface.quarantine(check_group["id"], payload)
521
+ json_response = @monitoring_groups_interface.mute(check_group["id"], payload)
522
522
  if options[:json]
523
523
  puts as_json(json_response, options)
524
524
  elsif !options[:quiet]
@@ -560,10 +560,10 @@ class Morpheus::Cli::MonitoringGroupsCommand
560
560
  end
561
561
  @monitoring_groups_interface.setopts(options)
562
562
  if options[:dry_run]
563
- print_dry_run @monitoring_groups_interface.dry.quarantine_all(payload)
563
+ print_dry_run @monitoring_groups_interface.dry.mute_all(payload)
564
564
  return 0
565
565
  end
566
- json_response = @monitoring_groups_interface.quarantine_all(payload)
566
+ json_response = @monitoring_groups_interface.mute_all(payload)
567
567
  if options[:json]
568
568
  puts as_json(json_response, options)
569
569
  elsif !options[:quiet]
@@ -606,10 +606,10 @@ class Morpheus::Cli::MonitoringGroupsCommand
606
606
  end
607
607
  @monitoring_groups_interface.setopts(options)
608
608
  if options[:dry_run]
609
- print_dry_run @monitoring_groups_interface.dry.quarantine_all(payload)
609
+ print_dry_run @monitoring_groups_interface.dry.mute_all(payload)
610
610
  return 0
611
611
  end
612
- json_response = @monitoring_groups_interface.quarantine_all(payload)
612
+ json_response = @monitoring_groups_interface.mute_all(payload)
613
613
  if options[:json]
614
614
  puts as_json(json_response, options)
615
615
  elsif !options[:quiet]
@@ -579,10 +579,10 @@ class Morpheus::Cli::MonitoringIncidentsCommand
579
579
  end
580
580
  @monitoring_incidents_interface.setopts(options)
581
581
  if options[:dry_run]
582
- print_dry_run @monitoring_incidents_interface.dry.quarantine(incident["id"], payload)
582
+ print_dry_run @monitoring_incidents_interface.dry.mute(incident["id"], payload)
583
583
  return 0
584
584
  end
585
- json_response = @monitoring_incidents_interface.quarantine(incident["id"], payload)
585
+ json_response = @monitoring_incidents_interface.mute(incident["id"], payload)
586
586
  if options[:json]
587
587
  puts as_json(json_response, options)
588
588
  elsif !options[:quiet]
@@ -627,10 +627,10 @@ class Morpheus::Cli::MonitoringIncidentsCommand
627
627
  end
628
628
  @monitoring_incidents_interface.setopts(options)
629
629
  if options[:dry_run]
630
- print_dry_run @monitoring_incidents_interface.dry.quarantine(incident["id"], payload)
630
+ print_dry_run @monitoring_incidents_interface.dry.mute(incident["id"], payload)
631
631
  return 0
632
632
  end
633
- json_response = @monitoring_incidents_interface.quarantine(incident["id"], payload)
633
+ json_response = @monitoring_incidents_interface.mute(incident["id"], payload)
634
634
  if options[:json]
635
635
  puts as_json(json_response, options)
636
636
  elsif !options[:quiet]
@@ -672,10 +672,10 @@ class Morpheus::Cli::MonitoringIncidentsCommand
672
672
  end
673
673
  @monitoring_incidents_interface.setopts(options)
674
674
  if options[:dry_run]
675
- print_dry_run @monitoring_incidents_interface.dry.quarantine_all(payload)
675
+ print_dry_run @monitoring_incidents_interface.dry.mute_all(payload)
676
676
  return 0
677
677
  end
678
- json_response = @monitoring_incidents_interface.quarantine_all(payload)
678
+ json_response = @monitoring_incidents_interface.mute_all(payload)
679
679
  if options[:json]
680
680
  puts as_json(json_response, options)
681
681
  elsif !options[:quiet]
@@ -718,10 +718,10 @@ class Morpheus::Cli::MonitoringIncidentsCommand
718
718
  end
719
719
  @monitoring_incidents_interface.setopts(options)
720
720
  if options[:dry_run]
721
- print_dry_run @monitoring_incidents_interface.dry.quarantine_all(payload)
721
+ print_dry_run @monitoring_incidents_interface.dry.mute_all(payload)
722
722
  return 0
723
723
  end
724
- json_response = @monitoring_incidents_interface.quarantine_all(payload)
724
+ json_response = @monitoring_incidents_interface.mute_all(payload)
725
725
  if options[:json]
726
726
  puts as_json(json_response, options)
727
727
  elsif !options[:quiet]