morpheus-cli 5.3.2.3 → 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 +75 -8
- data/lib/morpheus/api/audit_interface.rb +9 -0
- data/lib/morpheus/api/clouds_interface.rb +4 -11
- data/lib/morpheus/api/health_interface.rb +37 -3
- data/lib/morpheus/api/instances_interface.rb +39 -5
- data/lib/morpheus/api/load_balancer_monitors_interface.rb +9 -0
- data/lib/morpheus/api/load_balancer_profiles_interface.rb +9 -0
- data/lib/morpheus/api/load_balancer_virtual_servers_interface.rb +9 -0
- data/lib/morpheus/api/load_balancers_interface.rb +5 -0
- data/lib/morpheus/api/network_dhcp_relays_interface.rb +36 -0
- data/lib/morpheus/api/network_dhcp_servers_interface.rb +36 -0
- data/lib/morpheus/api/network_edge_clusters_interface.rb +26 -0
- data/lib/morpheus/api/network_routers_interface.rb +30 -0
- data/lib/morpheus/api/network_servers_interface.rb +98 -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 +5 -4
- data/lib/morpheus/api/roles_interface.rb +7 -0
- 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/api/virtual_images_interface.rb +23 -2
- data/lib/morpheus/api/virtual_servers_interface.rb +9 -0
- data/lib/morpheus/cli/cli_command.rb +274 -19
- data/lib/morpheus/cli/cli_registry.rb +56 -2
- data/lib/morpheus/cli/{access_token_command.rb → commands/access_token_command.rb} +1 -1
- data/lib/morpheus/cli/{account_groups_command.rb → commands/account_groups_command.rb} +0 -8
- data/lib/morpheus/cli/{activity_command.rb → commands/activity_command.rb} +0 -0
- data/lib/morpheus/cli/commands/{standard/alias_command.rb → alias_command.rb} +1 -4
- data/lib/morpheus/cli/{appliance_settings_command.rb → commands/appliance_settings_command.rb} +0 -0
- data/lib/morpheus/cli/{approvals_command.rb → commands/approvals_command.rb} +0 -0
- data/lib/morpheus/cli/{apps.rb → commands/apps.rb} +17 -89
- data/lib/morpheus/cli/{archives_command.rb → commands/archives_command.rb} +0 -6
- data/lib/morpheus/cli/commands/audit.rb +188 -0
- data/lib/morpheus/cli/{backup_jobs_command.rb → commands/backup_jobs_command.rb} +0 -0
- data/lib/morpheus/cli/{backup_settings_command.rb → commands/backup_settings_command.rb} +0 -0
- data/lib/morpheus/cli/{backups_command.rb → commands/backups_command.rb} +0 -0
- data/lib/morpheus/cli/commands/{standard/benchmark_command.rb → benchmark_command.rb} +0 -3
- data/lib/morpheus/cli/{blueprints_command.rb → commands/blueprints_command.rb} +1 -1
- data/lib/morpheus/cli/{boot_scripts_command.rb → commands/boot_scripts_command.rb} +0 -3
- data/lib/morpheus/cli/{budgets_command.rb → commands/budgets_command.rb} +0 -0
- data/lib/morpheus/cli/commands/{standard/cat_command.rb → cat_command.rb} +0 -0
- data/lib/morpheus/cli/{catalog_item_types_command.rb → commands/catalog_item_types_command.rb} +0 -0
- data/lib/morpheus/cli/{certificates_command.rb → commands/certificates_command.rb} +0 -0
- data/lib/morpheus/cli/commands/change_password_command.rb +132 -0
- data/lib/morpheus/cli/{cloud_datastores_command.rb → commands/cloud_datastores_command.rb} +0 -4
- data/lib/morpheus/cli/{cloud_folders_command.rb → commands/cloud_folders_command.rb} +0 -4
- data/lib/morpheus/cli/{cloud_resource_pools_command.rb → commands/cloud_resource_pools_command.rb} +170 -138
- data/lib/morpheus/cli/{clouds.rb → commands/clouds.rb} +22 -47
- data/lib/morpheus/cli/{clusters.rb → commands/clusters.rb} +86 -49
- data/lib/morpheus/cli/commands/{standard/coloring_command.rb → coloring_command.rb} +0 -2
- data/lib/morpheus/cli/{containers_command.rb → commands/containers_command.rb} +0 -7
- data/lib/morpheus/cli/commands/{standard/curl_command.rb → curl_command.rb} +0 -3
- data/lib/morpheus/cli/{cypher_command.rb → commands/cypher_command.rb} +0 -1
- data/lib/morpheus/cli/{dashboard_command.rb → commands/dashboard_command.rb} +0 -2
- data/lib/morpheus/cli/commands/{standard/debug_command.rb → debug_command.rb} +0 -1
- data/lib/morpheus/cli/{deploy.rb → commands/deploy.rb} +0 -1
- data/lib/morpheus/cli/{deployments.rb → commands/deployments.rb} +0 -0
- data/lib/morpheus/cli/{deploys.rb → commands/deploys.rb} +0 -1
- data/lib/morpheus/cli/{doc.rb → commands/doc.rb} +1 -1
- data/lib/morpheus/cli/commands/{standard/echo_command.rb → echo_command.rb} +0 -2
- data/lib/morpheus/cli/commands/{standard/edit_profile_command.rb → edit_profile_command.rb} +15 -4
- data/lib/morpheus/cli/commands/{standard/edit_rc_command.rb → edit_rc_command.rb} +19 -3
- data/lib/morpheus/cli/{environments_command.rb → commands/environments_command.rb} +0 -5
- data/lib/morpheus/cli/{execute_schedules_command.rb → commands/execute_schedules_command.rb} +0 -0
- data/lib/morpheus/cli/{execution_request_command.rb → commands/execution_request_command.rb} +0 -2
- data/lib/morpheus/cli/commands/{standard/exit_command.rb → exit_command.rb} +0 -2
- data/lib/morpheus/cli/{file_copy_request_command.rb → commands/file_copy_request_command.rb} +0 -4
- data/lib/morpheus/cli/{forgot_password.rb → commands/forgot_password.rb} +0 -0
- data/lib/morpheus/cli/commands/{standard/get_prompt_command.rb → get_prompt_command.rb} +0 -3
- data/lib/morpheus/cli/{groups.rb → commands/groups.rb} +0 -7
- data/lib/morpheus/cli/{guidance_command.rb → commands/guidance_command.rb} +1 -1
- data/lib/morpheus/cli/{health_command.rb → commands/health_command.rb} +104 -19
- data/lib/morpheus/cli/commands/{standard/history_command.rb → history_command.rb} +0 -3
- data/lib/morpheus/cli/{hosts.rb → commands/hosts.rb} +15 -25
- data/lib/morpheus/cli/{image_builder_command.rb → commands/image_builder_command.rb} +2 -8
- data/lib/morpheus/cli/{instance_types.rb → commands/instance_types.rb} +0 -3
- data/lib/morpheus/cli/{instances.rb → commands/instances.rb} +473 -150
- data/lib/morpheus/cli/{integrations_command.rb → commands/integrations_command.rb} +0 -0
- data/lib/morpheus/cli/{invoices_command.rb → commands/invoices_command.rb} +118 -134
- data/lib/morpheus/cli/{jobs_command.rb → commands/jobs_command.rb} +0 -0
- data/lib/morpheus/cli/{key_pairs.rb → commands/key_pairs.rb} +0 -6
- data/lib/morpheus/cli/{library_cluster_layouts_command.rb → commands/library_cluster_layouts_command.rb} +20 -4
- data/lib/morpheus/cli/{library_container_scripts_command.rb → commands/library_container_scripts_command.rb} +0 -0
- data/lib/morpheus/cli/{library_container_templates_command.rb → commands/library_container_templates_command.rb} +0 -1
- data/lib/morpheus/cli/{library_container_types_command.rb → commands/library_container_types_command.rb} +0 -4
- data/lib/morpheus/cli/{library_instance_types_command.rb → commands/library_instance_types_command.rb} +0 -4
- data/lib/morpheus/cli/{library_layouts_command.rb → commands/library_layouts_command.rb} +0 -4
- data/lib/morpheus/cli/{library_option_lists_command.rb → commands/library_option_lists_command.rb} +3 -7
- data/lib/morpheus/cli/{library_option_types_command.rb → commands/library_option_types_command.rb} +0 -4
- data/lib/morpheus/cli/{library_spec_templates_command.rb → commands/library_spec_templates_command.rb} +0 -1
- data/lib/morpheus/cli/{library_upgrades_command.rb → commands/library_upgrades_command.rb} +0 -4
- data/lib/morpheus/cli/{license.rb → commands/license.rb} +0 -3
- data/lib/morpheus/cli/commands/load_balancer_monitors.rb +71 -0
- data/lib/morpheus/cli/commands/load_balancer_pools.rb +91 -0
- data/lib/morpheus/cli/commands/load_balancer_profiles.rb +65 -0
- data/lib/morpheus/cli/{load_balancer_types.rb → commands/load_balancer_types.rb} +9 -8
- data/lib/morpheus/cli/commands/load_balancer_virtual_servers.rb +156 -0
- data/lib/morpheus/cli/commands/load_balancers.rb +176 -0
- data/lib/morpheus/cli/commands/{standard/log_level_command.rb → log_level_command.rb} +0 -3
- data/lib/morpheus/cli/{log_settings_command.rb → commands/log_settings_command.rb} +0 -0
- data/lib/morpheus/cli/{login.rb → commands/login.rb} +0 -5
- data/lib/morpheus/cli/commands/logout.rb +63 -0
- data/lib/morpheus/cli/{logs_command.rb → commands/logs_command.rb} +0 -3
- data/lib/morpheus/cli/commands/{standard/man_command.rb → man_command.rb} +0 -2
- data/lib/morpheus/cli/{monitoring_alerts_command.rb → commands/monitoring_alerts_command.rb} +0 -7
- data/lib/morpheus/cli/{monitoring_apps_command.rb → commands/monitoring_apps_command.rb} +0 -1
- data/lib/morpheus/cli/{monitoring_checks_command.rb → commands/monitoring_checks_command.rb} +2 -1
- data/lib/morpheus/cli/{monitoring_contacts_command.rb → commands/monitoring_contacts_command.rb} +0 -7
- data/lib/morpheus/cli/{monitoring_groups_command.rb → commands/monitoring_groups_command.rb} +0 -1
- data/lib/morpheus/cli/{monitoring_incidents_command.rb → commands/monitoring_incidents_command.rb} +0 -1
- data/lib/morpheus/cli/commands/network_dhcp_relays_command.rb +416 -0
- data/lib/morpheus/cli/commands/network_dhcp_servers_command.rb +407 -0
- data/lib/morpheus/cli/{network_domains_command.rb → commands/network_domains_command.rb} +0 -4
- data/lib/morpheus/cli/commands/network_edge_clusters_command.rb +329 -0
- data/lib/morpheus/cli/commands/network_firewalls_command.rb +823 -0
- data/lib/morpheus/cli/{network_groups_command.rb → commands/network_groups_command.rb} +0 -4
- data/lib/morpheus/cli/{network_pool_servers_command.rb → commands/network_pool_servers_command.rb} +0 -4
- data/lib/morpheus/cli/{network_pools_command.rb → commands/network_pools_command.rb} +0 -4
- data/lib/morpheus/cli/{network_proxies_command.rb → commands/network_proxies_command.rb} +0 -4
- data/lib/morpheus/cli/{network_routers_command.rb → commands/network_routers_command.rb} +387 -57
- data/lib/morpheus/cli/{network_services_command.rb → commands/network_services_command.rb} +0 -4
- data/lib/morpheus/cli/commands/network_static_routes_command.rb +446 -0
- data/lib/morpheus/cli/commands/network_transport_zones_command.rb +452 -0
- data/lib/morpheus/cli/{networks_command.rb → commands/networks_command.rb} +21 -21
- data/lib/morpheus/cli/commands/open_command.rb +30 -0
- data/lib/morpheus/cli/commands/options.rb +98 -0
- data/lib/morpheus/cli/{packages_command.rb → commands/packages_command.rb} +0 -2
- data/lib/morpheus/cli/{ping.rb → commands/ping.rb} +0 -7
- data/lib/morpheus/cli/{policies_command.rb → commands/policies_command.rb} +1 -8
- data/lib/morpheus/cli/{power_schedules_command.rb → commands/power_schedules_command.rb} +0 -0
- data/lib/morpheus/cli/{preseed_scripts_command.rb → commands/preseed_scripts_command.rb} +0 -3
- data/lib/morpheus/cli/{price_sets_command.rb → commands/price_sets_command.rb} +0 -0
- data/lib/morpheus/cli/{prices_command.rb → commands/prices_command.rb} +7 -7
- data/lib/morpheus/cli/{processes_command.rb → commands/processes_command.rb} +0 -1
- data/lib/morpheus/cli/{projects_command.rb → commands/projects_command.rb} +0 -0
- data/lib/morpheus/cli/{provisioning_licenses_command.rb → commands/provisioning_licenses_command.rb} +0 -0
- data/lib/morpheus/cli/{provisioning_settings_command.rb → commands/provisioning_settings_command.rb} +0 -0
- data/lib/morpheus/cli/{recent_activity_command.rb → commands/recent_activity_command.rb} +0 -0
- data/lib/morpheus/cli/{remote.rb → commands/remote.rb} +5 -9
- data/lib/morpheus/cli/{reports_command.rb → commands/reports_command.rb} +0 -2
- data/lib/morpheus/cli/commands/{standard/rm_command.rb → rm_command.rb} +0 -0
- data/lib/morpheus/cli/{roles.rb → commands/roles.rb} +245 -40
- data/lib/morpheus/cli/{search_command.rb → commands/search_command.rb} +0 -0
- data/lib/morpheus/cli/{security_group_rules.rb → commands/security_group_rules.rb} +0 -5
- data/lib/morpheus/cli/{security_groups.rb → commands/security_groups.rb} +0 -6
- data/lib/morpheus/cli/{service_catalog_command.rb → commands/service_catalog_command.rb} +0 -0
- data/lib/morpheus/cli/{service_plans_command.rb → commands/service_plans_command.rb} +0 -0
- data/lib/morpheus/cli/commands/{standard/set_prompt_command.rb → set_prompt_command.rb} +0 -3
- data/lib/morpheus/cli/{setup.rb → commands/setup.rb} +0 -0
- data/lib/morpheus/cli/{shell.rb → commands/shell.rb} +4 -105
- data/lib/morpheus/cli/commands/{standard/sleep_command.rb → sleep_command.rb} +0 -2
- data/lib/morpheus/cli/commands/{standard/source_command.rb → source_command.rb} +0 -2
- data/lib/morpheus/cli/commands/{standard/ssl_verification_command.rb → ssl_verification_command.rb} +0 -3
- data/lib/morpheus/cli/{storage_providers_command.rb → commands/storage_providers_command.rb} +0 -4
- 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/{subnets_command.rb → commands/subnets_command.rb} +7 -6
- data/lib/morpheus/cli/{tasks.rb → commands/tasks.rb} +25 -6
- data/lib/morpheus/cli/commands/{standard/tee_command.rb → tee_command.rb} +0 -0
- data/lib/morpheus/cli/{tenants_command.rb → commands/tenants_command.rb} +1 -8
- data/lib/morpheus/cli/commands/{standard/update_command.rb → update_command.rb} +0 -1
- data/lib/morpheus/cli/{usage_command.rb → commands/usage_command.rb} +0 -0
- data/lib/morpheus/cli/{user_groups_command.rb → commands/user_groups_command.rb} +1 -2
- data/lib/morpheus/cli/{user_settings_command.rb → commands/user_settings_command.rb} +2 -1
- data/lib/morpheus/cli/{user_sources_command.rb → commands/user_sources_command.rb} +1 -2
- data/lib/morpheus/cli/{users.rb → commands/users.rb} +28 -35
- data/lib/morpheus/cli/{vdi_allocations_command.rb → commands/vdi_allocations_command.rb} +0 -0
- data/lib/morpheus/cli/{vdi_apps_command.rb → commands/vdi_apps_command.rb} +0 -0
- data/lib/morpheus/cli/{vdi_command.rb → commands/vdi_command.rb} +0 -0
- data/lib/morpheus/cli/{vdi_gateways_command.rb → commands/vdi_gateways_command.rb} +0 -0
- data/lib/morpheus/cli/{vdi_pools_command.rb → commands/vdi_pools_command.rb} +4 -1
- data/lib/morpheus/cli/commands/{standard/version_command.rb → version_command.rb} +0 -0
- data/lib/morpheus/cli/commands/view.rb +102 -0
- data/lib/morpheus/cli/{virtual_images.rb → commands/virtual_images.rb} +251 -33
- data/lib/morpheus/cli/{whitelabel_settings_command.rb → commands/whitelabel_settings_command.rb} +0 -1
- data/lib/morpheus/cli/{whoami.rb → commands/whoami.rb} +0 -4
- data/lib/morpheus/cli/{wiki_command.rb → commands/wiki_command.rb} +0 -5
- data/lib/morpheus/cli/{workflows.rb → commands/workflows.rb} +0 -3
- data/lib/morpheus/cli/mixins/accounts_helper.rb +5 -5
- data/lib/morpheus/cli/mixins/load_balancers_helper.rb +26 -6
- data/lib/morpheus/cli/mixins/logs_helper.rb +1 -1
- data/lib/morpheus/cli/mixins/print_helper.rb +51 -18
- data/lib/morpheus/cli/mixins/processes_helper.rb +1 -2
- data/lib/morpheus/cli/mixins/provisioning_helper.rb +167 -110
- data/lib/morpheus/cli/mixins/rest_command.rb +268 -94
- data/lib/morpheus/cli/mixins/secondary_rest_command.rb +668 -0
- 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_parser.rb +25 -17
- data/lib/morpheus/cli/option_types.rb +137 -52
- data/lib/morpheus/cli/version.rb +1 -1
- data/lib/morpheus/cli.rb +6 -128
- data/lib/morpheus/ext/string.rb +29 -6
- data/lib/morpheus/routes.rb +238 -0
- data/lib/morpheus/terminal.rb +5 -6
- data/lib/morpheus/util.rb +6 -1
- data/morpheus-cli.gemspec +1 -1
- metadata +183 -149
- data/lib/morpheus/cli/change_password_command.rb +0 -147
- data/lib/morpheus/cli/library.rb +0 -1
- data/lib/morpheus/cli/load_balancers.rb +0 -245
- data/lib/morpheus/cli/logout.rb +0 -81
data/lib/morpheus/cli/{cloud_resource_pools_command.rb → commands/cloud_resource_pools_command.rb}
RENAMED
@@ -1,12 +1,9 @@
|
|
1
|
-
require 'rest_client'
|
2
|
-
require 'optparse'
|
3
|
-
require 'filesize'
|
4
1
|
require 'morpheus/cli/cli_command'
|
5
|
-
require 'morpheus/cli/mixins/infrastructure_helper'
|
6
2
|
|
7
3
|
class Morpheus::Cli::CloudResourcePoolsCommand
|
8
4
|
include Morpheus::Cli::CliCommand
|
9
5
|
include Morpheus::Cli::InfrastructureHelper
|
6
|
+
include Morpheus::Cli::OptionSourceHelper
|
10
7
|
|
11
8
|
#set_command_name :'cloud-resource-pools'
|
12
9
|
set_command_name :'resource-pools'
|
@@ -191,6 +188,12 @@ class Morpheus::Cli::CloudResourcePoolsCommand
|
|
191
188
|
"Status" => lambda {|it| it['status'].to_s.capitalize },
|
192
189
|
"Tenants" => lambda {|it| it['tenants'] ? it['tenants'].collect {|it| it['name'] }.uniq.join(', ') : '' }
|
193
190
|
}
|
191
|
+
|
192
|
+
if cloud['zoneType']['code'] == 'openstack'
|
193
|
+
role = resource_pool['config']['roleId'] ? load_option_source_data('openstackRoles', {zoneId: cloud['id']}).find {|it| it['value'] == resource_pool['config']['roleId']} : nil
|
194
|
+
description_cols['Role'] = lambda {|it| role ? role['name'] : ''}
|
195
|
+
end
|
196
|
+
|
194
197
|
print_description_list(description_cols, resource_pool)
|
195
198
|
|
196
199
|
if resource_pool['resourcePermission'].nil?
|
@@ -329,8 +332,14 @@ class Morpheus::Cli::CloudResourcePoolsCommand
|
|
329
332
|
opts.on('--default-pool [on|off]', String, "Set resource pool as the default") do |val|
|
330
333
|
options['defaultPool'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
|
331
334
|
end
|
332
|
-
|
333
|
-
|
335
|
+
opts.on("--description [TEXT]", String, "Description") do |val|
|
336
|
+
options['description'] = val.to_s
|
337
|
+
end
|
338
|
+
opts.on( '--role ROLE', String, "Role Name or ID (applicable to select resource pools)" ) do |val|
|
339
|
+
options[:role] = val
|
340
|
+
end
|
341
|
+
build_standard_add_options(opts, options)
|
342
|
+
opts.footer = "Add a resource pool." + "\n" +
|
334
343
|
"[cloud] is required. This is the name or id of the cloud."
|
335
344
|
end
|
336
345
|
optparse.parse!(args)
|
@@ -349,151 +358,156 @@ class Morpheus::Cli::CloudResourcePoolsCommand
|
|
349
358
|
|
350
359
|
connect(options)
|
351
360
|
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
return 1 if cloud.nil?
|
360
|
-
|
361
|
-
# merge -O options into normally parsed options
|
362
|
-
options.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
|
361
|
+
# load cloud
|
362
|
+
if cloud_id.nil?
|
363
|
+
puts_error "#{Morpheus::Terminal.angry_prompt}missing required option: [cloud]\n#{optparse}"
|
364
|
+
return 1
|
365
|
+
end
|
366
|
+
cloud = find_cloud_by_name_or_id(cloud_id)
|
367
|
+
return 1 if cloud.nil?
|
363
368
|
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
369
|
+
# merge -O options into normally parsed options
|
370
|
+
options.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
|
371
|
+
|
372
|
+
# construct payload
|
373
|
+
payload = nil
|
374
|
+
if options[:payload]
|
375
|
+
payload = options[:payload]
|
376
|
+
else
|
377
|
+
# prompt for resource pool options
|
378
|
+
payload = {
|
379
|
+
'resourcePool' => {
|
373
380
|
}
|
374
|
-
|
375
|
-
# allow arbitrary -O options
|
376
|
-
payload['resourcePool'].deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
|
381
|
+
}
|
377
382
|
|
383
|
+
# allow arbitrary -O options
|
384
|
+
payload['resourcePool'].deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
|
378
385
|
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
+
# Name
|
387
|
+
if options['name']
|
388
|
+
payload['resourcePool']['name'] = options['name']
|
389
|
+
else
|
390
|
+
v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'description' => 'Name'}], options)
|
391
|
+
payload['resourcePool']['name'] = v_prompt['name']
|
392
|
+
end
|
386
393
|
|
387
|
-
|
388
|
-
|
394
|
+
# Group Access
|
395
|
+
if group_access_all != nil
|
396
|
+
payload['resourcePermissions'] ||= {}
|
397
|
+
payload['resourcePermissions']['all'] = group_access_all
|
398
|
+
else
|
399
|
+
# default to all
|
400
|
+
if payload['resourcePermissions'].nil? || payload['resourcePermissions']['all'].nil?
|
389
401
|
payload['resourcePermissions'] ||= {}
|
390
|
-
payload['resourcePermissions']['all'] =
|
391
|
-
else
|
392
|
-
# default to all
|
393
|
-
if payload['resourcePermissions'].nil? || payload['resourcePermissions']['all'].nil?
|
394
|
-
payload['resourcePermissions'] ||= {}
|
395
|
-
payload['resourcePermissions']['all'] = true
|
396
|
-
end
|
402
|
+
payload['resourcePermissions']['all'] = true
|
397
403
|
end
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
site
|
404
|
+
end
|
405
|
+
if group_access_list != nil
|
406
|
+
payload['resourcePermissions'] ||= {}
|
407
|
+
payload['resourcePermissions']['sites'] = group_access_list.collect do |site_id|
|
408
|
+
site = {"id" => site_id.to_i}
|
409
|
+
if group_defaults_list && group_defaults_list.include?(site_id)
|
410
|
+
site["default"] = true
|
406
411
|
end
|
412
|
+
site
|
407
413
|
end
|
414
|
+
end
|
408
415
|
|
409
|
-
|
410
|
-
|
416
|
+
# Service Plan Access
|
417
|
+
if plan_access_all != nil
|
418
|
+
payload['resourcePermissions'] ||= {}
|
419
|
+
payload['resourcePermissions']['allPlans'] = plan_access_all
|
420
|
+
else
|
421
|
+
# default to all
|
422
|
+
if payload['resourcePermissions'].nil? || payload['resourcePermissions']['allPlans'].nil?
|
411
423
|
payload['resourcePermissions'] ||= {}
|
412
|
-
payload['resourcePermissions']['allPlans'] =
|
413
|
-
else
|
414
|
-
# default to all
|
415
|
-
if payload['resourcePermissions'].nil? || payload['resourcePermissions']['allPlans'].nil?
|
416
|
-
payload['resourcePermissions'] ||= {}
|
417
|
-
payload['resourcePermissions']['allPlans'] = true
|
418
|
-
end
|
424
|
+
payload['resourcePermissions']['allPlans'] = true
|
419
425
|
end
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
site
|
426
|
+
end
|
427
|
+
if plan_access_list != nil
|
428
|
+
payload['resourcePermissions'] ||= {}
|
429
|
+
payload['resourcePermissions']['plans'] = plan_access_list.collect do |site_id|
|
430
|
+
site = {"id" => site_id.to_i}
|
431
|
+
if plan_defaults_list && plan_defaults_list.include?(site_id)
|
432
|
+
site["default"] = true
|
428
433
|
end
|
434
|
+
site
|
429
435
|
end
|
436
|
+
end
|
430
437
|
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
# Active
|
438
|
-
if options['active'] != nil
|
439
|
-
payload['resourcePool']['active'] = options['active']
|
440
|
-
else
|
441
|
-
payload['resourcePool']['active'] = true
|
442
|
-
end
|
438
|
+
# Tenants
|
439
|
+
if options['tenants']
|
440
|
+
payload['tenantPermissions'] = {}
|
441
|
+
payload['tenantPermissions']['accounts'] = options['tenants']
|
442
|
+
end
|
443
443
|
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
if options['visibility'] != nil
|
451
|
-
payload['resourcePool']['visibility'] = options['visibility']
|
452
|
-
else
|
453
|
-
payload['resourcePool']['visibility'] = 'private'
|
454
|
-
end
|
455
|
-
|
456
|
-
|
457
|
-
# Config options depend on type (until api returns these as optionTypes)
|
458
|
-
zone_type = cloud['zoneType'] ? cloud['zoneType']['code'] : ''
|
459
|
-
if zone_type == 'amazon'
|
460
|
-
payload['resourcePool']['config'] ||= {}
|
461
|
-
# CIDR
|
462
|
-
v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldContext' => 'config', 'fieldName' => 'cidrBlock', 'fieldLabel' => 'CIDR', 'type' => 'text', 'required' => true, 'description' => 'Provide the base CIDR Block to use for this VPC (must be between a /16 and /28 Block)'}], options)
|
463
|
-
payload['resourcePool']['config']['cidrBlock'] = v_prompt['config']['cidrBlock']
|
464
|
-
# Tenancy
|
465
|
-
v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldContext' => 'config', 'fieldName' => 'tenancy', 'fieldLabel' => 'Tenancy', 'type' => 'select', 'selectOptions' => [{'name' => 'Default', 'value' => 'default'}, {'name' => 'Dedicated', 'value' => 'dedicated'}], 'defaultValue' => 'default'}], options)
|
466
|
-
payload['resourcePool']['config']['tenancy'] = v_prompt['config']['tenancy']
|
467
|
-
|
468
|
-
elsif zone_type == 'azure'
|
469
|
-
# no options
|
470
|
-
elsif zone_type == 'cloudFoundry' || zone_type == 'bluemixCloudFoundry'
|
471
|
-
|
472
|
-
elsif zone_type == 'standard'
|
473
|
-
# no options
|
474
|
-
else
|
475
|
-
#raise_command_error "Cloud type '#{zone_type}' does not allow creating resource pools"
|
476
|
-
end
|
444
|
+
# Active
|
445
|
+
if options['active'] != nil
|
446
|
+
payload['resourcePool']['active'] = options['active']
|
447
|
+
else
|
448
|
+
payload['resourcePool']['active'] = true
|
449
|
+
end
|
477
450
|
|
451
|
+
# Default
|
452
|
+
if options['defaultPool'] != nil
|
453
|
+
payload['resourcePool']['defaultPool'] = options['defaultPool']
|
478
454
|
end
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
455
|
+
|
456
|
+
# Visibility
|
457
|
+
if options['visibility'] != nil
|
458
|
+
payload['resourcePool']['visibility'] = options['visibility']
|
459
|
+
else
|
460
|
+
payload['resourcePool']['visibility'] = 'private'
|
483
461
|
end
|
484
|
-
|
485
|
-
|
486
|
-
|
462
|
+
|
463
|
+
|
464
|
+
# Config options depend on type (until api returns these as optionTypes)
|
465
|
+
zone_type = cloud['zoneType'] ? cloud['zoneType']['code'] : ''
|
466
|
+
if zone_type == 'amazon'
|
467
|
+
payload['resourcePool']['config'] ||= {}
|
468
|
+
# CIDR
|
469
|
+
v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldContext' => 'config', 'fieldName' => 'cidrBlock', 'fieldLabel' => 'CIDR', 'type' => 'text', 'required' => true, 'description' => 'Provide the base CIDR Block to use for this VPC (must be between a /16 and /28 Block)'}], options)
|
470
|
+
payload['resourcePool']['config']['cidrBlock'] = v_prompt['config']['cidrBlock']
|
471
|
+
# Tenancy
|
472
|
+
v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldContext' => 'config', 'fieldName' => 'tenancy', 'fieldLabel' => 'Tenancy', 'type' => 'select', 'selectOptions' => [{'name' => 'Default', 'value' => 'default'}, {'name' => 'Dedicated', 'value' => 'dedicated'}], 'defaultValue' => 'default'}], options)
|
473
|
+
payload['resourcePool']['config']['tenancy'] = v_prompt['config']['tenancy']
|
474
|
+
|
475
|
+
elsif zone_type == 'azure'
|
476
|
+
# no options
|
477
|
+
elsif zone_type == 'cloudFoundry' || zone_type == 'bluemixCloudFoundry'
|
478
|
+
|
479
|
+
elsif zone_type == 'openstack'
|
480
|
+
payload['resourcePool']['config'] ||= {}
|
481
|
+
# Description
|
482
|
+
v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text'}], options)
|
483
|
+
payload['resourcePool']['description'] = v_prompt['description']
|
484
|
+
# Role
|
485
|
+
role_options = load_option_source_data('openstackRoles', {zoneId: cloud['id']})
|
486
|
+
if role = options[:role] ? role_options.find {|it| [it['name'], it['value']].include?(options[:role])} : nil
|
487
|
+
payload['resourcePool']['config']['roleId'] = role['value']
|
488
|
+
else
|
489
|
+
v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldContext' => 'config', 'fieldName' => 'roleId', 'fieldLabel' => 'Role', 'type' => 'select', 'selectOptions' => role_options, 'required' => true}], options, @api_client,{zoneId: cloud['id']})
|
490
|
+
payload['resourcePool']['config']['roleId'] = v_prompt['config']['roleId']
|
491
|
+
end
|
492
|
+
elsif zone_type == 'standard'
|
493
|
+
# no options
|
487
494
|
else
|
488
|
-
|
489
|
-
print_green_success "Created resource pool #{resource_pool['name']}"
|
490
|
-
get([cloud['id'].to_s, resource_pool['id'].to_s])
|
495
|
+
#raise_command_error "Cloud type '#{zone_type}' does not allow creating resource pools"
|
491
496
|
end
|
492
|
-
return 0
|
493
|
-
rescue RestClient::Exception => e
|
494
|
-
print_rest_exception(e, options)
|
495
|
-
return 1
|
496
497
|
end
|
498
|
+
|
499
|
+
@cloud_resource_pools_interface.setopts(options)
|
500
|
+
if options[:dry_run]
|
501
|
+
print_dry_run @cloud_resource_pools_interface.dry.create(cloud['id'], payload)
|
502
|
+
return
|
503
|
+
end
|
504
|
+
json_response = @cloud_resource_pools_interface.create(cloud['id'], payload)
|
505
|
+
render_response(json_response, options, 'resourcePool') do
|
506
|
+
resource_pool = json_response['resourcePool']
|
507
|
+
print_green_success "Created resource pool #{resource_pool['name']}"
|
508
|
+
get([cloud['id'].to_s, resource_pool['id'].to_s])
|
509
|
+
end
|
510
|
+
return 0, nil
|
497
511
|
end
|
498
512
|
|
499
513
|
def update(args)
|
@@ -563,6 +577,12 @@ class Morpheus::Cli::CloudResourcePoolsCommand
|
|
563
577
|
opts.on('--default-pool [on|off]', String, "Set resource pool as the default") do |val|
|
564
578
|
options['defaultPool'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
|
565
579
|
end
|
580
|
+
opts.on("--description [TEXT]", String, "Description") do |val|
|
581
|
+
options['description'] = val.to_s
|
582
|
+
end
|
583
|
+
opts.on( '--role ROLE', String, "Role Name or ID (applicable to select resource pools)" ) do |val|
|
584
|
+
options['role'] = val
|
585
|
+
end
|
566
586
|
build_common_options(opts, options, [:options, :payload, :json, :dry_run, :remote])
|
567
587
|
opts.footer = "Update a resource pool." + "\n" +
|
568
588
|
"[cloud] is required. This is the name or id of the cloud." + "\n"
|
@@ -591,7 +611,7 @@ class Morpheus::Cli::CloudResourcePoolsCommand
|
|
591
611
|
|
592
612
|
resource_pool = find_resource_pool_by_name_or_id(cloud['id'], resource_pool_id)
|
593
613
|
return 1 if resource_pool.nil?
|
594
|
-
|
614
|
+
|
595
615
|
# merge -O options into normally parsed options
|
596
616
|
options.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
|
597
617
|
|
@@ -605,11 +625,11 @@ class Morpheus::Cli::CloudResourcePoolsCommand
|
|
605
625
|
'resourcePool' => {
|
606
626
|
}
|
607
627
|
}
|
608
|
-
|
628
|
+
|
609
629
|
# allow arbitrary -O options
|
610
630
|
payload['resourcePool'].deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
|
611
631
|
|
612
|
-
|
632
|
+
|
613
633
|
# Group Access
|
614
634
|
if group_access_all != nil
|
615
635
|
payload['resourcePermissions'] ||= {}
|
@@ -657,12 +677,26 @@ class Morpheus::Cli::CloudResourcePoolsCommand
|
|
657
677
|
if options['defaultPool'] != nil
|
658
678
|
payload['resourcePool']['defaultPool'] = options['defaultPool']
|
659
679
|
end
|
660
|
-
|
680
|
+
|
661
681
|
# Visibility
|
662
682
|
if options['visibility'] != nil
|
663
683
|
payload['resourcePool']['visibility'] = options['visibility']
|
664
684
|
end
|
665
685
|
|
686
|
+
# Description
|
687
|
+
if options['description'] != nil
|
688
|
+
payload['resourcePool']['description'] = options['description']
|
689
|
+
end
|
690
|
+
|
691
|
+
# Role
|
692
|
+
if options['role'] != nil
|
693
|
+
role_options = load_option_source_data('openstackRoles', {zoneId: cloud['id']})
|
694
|
+
if role = role_options.find {|it| [it['name'], it['value']].include?(options['role'])}
|
695
|
+
payload['resourcePool']['config'] ||= {}
|
696
|
+
payload['resourcePool']['config']['roleId'] = role['value']
|
697
|
+
end
|
698
|
+
end
|
699
|
+
|
666
700
|
if payload['resourcePool'].empty? && payload['resourcePermissions'].nil? && payload['tenantPermissions'].nil?
|
667
701
|
raise_command_error "Specify at least one option to update.\n#{optparse}"
|
668
702
|
end
|
@@ -674,14 +708,12 @@ class Morpheus::Cli::CloudResourcePoolsCommand
|
|
674
708
|
return
|
675
709
|
end
|
676
710
|
json_response = @cloud_resource_pools_interface.update(cloud['id'], resource_pool["id"], payload)
|
677
|
-
|
678
|
-
puts as_json(json_response)
|
679
|
-
else
|
711
|
+
render_response(json_response, options, 'resourcePool') do
|
680
712
|
resource_pool = json_response['resourcePool']
|
681
713
|
print_green_success "Updated resource pool #{resource_pool['name']}"
|
682
714
|
get([cloud['id'].to_s, resource_pool['id'].to_s])
|
683
715
|
end
|
684
|
-
return 0
|
716
|
+
return 0, nil
|
685
717
|
rescue RestClient::Exception => e
|
686
718
|
print_rest_exception(e, options)
|
687
719
|
return 1
|
@@ -783,7 +815,7 @@ class Morpheus::Cli::CloudResourcePoolsCommand
|
|
783
815
|
print_red_alert "Resource Pool not found by name #{name}"
|
784
816
|
return nil
|
785
817
|
elsif resource_pools.size > 1
|
786
|
-
matching_resource_pools =
|
818
|
+
matching_resource_pools = resource_pools.select { |it| name && (it['name'] == name || it['externalId'] == name) }
|
787
819
|
if matching_resource_pools.size == 1
|
788
820
|
return matching_resource_pools[0]
|
789
821
|
end
|
@@ -1,11 +1,4 @@
|
|
1
|
-
# require 'yaml'
|
2
|
-
require 'io/console'
|
3
|
-
require 'rest_client'
|
4
|
-
require 'optparse'
|
5
1
|
require 'morpheus/cli/cli_command'
|
6
|
-
require 'morpheus/cli/mixins/infrastructure_helper'
|
7
|
-
require 'morpheus/cli/mixins/provisioning_helper'
|
8
|
-
require 'morpheus/cli/option_types'
|
9
2
|
|
10
3
|
class Morpheus::Cli::Clouds
|
11
4
|
include Morpheus::Cli::CliCommand
|
@@ -27,8 +20,6 @@ class Morpheus::Cli::Clouds
|
|
27
20
|
@clouds_interface = @api_client.clouds
|
28
21
|
@groups_interface = @api_client.groups
|
29
22
|
@active_group_id = Morpheus::Cli::Groups.active_groups[@appliance_name]
|
30
|
-
# preload stuff
|
31
|
-
get_available_cloud_types()
|
32
23
|
end
|
33
24
|
|
34
25
|
def handle(args)
|
@@ -134,38 +125,36 @@ class Morpheus::Cli::Clouds
|
|
134
125
|
|
135
126
|
def get(args)
|
136
127
|
options = {}
|
128
|
+
params = {}
|
137
129
|
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
138
130
|
opts.banner = subcommand_usage("[name]")
|
139
|
-
|
131
|
+
build_standard_list_options(opts, options)
|
140
132
|
opts.footer = "Get details about a cloud.\n" +
|
141
133
|
"[name] is required. This is the name or id of a cloud."
|
142
134
|
end
|
143
135
|
optparse.parse!(args)
|
144
|
-
|
145
|
-
puts optparse
|
146
|
-
exit 1
|
147
|
-
end
|
136
|
+
verify_args!(args:args, optparse:optparse, min:1)
|
148
137
|
connect(options)
|
138
|
+
params.merge!(parse_query_options(options))
|
149
139
|
id_list = parse_id_list(args)
|
150
140
|
return run_command_for_each_arg(id_list) do |arg|
|
151
|
-
_get(arg, options)
|
141
|
+
_get(arg, params, options)
|
152
142
|
end
|
153
143
|
end
|
154
144
|
|
155
|
-
def _get(
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
json_response = @clouds_interface.get(cloud['id'])
|
145
|
+
def _get(id, params, options={})
|
146
|
+
cloud = nil
|
147
|
+
if id.to_s !~ /\A\d{1,}\Z/
|
148
|
+
cloud = find_cloud_by_name_or_id(id)
|
149
|
+
id = cloud['id']
|
150
|
+
end
|
151
|
+
@clouds_interface.setopts(options)
|
152
|
+
if options[:dry_run]
|
153
|
+
print_dry_run @clouds_interface.dry.get(id.to_i, params)
|
154
|
+
return
|
155
|
+
end
|
156
|
+
json_response = @clouds_interface.get(id, params)
|
157
|
+
render_response(json_response, options, 'zone') do
|
169
158
|
cloud = json_response['zone']
|
170
159
|
cloud_stats = cloud['stats']
|
171
160
|
# serverCounts moved to zone.stats.serverCounts
|
@@ -175,17 +164,6 @@ class Morpheus::Cli::Clouds
|
|
175
164
|
else
|
176
165
|
server_counts = json_response['serverCounts'] # legacy
|
177
166
|
end
|
178
|
-
if options[:json]
|
179
|
-
puts as_json(json_response, options, 'zone')
|
180
|
-
return 0
|
181
|
-
elsif options[:yaml]
|
182
|
-
puts as_yaml(json_response, options, 'zone')
|
183
|
-
return 0
|
184
|
-
end
|
185
|
-
if options[:csv]
|
186
|
-
puts records_as_csv([json_response['zone']], options)
|
187
|
-
return 0
|
188
|
-
end
|
189
167
|
cloud_type = cloud_type_for_id(cloud['zoneTypeId'])
|
190
168
|
print_h1 "Cloud Details"
|
191
169
|
print cyan
|
@@ -195,6 +173,7 @@ class Morpheus::Cli::Clouds
|
|
195
173
|
"Type" => lambda {|it| cloud_type ? cloud_type['name'] : '' },
|
196
174
|
"Code" => 'code',
|
197
175
|
"Location" => 'location',
|
176
|
+
"Region Code" => 'regionCode',
|
198
177
|
"Visibility" => lambda {|it| it['visibility'].to_s.capitalize },
|
199
178
|
"Groups" => lambda {|it| it['groups'].collect {|g| g.instance_of?(Hash) ? g['name'] : g.to_s }.join(', ') },
|
200
179
|
#"Owner" => lambda {|it| it['owner'].instance_of?(Hash) ? it['owner']['name'] : it['ownerId'] },
|
@@ -214,14 +193,9 @@ class Morpheus::Cli::Clouds
|
|
214
193
|
print "Unmanaged: #{server_counts['unmanaged']}".center(20)
|
215
194
|
print "\n"
|
216
195
|
end
|
217
|
-
|
218
196
|
print reset,"\n"
|
219
|
-
|
220
|
-
#puts instance
|
221
|
-
rescue RestClient::Exception => e
|
222
|
-
print_rest_exception(e, options)
|
223
|
-
exit 1
|
224
197
|
end
|
198
|
+
return 0, nil
|
225
199
|
end
|
226
200
|
|
227
201
|
def add(args)
|
@@ -954,13 +928,14 @@ class Morpheus::Cli::Clouds
|
|
954
928
|
name: cloud['name'],
|
955
929
|
type: cloud_type ? cloud_type['name'] : '',
|
956
930
|
location: cloud['location'],
|
931
|
+
"REGION CODE": cloud['regionCode'],
|
957
932
|
groups: (cloud['groups'] || []).collect {|it| it.instance_of?(Hash) ? it['name'] : it.to_s }.join(', '),
|
958
933
|
servers: cloud['serverCount'],
|
959
934
|
status: format_cloud_status(cloud)
|
960
935
|
}
|
961
936
|
end
|
962
937
|
columns = [
|
963
|
-
:id, :name, :type, :location, :groups, :servers, :status
|
938
|
+
:id, :name, :type, :location, "REGION CODE", :groups, :servers, :status
|
964
939
|
]
|
965
940
|
print as_pretty_table(rows, columns, opts)
|
966
941
|
end
|