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.
Files changed (212) hide show
  1. checksums.yaml +4 -4
  2. data/Dockerfile +1 -1
  3. data/lib/morpheus/api/account_users_interface.rb +68 -0
  4. data/lib/morpheus/api/api_client.rb +75 -8
  5. data/lib/morpheus/api/audit_interface.rb +9 -0
  6. data/lib/morpheus/api/clouds_interface.rb +4 -11
  7. data/lib/morpheus/api/health_interface.rb +37 -3
  8. data/lib/morpheus/api/instances_interface.rb +39 -5
  9. data/lib/morpheus/api/load_balancer_monitors_interface.rb +9 -0
  10. data/lib/morpheus/api/load_balancer_profiles_interface.rb +9 -0
  11. data/lib/morpheus/api/load_balancer_virtual_servers_interface.rb +9 -0
  12. data/lib/morpheus/api/load_balancers_interface.rb +5 -0
  13. data/lib/morpheus/api/network_dhcp_relays_interface.rb +36 -0
  14. data/lib/morpheus/api/network_dhcp_servers_interface.rb +36 -0
  15. data/lib/morpheus/api/network_edge_clusters_interface.rb +26 -0
  16. data/lib/morpheus/api/network_routers_interface.rb +30 -0
  17. data/lib/morpheus/api/network_servers_interface.rb +98 -0
  18. data/lib/morpheus/api/network_static_routes_interface.rb +36 -0
  19. data/lib/morpheus/api/read_interface.rb +4 -3
  20. data/lib/morpheus/api/rest_interface.rb +5 -4
  21. data/lib/morpheus/api/roles_interface.rb +7 -0
  22. data/lib/morpheus/api/secondary_read_interface.rb +1 -1
  23. data/lib/morpheus/api/secondary_rest_interface.rb +19 -19
  24. data/lib/morpheus/api/storage_server_types_interface.rb +14 -0
  25. data/lib/morpheus/api/storage_servers_interface.rb +9 -0
  26. data/lib/morpheus/api/storage_volume_types_interface.rb +9 -0
  27. data/lib/morpheus/api/storage_volumes_interface.rb +9 -0
  28. data/lib/morpheus/api/users_interface.rb +16 -63
  29. data/lib/morpheus/api/virtual_images_interface.rb +23 -2
  30. data/lib/morpheus/api/virtual_servers_interface.rb +9 -0
  31. data/lib/morpheus/cli/cli_command.rb +274 -19
  32. data/lib/morpheus/cli/cli_registry.rb +56 -2
  33. data/lib/morpheus/cli/{access_token_command.rb → commands/access_token_command.rb} +1 -1
  34. data/lib/morpheus/cli/{account_groups_command.rb → commands/account_groups_command.rb} +0 -8
  35. data/lib/morpheus/cli/{activity_command.rb → commands/activity_command.rb} +0 -0
  36. data/lib/morpheus/cli/commands/{standard/alias_command.rb → alias_command.rb} +1 -4
  37. data/lib/morpheus/cli/{appliance_settings_command.rb → commands/appliance_settings_command.rb} +0 -0
  38. data/lib/morpheus/cli/{approvals_command.rb → commands/approvals_command.rb} +0 -0
  39. data/lib/morpheus/cli/{apps.rb → commands/apps.rb} +17 -89
  40. data/lib/morpheus/cli/{archives_command.rb → commands/archives_command.rb} +0 -6
  41. data/lib/morpheus/cli/commands/audit.rb +188 -0
  42. data/lib/morpheus/cli/{backup_jobs_command.rb → commands/backup_jobs_command.rb} +0 -0
  43. data/lib/morpheus/cli/{backup_settings_command.rb → commands/backup_settings_command.rb} +0 -0
  44. data/lib/morpheus/cli/{backups_command.rb → commands/backups_command.rb} +0 -0
  45. data/lib/morpheus/cli/commands/{standard/benchmark_command.rb → benchmark_command.rb} +0 -3
  46. data/lib/morpheus/cli/{blueprints_command.rb → commands/blueprints_command.rb} +1 -1
  47. data/lib/morpheus/cli/{boot_scripts_command.rb → commands/boot_scripts_command.rb} +0 -3
  48. data/lib/morpheus/cli/{budgets_command.rb → commands/budgets_command.rb} +0 -0
  49. data/lib/morpheus/cli/commands/{standard/cat_command.rb → cat_command.rb} +0 -0
  50. data/lib/morpheus/cli/{catalog_item_types_command.rb → commands/catalog_item_types_command.rb} +0 -0
  51. data/lib/morpheus/cli/{certificates_command.rb → commands/certificates_command.rb} +0 -0
  52. data/lib/morpheus/cli/commands/change_password_command.rb +132 -0
  53. data/lib/morpheus/cli/{cloud_datastores_command.rb → commands/cloud_datastores_command.rb} +0 -4
  54. data/lib/morpheus/cli/{cloud_folders_command.rb → commands/cloud_folders_command.rb} +0 -4
  55. data/lib/morpheus/cli/{cloud_resource_pools_command.rb → commands/cloud_resource_pools_command.rb} +170 -138
  56. data/lib/morpheus/cli/{clouds.rb → commands/clouds.rb} +22 -47
  57. data/lib/morpheus/cli/{clusters.rb → commands/clusters.rb} +86 -49
  58. data/lib/morpheus/cli/commands/{standard/coloring_command.rb → coloring_command.rb} +0 -2
  59. data/lib/morpheus/cli/{containers_command.rb → commands/containers_command.rb} +0 -7
  60. data/lib/morpheus/cli/commands/{standard/curl_command.rb → curl_command.rb} +0 -3
  61. data/lib/morpheus/cli/{cypher_command.rb → commands/cypher_command.rb} +0 -1
  62. data/lib/morpheus/cli/{dashboard_command.rb → commands/dashboard_command.rb} +0 -2
  63. data/lib/morpheus/cli/commands/{standard/debug_command.rb → debug_command.rb} +0 -1
  64. data/lib/morpheus/cli/{deploy.rb → commands/deploy.rb} +0 -1
  65. data/lib/morpheus/cli/{deployments.rb → commands/deployments.rb} +0 -0
  66. data/lib/morpheus/cli/{deploys.rb → commands/deploys.rb} +0 -1
  67. data/lib/morpheus/cli/{doc.rb → commands/doc.rb} +1 -1
  68. data/lib/morpheus/cli/commands/{standard/echo_command.rb → echo_command.rb} +0 -2
  69. data/lib/morpheus/cli/commands/{standard/edit_profile_command.rb → edit_profile_command.rb} +15 -4
  70. data/lib/morpheus/cli/commands/{standard/edit_rc_command.rb → edit_rc_command.rb} +19 -3
  71. data/lib/morpheus/cli/{environments_command.rb → commands/environments_command.rb} +0 -5
  72. data/lib/morpheus/cli/{execute_schedules_command.rb → commands/execute_schedules_command.rb} +0 -0
  73. data/lib/morpheus/cli/{execution_request_command.rb → commands/execution_request_command.rb} +0 -2
  74. data/lib/morpheus/cli/commands/{standard/exit_command.rb → exit_command.rb} +0 -2
  75. data/lib/morpheus/cli/{file_copy_request_command.rb → commands/file_copy_request_command.rb} +0 -4
  76. data/lib/morpheus/cli/{forgot_password.rb → commands/forgot_password.rb} +0 -0
  77. data/lib/morpheus/cli/commands/{standard/get_prompt_command.rb → get_prompt_command.rb} +0 -3
  78. data/lib/morpheus/cli/{groups.rb → commands/groups.rb} +0 -7
  79. data/lib/morpheus/cli/{guidance_command.rb → commands/guidance_command.rb} +1 -1
  80. data/lib/morpheus/cli/{health_command.rb → commands/health_command.rb} +104 -19
  81. data/lib/morpheus/cli/commands/{standard/history_command.rb → history_command.rb} +0 -3
  82. data/lib/morpheus/cli/{hosts.rb → commands/hosts.rb} +15 -25
  83. data/lib/morpheus/cli/{image_builder_command.rb → commands/image_builder_command.rb} +2 -8
  84. data/lib/morpheus/cli/{instance_types.rb → commands/instance_types.rb} +0 -3
  85. data/lib/morpheus/cli/{instances.rb → commands/instances.rb} +473 -150
  86. data/lib/morpheus/cli/{integrations_command.rb → commands/integrations_command.rb} +0 -0
  87. data/lib/morpheus/cli/{invoices_command.rb → commands/invoices_command.rb} +118 -134
  88. data/lib/morpheus/cli/{jobs_command.rb → commands/jobs_command.rb} +0 -0
  89. data/lib/morpheus/cli/{key_pairs.rb → commands/key_pairs.rb} +0 -6
  90. data/lib/morpheus/cli/{library_cluster_layouts_command.rb → commands/library_cluster_layouts_command.rb} +20 -4
  91. data/lib/morpheus/cli/{library_container_scripts_command.rb → commands/library_container_scripts_command.rb} +0 -0
  92. data/lib/morpheus/cli/{library_container_templates_command.rb → commands/library_container_templates_command.rb} +0 -1
  93. data/lib/morpheus/cli/{library_container_types_command.rb → commands/library_container_types_command.rb} +0 -4
  94. data/lib/morpheus/cli/{library_instance_types_command.rb → commands/library_instance_types_command.rb} +0 -4
  95. data/lib/morpheus/cli/{library_layouts_command.rb → commands/library_layouts_command.rb} +0 -4
  96. data/lib/morpheus/cli/{library_option_lists_command.rb → commands/library_option_lists_command.rb} +3 -7
  97. data/lib/morpheus/cli/{library_option_types_command.rb → commands/library_option_types_command.rb} +0 -4
  98. data/lib/morpheus/cli/{library_spec_templates_command.rb → commands/library_spec_templates_command.rb} +0 -1
  99. data/lib/morpheus/cli/{library_upgrades_command.rb → commands/library_upgrades_command.rb} +0 -4
  100. data/lib/morpheus/cli/{license.rb → commands/license.rb} +0 -3
  101. data/lib/morpheus/cli/commands/load_balancer_monitors.rb +71 -0
  102. data/lib/morpheus/cli/commands/load_balancer_pools.rb +91 -0
  103. data/lib/morpheus/cli/commands/load_balancer_profiles.rb +65 -0
  104. data/lib/morpheus/cli/{load_balancer_types.rb → commands/load_balancer_types.rb} +9 -8
  105. data/lib/morpheus/cli/commands/load_balancer_virtual_servers.rb +156 -0
  106. data/lib/morpheus/cli/commands/load_balancers.rb +176 -0
  107. data/lib/morpheus/cli/commands/{standard/log_level_command.rb → log_level_command.rb} +0 -3
  108. data/lib/morpheus/cli/{log_settings_command.rb → commands/log_settings_command.rb} +0 -0
  109. data/lib/morpheus/cli/{login.rb → commands/login.rb} +0 -5
  110. data/lib/morpheus/cli/commands/logout.rb +63 -0
  111. data/lib/morpheus/cli/{logs_command.rb → commands/logs_command.rb} +0 -3
  112. data/lib/morpheus/cli/commands/{standard/man_command.rb → man_command.rb} +0 -2
  113. data/lib/morpheus/cli/{monitoring_alerts_command.rb → commands/monitoring_alerts_command.rb} +0 -7
  114. data/lib/morpheus/cli/{monitoring_apps_command.rb → commands/monitoring_apps_command.rb} +0 -1
  115. data/lib/morpheus/cli/{monitoring_checks_command.rb → commands/monitoring_checks_command.rb} +2 -1
  116. data/lib/morpheus/cli/{monitoring_contacts_command.rb → commands/monitoring_contacts_command.rb} +0 -7
  117. data/lib/morpheus/cli/{monitoring_groups_command.rb → commands/monitoring_groups_command.rb} +0 -1
  118. data/lib/morpheus/cli/{monitoring_incidents_command.rb → commands/monitoring_incidents_command.rb} +0 -1
  119. data/lib/morpheus/cli/commands/network_dhcp_relays_command.rb +416 -0
  120. data/lib/morpheus/cli/commands/network_dhcp_servers_command.rb +407 -0
  121. data/lib/morpheus/cli/{network_domains_command.rb → commands/network_domains_command.rb} +0 -4
  122. data/lib/morpheus/cli/commands/network_edge_clusters_command.rb +329 -0
  123. data/lib/morpheus/cli/commands/network_firewalls_command.rb +823 -0
  124. data/lib/morpheus/cli/{network_groups_command.rb → commands/network_groups_command.rb} +0 -4
  125. data/lib/morpheus/cli/{network_pool_servers_command.rb → commands/network_pool_servers_command.rb} +0 -4
  126. data/lib/morpheus/cli/{network_pools_command.rb → commands/network_pools_command.rb} +0 -4
  127. data/lib/morpheus/cli/{network_proxies_command.rb → commands/network_proxies_command.rb} +0 -4
  128. data/lib/morpheus/cli/{network_routers_command.rb → commands/network_routers_command.rb} +387 -57
  129. data/lib/morpheus/cli/{network_services_command.rb → commands/network_services_command.rb} +0 -4
  130. data/lib/morpheus/cli/commands/network_static_routes_command.rb +446 -0
  131. data/lib/morpheus/cli/commands/network_transport_zones_command.rb +452 -0
  132. data/lib/morpheus/cli/{networks_command.rb → commands/networks_command.rb} +21 -21
  133. data/lib/morpheus/cli/commands/open_command.rb +30 -0
  134. data/lib/morpheus/cli/commands/options.rb +98 -0
  135. data/lib/morpheus/cli/{packages_command.rb → commands/packages_command.rb} +0 -2
  136. data/lib/morpheus/cli/{ping.rb → commands/ping.rb} +0 -7
  137. data/lib/morpheus/cli/{policies_command.rb → commands/policies_command.rb} +1 -8
  138. data/lib/morpheus/cli/{power_schedules_command.rb → commands/power_schedules_command.rb} +0 -0
  139. data/lib/morpheus/cli/{preseed_scripts_command.rb → commands/preseed_scripts_command.rb} +0 -3
  140. data/lib/morpheus/cli/{price_sets_command.rb → commands/price_sets_command.rb} +0 -0
  141. data/lib/morpheus/cli/{prices_command.rb → commands/prices_command.rb} +7 -7
  142. data/lib/morpheus/cli/{processes_command.rb → commands/processes_command.rb} +0 -1
  143. data/lib/morpheus/cli/{projects_command.rb → commands/projects_command.rb} +0 -0
  144. data/lib/morpheus/cli/{provisioning_licenses_command.rb → commands/provisioning_licenses_command.rb} +0 -0
  145. data/lib/morpheus/cli/{provisioning_settings_command.rb → commands/provisioning_settings_command.rb} +0 -0
  146. data/lib/morpheus/cli/{recent_activity_command.rb → commands/recent_activity_command.rb} +0 -0
  147. data/lib/morpheus/cli/{remote.rb → commands/remote.rb} +5 -9
  148. data/lib/morpheus/cli/{reports_command.rb → commands/reports_command.rb} +0 -2
  149. data/lib/morpheus/cli/commands/{standard/rm_command.rb → rm_command.rb} +0 -0
  150. data/lib/morpheus/cli/{roles.rb → commands/roles.rb} +245 -40
  151. data/lib/morpheus/cli/{search_command.rb → commands/search_command.rb} +0 -0
  152. data/lib/morpheus/cli/{security_group_rules.rb → commands/security_group_rules.rb} +0 -5
  153. data/lib/morpheus/cli/{security_groups.rb → commands/security_groups.rb} +0 -6
  154. data/lib/morpheus/cli/{service_catalog_command.rb → commands/service_catalog_command.rb} +0 -0
  155. data/lib/morpheus/cli/{service_plans_command.rb → commands/service_plans_command.rb} +0 -0
  156. data/lib/morpheus/cli/commands/{standard/set_prompt_command.rb → set_prompt_command.rb} +0 -3
  157. data/lib/morpheus/cli/{setup.rb → commands/setup.rb} +0 -0
  158. data/lib/morpheus/cli/{shell.rb → commands/shell.rb} +4 -105
  159. data/lib/morpheus/cli/commands/{standard/sleep_command.rb → sleep_command.rb} +0 -2
  160. data/lib/morpheus/cli/commands/{standard/source_command.rb → source_command.rb} +0 -2
  161. data/lib/morpheus/cli/commands/{standard/ssl_verification_command.rb → ssl_verification_command.rb} +0 -3
  162. data/lib/morpheus/cli/{storage_providers_command.rb → commands/storage_providers_command.rb} +0 -4
  163. data/lib/morpheus/cli/commands/storage_server_types.rb +50 -0
  164. data/lib/morpheus/cli/commands/storage_servers.rb +122 -0
  165. data/lib/morpheus/cli/commands/storage_volume_types.rb +50 -0
  166. data/lib/morpheus/cli/commands/storage_volumes.rb +103 -0
  167. data/lib/morpheus/cli/{subnets_command.rb → commands/subnets_command.rb} +7 -6
  168. data/lib/morpheus/cli/{tasks.rb → commands/tasks.rb} +25 -6
  169. data/lib/morpheus/cli/commands/{standard/tee_command.rb → tee_command.rb} +0 -0
  170. data/lib/morpheus/cli/{tenants_command.rb → commands/tenants_command.rb} +1 -8
  171. data/lib/morpheus/cli/commands/{standard/update_command.rb → update_command.rb} +0 -1
  172. data/lib/morpheus/cli/{usage_command.rb → commands/usage_command.rb} +0 -0
  173. data/lib/morpheus/cli/{user_groups_command.rb → commands/user_groups_command.rb} +1 -2
  174. data/lib/morpheus/cli/{user_settings_command.rb → commands/user_settings_command.rb} +2 -1
  175. data/lib/morpheus/cli/{user_sources_command.rb → commands/user_sources_command.rb} +1 -2
  176. data/lib/morpheus/cli/{users.rb → commands/users.rb} +28 -35
  177. data/lib/morpheus/cli/{vdi_allocations_command.rb → commands/vdi_allocations_command.rb} +0 -0
  178. data/lib/morpheus/cli/{vdi_apps_command.rb → commands/vdi_apps_command.rb} +0 -0
  179. data/lib/morpheus/cli/{vdi_command.rb → commands/vdi_command.rb} +0 -0
  180. data/lib/morpheus/cli/{vdi_gateways_command.rb → commands/vdi_gateways_command.rb} +0 -0
  181. data/lib/morpheus/cli/{vdi_pools_command.rb → commands/vdi_pools_command.rb} +4 -1
  182. data/lib/morpheus/cli/commands/{standard/version_command.rb → version_command.rb} +0 -0
  183. data/lib/morpheus/cli/commands/view.rb +102 -0
  184. data/lib/morpheus/cli/{virtual_images.rb → commands/virtual_images.rb} +251 -33
  185. data/lib/morpheus/cli/{whitelabel_settings_command.rb → commands/whitelabel_settings_command.rb} +0 -1
  186. data/lib/morpheus/cli/{whoami.rb → commands/whoami.rb} +0 -4
  187. data/lib/morpheus/cli/{wiki_command.rb → commands/wiki_command.rb} +0 -5
  188. data/lib/morpheus/cli/{workflows.rb → commands/workflows.rb} +0 -3
  189. data/lib/morpheus/cli/mixins/accounts_helper.rb +5 -5
  190. data/lib/morpheus/cli/mixins/load_balancers_helper.rb +26 -6
  191. data/lib/morpheus/cli/mixins/logs_helper.rb +1 -1
  192. data/lib/morpheus/cli/mixins/print_helper.rb +51 -18
  193. data/lib/morpheus/cli/mixins/processes_helper.rb +1 -2
  194. data/lib/morpheus/cli/mixins/provisioning_helper.rb +167 -110
  195. data/lib/morpheus/cli/mixins/rest_command.rb +268 -94
  196. data/lib/morpheus/cli/mixins/secondary_rest_command.rb +668 -0
  197. data/lib/morpheus/cli/mixins/storage_servers_helper.rb +156 -0
  198. data/lib/morpheus/cli/mixins/storage_volumes_helper.rb +119 -0
  199. data/lib/morpheus/cli/option_parser.rb +25 -17
  200. data/lib/morpheus/cli/option_types.rb +137 -52
  201. data/lib/morpheus/cli/version.rb +1 -1
  202. data/lib/morpheus/cli.rb +6 -128
  203. data/lib/morpheus/ext/string.rb +29 -6
  204. data/lib/morpheus/routes.rb +238 -0
  205. data/lib/morpheus/terminal.rb +5 -6
  206. data/lib/morpheus/util.rb +6 -1
  207. data/morpheus-cli.gemspec +1 -1
  208. metadata +183 -149
  209. data/lib/morpheus/cli/change_password_command.rb +0 -147
  210. data/lib/morpheus/cli/library.rb +0 -1
  211. data/lib/morpheus/cli/load_balancers.rb +0 -245
  212. data/lib/morpheus/cli/logout.rb +0 -81
@@ -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
- build_common_options(opts, options, [:options, :payload, :json, :dry_run, :remote])
333
- opts.footer = "Update a resource pool." + "\n" +
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
- begin
353
- # load cloud
354
- if cloud_id.nil?
355
- puts_error "#{Morpheus::Terminal.angry_prompt}missing required option: [cloud]\n#{optparse}"
356
- return 1
357
- end
358
- cloud = find_cloud_by_name_or_id(cloud_id)
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
- # construct payload
365
- payload = nil
366
- if options[:payload]
367
- payload = options[:payload]
368
- else
369
- # prompt for resource pool options
370
- payload = {
371
- 'resourcePool' => {
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
- # Name
380
- if options['name']
381
- payload['resourcePool']['name'] = options['name']
382
- else
383
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'description' => 'Name'}], options)
384
- payload['resourcePool']['name'] = v_prompt['name']
385
- end
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
- # Group Access
388
- if group_access_all != nil
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'] = group_access_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
- if group_access_list != nil
399
- payload['resourcePermissions'] ||= {}
400
- payload['resourcePermissions']['sites'] = group_access_list.collect do |site_id|
401
- site = {"id" => site_id.to_i}
402
- if group_defaults_list && group_defaults_list.include?(site_id)
403
- site["default"] = true
404
- end
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
- # Service Plan Access
410
- if plan_access_all != nil
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'] = plan_access_all
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
- if plan_access_list != nil
421
- payload['resourcePermissions'] ||= {}
422
- payload['resourcePermissions']['plans'] = plan_access_list.collect do |site_id|
423
- site = {"id" => site_id.to_i}
424
- if plan_defaults_list && plan_defaults_list.include?(site_id)
425
- site["default"] = true
426
- end
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
- # Tenants
432
- if options['tenants']
433
- payload['tenantPermissions'] = {}
434
- payload['tenantPermissions']['accounts'] = options['tenants']
435
- end
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
- # Default
445
- if options['defaultPool'] != nil
446
- payload['resourcePool']['defaultPool'] = options['defaultPool']
447
- end
448
-
449
- # Visibility
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
- @cloud_resource_pools_interface.setopts(options)
480
- if options[:dry_run]
481
- print_dry_run @cloud_resource_pools_interface.dry.create(cloud['id'], payload)
482
- return
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
- json_response = @cloud_resource_pools_interface.create(cloud['id'], payload)
485
- if options[:json]
486
- puts as_json(json_response)
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
- resource_pool = json_response['resourcePool']
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
- if options[:json]
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 = folders.select { |it| name && (it['name'] == name || it['externalId'] == name) }
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
- build_common_options(opts, options, [:json, :yaml, :csv, :fields, :dry_run, :remote])
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
- if args.count < 1
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(arg, options={})
156
- begin
157
- if options[:dry_run]
158
- @clouds_interface.setopts(options)
159
- if arg.to_s =~ /\A\d{1,}\Z/
160
- print_dry_run @clouds_interface.dry.get(arg.to_i)
161
- else
162
- print_dry_run @clouds_interface.dry.list({name:arg})
163
- end
164
- return
165
- end
166
- cloud = find_cloud_by_name_or_id(arg)
167
- @clouds_interface.setopts(options)
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