morpheus-cli 5.4.3.1 → 5.4.4
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/Dockerfile +1 -1
- data/lib/morpheus/api/api_client.rb +8 -0
- data/lib/morpheus/api/catalog_item_types_interface.rb +9 -12
- data/lib/morpheus/api/clusters_interface.rb +12 -0
- data/lib/morpheus/api/credential_types_interface.rb +9 -0
- data/lib/morpheus/api/credentials_interface.rb +9 -0
- data/lib/morpheus/api/monitoring_apps_interface.rb +12 -4
- data/lib/morpheus/api/monitoring_checks_interface.rb +12 -4
- data/lib/morpheus/api/monitoring_groups_interface.rb +13 -5
- data/lib/morpheus/api/monitoring_incidents_interface.rb +12 -4
- data/lib/morpheus/api/options_interface.rb +8 -1
- data/lib/morpheus/api/power_schedules_interface.rb +2 -2
- data/lib/morpheus/api/service_plans_interface.rb +6 -0
- data/lib/morpheus/cli/cli_command.rb +10 -17
- data/lib/morpheus/cli/commands/catalog_item_types_command.rb +75 -8
- data/lib/morpheus/cli/commands/clusters.rb +119 -5
- data/lib/morpheus/cli/commands/credential_types_command.rb +36 -0
- data/lib/morpheus/cli/commands/credentials_command.rb +124 -0
- data/lib/morpheus/cli/commands/hosts.rb +20 -2
- data/lib/morpheus/cli/commands/instances.rb +5 -1
- data/lib/morpheus/cli/commands/monitoring_apps_command.rb +8 -8
- data/lib/morpheus/cli/commands/monitoring_checks_command.rb +8 -8
- data/lib/morpheus/cli/commands/monitoring_groups_command.rb +8 -8
- data/lib/morpheus/cli/commands/monitoring_incidents_command.rb +8 -8
- data/lib/morpheus/cli/commands/power_schedules_command.rb +189 -258
- data/lib/morpheus/cli/commands/service_plans_command.rb +51 -4
- data/lib/morpheus/cli/commands/storage_server_types.rb +0 -5
- data/lib/morpheus/cli/commands/storage_servers.rb +0 -6
- data/lib/morpheus/cli/commands/storage_volume_types.rb +0 -5
- data/lib/morpheus/cli/commands/storage_volumes.rb +0 -6
- data/lib/morpheus/cli/mixins/provisioning_helper.rb +37 -27
- data/lib/morpheus/cli/mixins/rest_command.rb +20 -4
- data/lib/morpheus/cli/mixins/storage_servers_helper.rb +0 -63
- data/lib/morpheus/cli/mixins/storage_volumes_helper.rb +0 -43
- data/lib/morpheus/cli/option_types.rb +1 -0
- data/lib/morpheus/cli/version.rb +1 -1
- data/lib/morpheus/routes.rb +13 -3
- metadata +11 -7
@@ -7,7 +7,7 @@ class Morpheus::Cli::ServicePlanCommand
|
|
7
7
|
|
8
8
|
set_command_name :'service-plans'
|
9
9
|
|
10
|
-
register_subcommands :list, :get, :add, :update, :activate, :deactivate
|
10
|
+
register_subcommands :list, :get, :add, :update, :activate, :deactivate, :remove
|
11
11
|
set_default_subcommand :list
|
12
12
|
|
13
13
|
def connect(opts)
|
@@ -119,8 +119,6 @@ class Morpheus::Cli::ServicePlanCommand
|
|
119
119
|
def _get(plan_id, options = {})
|
120
120
|
params = {}
|
121
121
|
begin
|
122
|
-
@service_plans_interface.setopts(options)
|
123
|
-
|
124
122
|
if !(plan_id.to_s =~ /\A\d{1,}\Z/)
|
125
123
|
plan = find_service_plan(plan_id)
|
126
124
|
|
@@ -130,7 +128,7 @@ class Morpheus::Cli::ServicePlanCommand
|
|
130
128
|
end
|
131
129
|
plan_id = plan['id']
|
132
130
|
end
|
133
|
-
|
131
|
+
@service_plans_interface.setopts(options)
|
134
132
|
if options[:dry_run]
|
135
133
|
print_dry_run @service_plans_interface.dry.get(plan_id)
|
136
134
|
return
|
@@ -740,6 +738,55 @@ class Morpheus::Cli::ServicePlanCommand
|
|
740
738
|
end
|
741
739
|
end
|
742
740
|
|
741
|
+
def remove(args)
|
742
|
+
options = {}
|
743
|
+
params = {}
|
744
|
+
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
745
|
+
opts.banner = subcommand_usage( "[plan]")
|
746
|
+
build_common_options(opts, options, [:json, :dry_run, :remote, :auto_confirm])
|
747
|
+
opts.footer = "Delete a service plan.\n" +
|
748
|
+
"[plan] is required. Service plan ID, name or code"
|
749
|
+
end
|
750
|
+
optparse.parse!(args)
|
751
|
+
connect(options)
|
752
|
+
if args.count != 1
|
753
|
+
raise_command_error "wrong number of arguments, expected 1 and got (#{args.count}) #{args}\n#{optparse}"
|
754
|
+
return 1
|
755
|
+
end
|
756
|
+
|
757
|
+
begin
|
758
|
+
plan = find_service_plan(args[0])
|
759
|
+
|
760
|
+
if !plan
|
761
|
+
print_red_alert "Service plan #{args[0]} not found"
|
762
|
+
return 1
|
763
|
+
end
|
764
|
+
|
765
|
+
unless options[:yes] || ::Morpheus::Cli::OptionTypes::confirm("Are you sure you would like to delete the service plan '#{plan['name']}'?", options)
|
766
|
+
return 9, "aborted command"
|
767
|
+
end
|
768
|
+
|
769
|
+
@service_plans_interface.setopts(options)
|
770
|
+
if options[:dry_run]
|
771
|
+
print_dry_run @service_plans_interface.dry.destroy(plan['id'], params)
|
772
|
+
return
|
773
|
+
end
|
774
|
+
|
775
|
+
json_response = @service_plans_interface.destroy(plan['id'], params)
|
776
|
+
|
777
|
+
if options[:json]
|
778
|
+
print JSON.pretty_generate(json_response)
|
779
|
+
print "\n"
|
780
|
+
elsif !options[:quiet]
|
781
|
+
print_green_success "Service plan #{plan['name']} deleted"
|
782
|
+
end
|
783
|
+
return 0
|
784
|
+
rescue RestClient::Exception => e
|
785
|
+
print_rest_exception(e, options)
|
786
|
+
exit 1
|
787
|
+
end
|
788
|
+
end
|
789
|
+
|
743
790
|
private
|
744
791
|
|
745
792
|
def find_service_plan(val)
|
@@ -66,12 +66,6 @@ class Morpheus::Cli::StorageServers
|
|
66
66
|
}
|
67
67
|
end
|
68
68
|
|
69
|
-
# overridden to work with name or code
|
70
|
-
# nope, api works with name=code now too
|
71
|
-
# def find_storage_server_type_by_name_or_id(name)
|
72
|
-
# storage_server_type_for_name_or_id(name)
|
73
|
-
# end
|
74
|
-
|
75
69
|
def add_storage_server_option_types()
|
76
70
|
[
|
77
71
|
{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true},
|
@@ -65,12 +65,6 @@ class Morpheus::Cli::StorageVolumes
|
|
65
65
|
}
|
66
66
|
end
|
67
67
|
|
68
|
-
# overridden to work with name or code
|
69
|
-
# nope, api works with name=code now too
|
70
|
-
# def find_storage_volume_type_by_name_or_id(name)
|
71
|
-
# storage_volume_type_for_name_or_id(name)
|
72
|
-
# end
|
73
|
-
|
74
68
|
def add_storage_volume_option_types()
|
75
69
|
[
|
76
70
|
{'fieldContext' => 'storageServer', 'fieldName' => 'id', 'fieldLabel' => 'Storage Server', 'type' => 'select', 'optionSource' => 'storageServers', 'optionParams' => {'createType' => 'block'}, 'required' => true},
|
@@ -864,7 +864,7 @@ module Morpheus::Cli::ProvisioningHelper
|
|
864
864
|
if locked_fields.include?('volumes')
|
865
865
|
payload['volumes'] = options[:options]['volumes'] if options[:options]['volumes']
|
866
866
|
else
|
867
|
-
volumes = prompt_volumes(service_plan, options, api_client, {zoneId: cloud_id, layoutId: layout['id'], siteId: group_id})
|
867
|
+
volumes = prompt_volumes(service_plan, provision_type, options, api_client, {zoneId: cloud_id, layoutId: layout['id'], siteId: group_id})
|
868
868
|
if !volumes.empty?
|
869
869
|
payload['volumes'] = volumes
|
870
870
|
end
|
@@ -912,7 +912,7 @@ module Morpheus::Cli::ProvisioningHelper
|
|
912
912
|
has_security_groups = !!sg_option_type
|
913
913
|
available_security_groups = []
|
914
914
|
if sg_option_type && sg_option_type['type'] == 'select' && sg_option_type['optionSource']
|
915
|
-
sg_option_results = options_interface.options_for_source(sg_option_type['optionSource'], sg_api_params)
|
915
|
+
sg_option_results = options_interface.options_for_source(sg_option_type['optionSource'], sg_api_params, sg_option_type['optionSourceType'])
|
916
916
|
available_security_groups = sg_option_results['data'].collect do |it|
|
917
917
|
{"id" => it["value"] || it["id"], "name" => it["name"], "value" => it["value"] || it["id"]}
|
918
918
|
end
|
@@ -1039,7 +1039,7 @@ module Morpheus::Cli::ProvisioningHelper
|
|
1039
1039
|
|
1040
1040
|
# This recreates the behavior of multi_disk.js
|
1041
1041
|
# returns array of volumes based on service plan options (plan_info)
|
1042
|
-
def prompt_volumes(plan_info, options={}, api_client=nil, api_params={})
|
1042
|
+
def prompt_volumes(plan_info, provision_type, options={}, api_client=nil, api_params={})
|
1043
1043
|
#puts "Configure Volumes:"
|
1044
1044
|
# return [] if plan_info['noDisks']
|
1045
1045
|
|
@@ -1141,14 +1141,19 @@ module Morpheus::Cli::ProvisioningHelper
|
|
1141
1141
|
volume['name'] = v_prompt[field_context]['name']
|
1142
1142
|
end
|
1143
1143
|
if plan_info['rootDiskCustomizable'] && storage_type && storage_type['customSize']
|
1144
|
-
|
1145
|
-
|
1146
|
-
volume['size'] =
|
1147
|
-
volume['sizeId'] = nil #volume.delete('sizeId')
|
1144
|
+
# provision_type['rootDiskSizeKnown'] == false means size cannot be changed
|
1145
|
+
if provision_type['rootDiskSizeKnown'] == false
|
1146
|
+
# volume['size'] = plan_size if plan_size.to_i != 0
|
1148
1147
|
else
|
1149
|
-
|
1150
|
-
|
1151
|
-
|
1148
|
+
if root_custom_size_options.empty?
|
1149
|
+
v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldContext' => field_context, 'fieldName' => 'size', 'type' => 'number', 'fieldLabel' => 'Root Volume Size (GB)', 'required' => true, 'description' => 'Enter a volume size (GB).', 'defaultValue' => volume['size']}], options[:options])
|
1150
|
+
volume['size'] = v_prompt[field_context]['size']
|
1151
|
+
volume['sizeId'] = nil #volume.delete('sizeId')
|
1152
|
+
else
|
1153
|
+
v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldContext' => field_context, 'fieldName' => 'sizeId', 'type' => 'select', 'fieldLabel' => 'Root Volume Size', 'selectOptions' => root_custom_size_options, 'required' => true, 'description' => 'Choose a volume size.', 'defaultValue' => volume['sizeId']}], options[:options])
|
1154
|
+
volume['sizeId'] = v_prompt[field_context]['sizeId']
|
1155
|
+
volume['size'] = nil #volume.delete('size')
|
1156
|
+
end
|
1152
1157
|
end
|
1153
1158
|
else
|
1154
1159
|
# might need different logic here ? =o
|
@@ -1248,7 +1253,7 @@ module Morpheus::Cli::ProvisioningHelper
|
|
1248
1253
|
|
1249
1254
|
# This recreates the behavior of multi_disk.js
|
1250
1255
|
# returns array of volumes based on service plan options (plan_info)
|
1251
|
-
def prompt_resize_volumes(current_volumes, plan_info, options={})
|
1256
|
+
def prompt_resize_volumes(current_volumes, plan_info, provision_type, options={})
|
1252
1257
|
#puts "Configure Volumes:"
|
1253
1258
|
no_prompt = (options[:no_prompt] || (options[:options] && options[:options][:no_prompt]))
|
1254
1259
|
|
@@ -1328,7 +1333,7 @@ module Morpheus::Cli::ProvisioningHelper
|
|
1328
1333
|
'id' => current_root_volume['id'],
|
1329
1334
|
'rootVolume' => true,
|
1330
1335
|
'name' => current_root_volume['name'],
|
1331
|
-
'size' => current_root_volume['size'] > plan_size ? current_root_volume['size'] : plan_size,
|
1336
|
+
'size' => current_root_volume['size'] > (plan_size || 0) ? current_root_volume['size'] : plan_size,
|
1332
1337
|
'sizeId' => nil,
|
1333
1338
|
'storageType' => storage_type_id,
|
1334
1339
|
'datastoreId' => current_root_volume['datastoreId']
|
@@ -1339,19 +1344,24 @@ module Morpheus::Cli::ProvisioningHelper
|
|
1339
1344
|
volume['name'] = v_prompt[field_context]['name']
|
1340
1345
|
end
|
1341
1346
|
if plan_info['rootDiskCustomizable'] && storage_type && storage_type['customSize']
|
1342
|
-
|
1343
|
-
|
1344
|
-
volume['size'] =
|
1345
|
-
volume['sizeId'] = nil #volume.delete('sizeId')
|
1347
|
+
# provision_type['rootDiskSizeKnown'] == false means size cannot be changed
|
1348
|
+
if provision_type['rootDiskSizeKnown'] == false
|
1349
|
+
# volume['size'] = plan_size if plan_size.to_i != 0
|
1346
1350
|
else
|
1347
|
-
|
1348
|
-
|
1349
|
-
|
1351
|
+
if root_custom_size_options.empty?
|
1352
|
+
v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldContext' => field_context, 'fieldName' => 'size', 'type' => 'number', 'fieldLabel' => 'Root Volume Size (GB)', 'required' => true, 'description' => 'Enter a volume size (GB).', 'defaultValue' => volume['size']}], options[:options])
|
1353
|
+
volume['size'] = v_prompt[field_context]['size']
|
1354
|
+
volume['sizeId'] = nil #volume.delete('sizeId')
|
1355
|
+
else
|
1356
|
+
v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldContext' => field_context, 'fieldName' => 'sizeId', 'type' => 'select', 'fieldLabel' => 'Root Volume Size', 'selectOptions' => root_custom_size_options, 'required' => true, 'description' => 'Choose a volume size.'}], options[:options])
|
1357
|
+
volume['sizeId'] = v_prompt[field_context]['sizeId']
|
1358
|
+
volume['size'] = nil #volume.delete('size')
|
1359
|
+
end
|
1350
1360
|
end
|
1351
1361
|
else
|
1352
1362
|
# might need different logic here ? =o
|
1353
|
-
volume['size'] = plan_size
|
1354
|
-
volume['sizeId'] = nil #volume.delete('sizeId')
|
1363
|
+
# volume['size'] = plan_size
|
1364
|
+
# volume['sizeId'] = nil #volume.delete('sizeId')
|
1355
1365
|
end
|
1356
1366
|
# if !datastore_options.empty?
|
1357
1367
|
# v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldContext' => field_context, 'fieldName' => 'datastoreId', 'type' => 'select', 'fieldLabel' => 'Root Datastore', 'selectOptions' => datastore_options, 'required' => true, 'description' => 'Choose a datastore.'}], options[:options])
|
@@ -1379,7 +1389,7 @@ module Morpheus::Cli::ProvisioningHelper
|
|
1379
1389
|
'id' => current_volume['id'].to_i,
|
1380
1390
|
'rootVolume' => false,
|
1381
1391
|
'name' => current_volume['name'],
|
1382
|
-
'size' => current_volume['size'] > plan_size ? current_volume['size'] : plan_size,
|
1392
|
+
'size' => current_volume['size'] > (plan_size || 0) ? current_volume['size'] : plan_size,
|
1383
1393
|
'sizeId' => nil,
|
1384
1394
|
'storageType' => (current_volume['type'] || current_volume['storageType']),
|
1385
1395
|
'datastoreId' => current_volume['datastoreId']
|
@@ -1404,7 +1414,7 @@ module Morpheus::Cli::ProvisioningHelper
|
|
1404
1414
|
'id' => current_volume['id'].to_i,
|
1405
1415
|
'rootVolume' => false,
|
1406
1416
|
'name' => current_volume['name'],
|
1407
|
-
'size' => current_volume['size'] > plan_size ? current_volume['size'] : plan_size,
|
1417
|
+
'size' => current_volume['size'] > (plan_size || 0) ? current_volume['size'] : plan_size,
|
1408
1418
|
'sizeId' => nil,
|
1409
1419
|
'storageType' => (current_volume['type'] || current_volume['storageType']),
|
1410
1420
|
'datastoreId' => current_volume['datastoreId']
|
@@ -1426,8 +1436,8 @@ module Morpheus::Cli::ProvisioningHelper
|
|
1426
1436
|
end
|
1427
1437
|
else
|
1428
1438
|
# might need different logic here ? =o
|
1429
|
-
volume['size'] = plan_size
|
1430
|
-
volume['sizeId'] = nil #volume.delete('sizeId')
|
1439
|
+
# volume['size'] = plan_size
|
1440
|
+
# volume['sizeId'] = nil #volume.delete('sizeId')
|
1431
1441
|
end
|
1432
1442
|
# if !datastore_options.empty?
|
1433
1443
|
# v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldContext' => field_context, 'fieldName' => 'datastoreId', 'type' => 'select', 'fieldLabel' => "Disk #{volume_index} Datastore", 'selectOptions' => datastore_options, 'required' => true, 'description' => 'Choose a datastore.'}], options[:options])
|
@@ -1492,8 +1502,8 @@ module Morpheus::Cli::ProvisioningHelper
|
|
1492
1502
|
end
|
1493
1503
|
else
|
1494
1504
|
# might need different logic here ? =o
|
1495
|
-
volume['size'] = plan_size
|
1496
|
-
volume['sizeId'] = nil #volume.delete('sizeId')
|
1505
|
+
# volume['size'] = plan_size
|
1506
|
+
# volume['sizeId'] = nil #volume.delete('sizeId')
|
1497
1507
|
end
|
1498
1508
|
if !datastore_options.empty?
|
1499
1509
|
v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldContext' => field_context, 'fieldName' => 'datastoreId', 'type' => 'select', 'fieldLabel' => "Disk #{volume_index} Datastore", 'selectOptions' => datastore_options, 'required' => true, 'description' => 'Choose a datastore.'}], options[:options])
|
@@ -336,11 +336,19 @@ module Morpheus::Cli::RestCommand
|
|
336
336
|
end
|
337
337
|
|
338
338
|
def rest_object_key
|
339
|
-
|
339
|
+
if respond_to?("#{rest_key}_object_key", true)
|
340
|
+
send("#{rest_key}_object_key")
|
341
|
+
else
|
342
|
+
rest_name.camelcase.singularize
|
343
|
+
end
|
340
344
|
end
|
341
345
|
|
342
346
|
def rest_list_key
|
343
|
-
|
347
|
+
if respond_to?("#{rest_key}_list_key", true)
|
348
|
+
send("#{rest_key}_list_key")
|
349
|
+
else
|
350
|
+
rest_name.camelcase
|
351
|
+
end
|
344
352
|
end
|
345
353
|
|
346
354
|
def rest_column_definitions(options)
|
@@ -408,11 +416,19 @@ module Morpheus::Cli::RestCommand
|
|
408
416
|
end
|
409
417
|
|
410
418
|
def rest_type_object_key
|
411
|
-
|
419
|
+
if respond_to?("#{rest_type_key}_object_key", true)
|
420
|
+
send("#{rest_type_key}_object_key")
|
421
|
+
else
|
422
|
+
rest_type_name.camelcase.singularize
|
423
|
+
end
|
412
424
|
end
|
413
425
|
|
414
426
|
def rest_type_list_key
|
415
|
-
|
427
|
+
if respond_to?("#{rest_type_key}_list_key", true)
|
428
|
+
send("#{rest_type_key}_list_key")
|
429
|
+
else
|
430
|
+
rest_type_name.camelcase
|
431
|
+
end
|
416
432
|
end
|
417
433
|
|
418
434
|
def rest_type_column_definitions(options)
|
@@ -90,67 +90,4 @@ module Morpheus::Cli::StorageServersHelper
|
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
93
|
-
def get_available_storage_server_types(refresh=false)
|
94
|
-
if !@available_storage_server_types || refresh
|
95
|
-
@available_storage_server_types = storage_server_types_interface.list({max:1000})[storage_server_type_list_key]
|
96
|
-
end
|
97
|
-
return @available_storage_server_types
|
98
|
-
end
|
99
|
-
|
100
|
-
def storage_server_type_for_name_or_id(val)
|
101
|
-
if val.to_s =~ /\A\d{1,}\Z/
|
102
|
-
return storage_server_type_for_id(val)
|
103
|
-
else
|
104
|
-
return storage_server_type_for_name(val)
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
def storage_server_type_for_id(id)
|
109
|
-
return get_available_storage_server_types().find { |z| z['id'].to_i == id.to_i}
|
110
|
-
end
|
111
|
-
|
112
|
-
def storage_server_type_for_name(name)
|
113
|
-
return get_available_storage_server_types().find { |z| z['name'].downcase == name.downcase || z['code'].downcase == name.downcase}
|
114
|
-
end
|
115
|
-
|
116
|
-
def find_storage_server_type_by_name_or_id(val)
|
117
|
-
if val.to_s =~ /\A\d{1,}\Z/
|
118
|
-
return find_storage_server_type_by_id(val)
|
119
|
-
else
|
120
|
-
return find_storage_server_type_by_name(val)
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
def find_storage_server_type_by_id(id)
|
125
|
-
begin
|
126
|
-
json_response = storage_server_types_interface.get(id.to_i)
|
127
|
-
return json_response[storage_server_type_object_key]
|
128
|
-
rescue RestClient::Exception => e
|
129
|
-
if e.response && e.response.code == 404
|
130
|
-
print_red_alert "Storage Server Type not found by id #{id}"
|
131
|
-
return nil
|
132
|
-
else
|
133
|
-
raise e
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
def find_storage_server_type_by_name(name)
|
139
|
-
json_response = storage_server_types_interface.list({name: name.to_s})
|
140
|
-
storage_server_types = json_response[storage_server_type_list_key]
|
141
|
-
if storage_server_types.empty?
|
142
|
-
print_red_alert "Storage Server Type not found by name #{name}"
|
143
|
-
return storage_server_types
|
144
|
-
elsif storage_server_types.size > 1
|
145
|
-
print_red_alert "#{storage_server_types.size} storage server types found by name #{name}"
|
146
|
-
rows = storage_server_types.collect do |it|
|
147
|
-
{id: it['id'], name: it['name']}
|
148
|
-
end
|
149
|
-
puts as_pretty_table(rows, [:id, :name], {color:red})
|
150
|
-
return nil
|
151
|
-
else
|
152
|
-
return storage_server_types[0]
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
93
|
end
|
@@ -54,49 +54,6 @@ module Morpheus::Cli::StorageVolumesHelper
|
|
54
54
|
'Storage Volume Types'
|
55
55
|
end
|
56
56
|
|
57
|
-
def get_available_storage_volume_types(refresh=false)
|
58
|
-
if !@available_storage_volume_types || refresh
|
59
|
-
@available_storage_volume_types = storage_volume_types_interface.list({max:1000})[storage_volume_type_list_key]
|
60
|
-
end
|
61
|
-
return @available_storage_volume_types
|
62
|
-
end
|
63
|
-
|
64
|
-
def storage_volume_type_for_name_or_id(val)
|
65
|
-
if val.to_s =~ /\A\d{1,}\Z/
|
66
|
-
return storage_volume_type_for_id(val)
|
67
|
-
else
|
68
|
-
return storage_volume_type_for_name(val)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
def storage_volume_type_for_id(val)
|
73
|
-
record = get_available_storage_volume_types().find { |z| z['id'].to_i == val.to_i}
|
74
|
-
label = "Storage Volume Type"
|
75
|
-
if record.nil?
|
76
|
-
print_red_alert "#{label} not found by id #{val}"
|
77
|
-
return nil
|
78
|
-
end
|
79
|
-
return record
|
80
|
-
end
|
81
|
-
|
82
|
-
def storage_volume_type_for_name(val)
|
83
|
-
records = get_available_storage_volume_types().select { |z| z['name'].downcase == val.downcase || z['code'].downcase == val.downcase}
|
84
|
-
label = "Storage Volume Type"
|
85
|
-
if records.empty?
|
86
|
-
print_red_alert "#{label} not found by name '#{val}'"
|
87
|
-
return nil
|
88
|
-
elsif records.size > 1
|
89
|
-
print_red_alert "More than one #{label.downcase} found by name '#{val}'"
|
90
|
-
print_error "\n"
|
91
|
-
puts_error as_pretty_table(records, [:id, :name], {color:red})
|
92
|
-
print_red_alert "Try using ID instead"
|
93
|
-
print_error reset,"\n"
|
94
|
-
return nil
|
95
|
-
else
|
96
|
-
return records[0]
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
57
|
def format_storage_volume_status(record, return_color=cyan)
|
101
58
|
out = ""
|
102
59
|
status_string = record['status']
|
data/lib/morpheus/cli/version.rb
CHANGED
data/lib/morpheus/routes.rb
CHANGED
@@ -87,9 +87,19 @@ module Morpheus::Routes
|
|
87
87
|
:'data-stores' => {}, # ugh, should be datastores
|
88
88
|
servers: {}, # Storage Servers
|
89
89
|
},
|
90
|
-
|
91
|
-
|
92
|
-
|
90
|
+
trust: [
|
91
|
+
"#!credentials",
|
92
|
+
"#!certificates",
|
93
|
+
"#!keypairs",
|
94
|
+
"#!services",
|
95
|
+
],
|
96
|
+
boot: [
|
97
|
+
"#!mappings",
|
98
|
+
"#!boot-menus",
|
99
|
+
"#!answerfiles",
|
100
|
+
"#!boot-images",
|
101
|
+
"#!macs",
|
102
|
+
],
|
93
103
|
},
|
94
104
|
backups: {
|
95
105
|
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: morpheus-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.4.
|
4
|
+
version: 5.4.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Estes
|
8
8
|
- Bob Whiton
|
9
9
|
- Jeremy Michael Crosbie
|
10
10
|
- James Dickson
|
11
|
-
autorequire:
|
11
|
+
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2022-
|
14
|
+
date: 2022-03-10 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: bundler
|
@@ -200,6 +200,8 @@ files:
|
|
200
200
|
- lib/morpheus/api/clouds_interface.rb
|
201
201
|
- lib/morpheus/api/clusters_interface.rb
|
202
202
|
- lib/morpheus/api/containers_interface.rb
|
203
|
+
- lib/morpheus/api/credential_types_interface.rb
|
204
|
+
- lib/morpheus/api/credentials_interface.rb
|
203
205
|
- lib/morpheus/api/custom_instance_types_interface.rb
|
204
206
|
- lib/morpheus/api/cypher_interface.rb
|
205
207
|
- lib/morpheus/api/dashboard_interface.rb
|
@@ -356,6 +358,8 @@ files:
|
|
356
358
|
- lib/morpheus/cli/commands/clusters.rb
|
357
359
|
- lib/morpheus/cli/commands/coloring_command.rb
|
358
360
|
- lib/morpheus/cli/commands/containers_command.rb
|
361
|
+
- lib/morpheus/cli/commands/credential_types_command.rb
|
362
|
+
- lib/morpheus/cli/commands/credentials_command.rb
|
359
363
|
- lib/morpheus/cli/commands/curl_command.rb
|
360
364
|
- lib/morpheus/cli/commands/cypher_command.rb
|
361
365
|
- lib/morpheus/cli/commands/dashboard_command.rb
|
@@ -526,11 +530,11 @@ files:
|
|
526
530
|
- lib/morpheus/terminal.rb
|
527
531
|
- lib/morpheus/util.rb
|
528
532
|
- morpheus-cli.gemspec
|
529
|
-
homepage:
|
533
|
+
homepage:
|
530
534
|
licenses:
|
531
535
|
- MIT
|
532
536
|
metadata: {}
|
533
|
-
post_install_message:
|
537
|
+
post_install_message:
|
534
538
|
rdoc_options: []
|
535
539
|
require_paths:
|
536
540
|
- lib
|
@@ -545,9 +549,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
545
549
|
- !ruby/object:Gem::Version
|
546
550
|
version: '0'
|
547
551
|
requirements: []
|
548
|
-
rubyforge_project:
|
552
|
+
rubyforge_project:
|
549
553
|
rubygems_version: 2.7.6
|
550
|
-
signing_key:
|
554
|
+
signing_key:
|
551
555
|
specification_version: 4
|
552
556
|
summary: Provides CLI Interface to the Morpheus Public/Private Cloud Appliance
|
553
557
|
test_files: []
|