morpheus-cli 5.3.2.3 → 5.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,10 +1,4 @@
1
- # require 'yaml'
2
- require 'io/console'
3
- require 'rest_client'
4
- require 'optparse'
5
- require 'filesize'
6
1
  require 'morpheus/cli/cli_command'
7
- #require 'morpheus/cli/mixins/infrastructure_helper'
8
2
 
9
3
  class Morpheus::Cli::Clusters
10
4
  include Morpheus::Cli::CliCommand
@@ -464,6 +458,10 @@ class Morpheus::Cli::Clusters
464
458
 
465
459
  cluster_payload['type'] = cluster_type['code'] # {'id' => cluster_type['id']}
466
460
 
461
+ # Group / Site
462
+ group = load_group(cluster_type['code'], options)
463
+ cluster_payload['group'] = {'id' => group['id']}
464
+
467
465
  # Cluster Name
468
466
  if args.empty? && options[:no_prompt]
469
467
  print_red_alert "No cluster name provided"
@@ -520,10 +518,6 @@ class Morpheus::Cli::Clusters
520
518
 
521
519
  server_payload['tags'] = tags if tags
522
520
 
523
- # Group / Site
524
- group = load_group(options)
525
- cluster_payload['group'] = {'id' => group['id']}
526
-
527
521
  # Cloud / Zone
528
522
  cloud_id = nil
529
523
  cloud = options[:cloud] ? find_cloud_by_name_or_id_for_provisioning(group['id'], options[:cloud]) : nil
@@ -532,7 +526,7 @@ class Morpheus::Cli::Clusters
532
526
  cloud = @clouds_interface.get(cloud['id'])['zone']
533
527
  cloud_id = cloud['id']
534
528
  else
535
- available_clouds = get_available_clouds(group['id'])
529
+ available_clouds = get_available_clouds(group['id'], {groupType: cluster_payload['type']})
536
530
 
537
531
  if available_clouds.empty?
538
532
  print_red_alert "Group #{group['name']} has no available clouds"
@@ -562,15 +556,12 @@ class Morpheus::Cli::Clusters
562
556
  end
563
557
  end
564
558
 
565
- cluster_payload['layout'] = {id: layout['id']}
559
+ cluster_payload['layout'] = {'id' => layout['id']}
566
560
 
567
- # Plan
561
+ # Provision Type
568
562
  provision_type = (layout && layout['provisionType'] ? layout['provisionType'] : nil) || get_provision_type_for_zone_type(cloud['zoneType']['id'])
569
- service_plan = prompt_service_plan(cloud['id'], provision_type, options)
570
563
 
571
- if service_plan
572
- server_payload['plan'] = {'id' => service_plan['id'], 'code' => service_plan['code'], 'options' => prompt_service_plan_options(service_plan, options)}
573
- end
564
+ api_params = {zoneId: cloud['id'], siteId: group['id'], layoutId: layout['id'], groupTypeId: cluster_type['id'], provisionType: provision_type['code'], provisionTypeId: provision_type['id']}
574
565
 
575
566
  # Controller type
576
567
  server_types = @server_types_interface.list({max:1, computeTypeId: cluster_type['controllerTypes'].first['id'], zoneTypeId: cloud['zoneType']['id'], useZoneProvisionTypes: true})['serverTypes']
@@ -581,22 +572,47 @@ class Morpheus::Cli::Clusters
581
572
  controller_type = server_types.first
582
573
  controller_provision_type = controller_type['provisionType'] ? (@provision_types_interface.get(controller_type['provisionType']['id'])['provisionType'] rescue nil) : nil
583
574
 
584
- if controller_provision_type && resource_pool = prompt_resource_pool(group, cloud, service_plan, controller_provision_type, options)
585
- server_payload['config']['resourcePool'] = resource_pool['externalId']
575
+ if controller_provision_type && resource_pool = prompt_resource_pool(group, cloud, nil, controller_provision_type, options)
576
+ server_payload['config']['resourcePoolId'] = resource_pool['id']
577
+ api_params['config'] ||= {}
578
+ api_params['config']['resourcePool'] = resource_pool['id']
579
+ api_params['resourcePoolId'] = resource_pool['id']
580
+ api_params['zonePoolId'] = resource_pool['id']
586
581
  end
587
582
  end
588
583
 
584
+ # Service Plan
585
+ service_plan = prompt_service_plan(api_params, options)
586
+
587
+ if service_plan
588
+ server_payload['plan'] = {'id' => service_plan['id'], 'code' => service_plan['code'], 'options' => prompt_service_plan_options(service_plan, options)}
589
+ api_params['planId'] = service_plan['id']
590
+ end
591
+
589
592
  # Multi-disk / prompt for volumes
590
- volumes = options[:volumes] || prompt_volumes(service_plan, options.merge({'defaultAddFirstDataVolume': true}), @api_client, {zoneId: cloud['id'], siteId: group['id']})
593
+ volumes = options[:volumes] || prompt_volumes(service_plan, options.merge({'defaultAddFirstDataVolume': true}), @api_client, api_params)
591
594
 
592
595
  if !volumes.empty?
593
596
  server_payload['volumes'] = volumes
594
597
  end
595
598
 
599
+ # Options / Custom Config
600
+ option_type_list =
601
+ ((controller_type['optionTypes'].reject { |type| !type['enabled'] || type['fieldComponent'] } rescue []) + layout['optionTypes'] +
602
+ (cluster_type['optionTypes'].reject { |type| !type['enabled'] || !type['creatable'] || type['fieldComponent'] } rescue [])).sort { |type| type['displayOrder'] }
603
+
604
+ # KLUDGE: google zone required for network selection
605
+ if option_type = option_type_list.find {|type| type['code'] == 'computeServerType.googleLinux.googleZoneId'}
606
+ server_payload.deep_merge!(Morpheus::Cli::OptionTypes.prompt([option_type], options[:options], @api_client, api_params))
607
+ api_params.deep_merge!(server_payload)
608
+ api_params.deep_merge!(server_payload['config'])
609
+ option_type_list = option_type_list.reject {|type| type['code'] == 'computeServerType.googleLinux.googleZoneId'}
610
+ end
611
+
596
612
  # Networks
597
613
  # NOTE: You must choose subnets in the same availability zone
598
614
  if controller_provision_type && controller_provision_type['hasNetworks'] && cloud['zoneType']['code'] != 'esxi'
599
- server_payload['networkInterfaces'] = options[:networkInterfaces] || prompt_network_interfaces(cloud['id'], provision_type['id'], (resource_pool['id'] rescue nil), options)
615
+ server_payload['networkInterfaces'] = options[:networkInterfaces] || prompt_network_interfaces(cloud['id'], provision_type['id'], (resource_pool['id'] rescue nil), options.merge({:api_params => api_params}))
600
616
  end
601
617
 
602
618
  # Security Groups
@@ -605,15 +621,15 @@ class Morpheus::Cli::Clusters
605
621
  # Visibility
606
622
  server_payload['visibility'] = options[:visibility] || (Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'visibility', 'fieldLabel' => 'Visibility', 'type' => 'select', 'defaultValue' => 'private', 'required' => true, 'selectOptions' => [{'name' => 'Private', 'value' => 'private'},{'name' => 'Public', 'value' => 'public'}]}], options[:options], @api_client, {})['visibility'])
607
623
 
608
- # Options / Custom Config
609
- option_type_list = ((controller_type['optionTypes'].reject { |type| !type['enabled'] || type['fieldComponent'] } rescue []) + layout['optionTypes'] +
610
- (cluster_type['optionTypes'].reject { |type| !type['enabled'] || !type['creatable'] || type['fieldComponent'] } rescue [])).sort { |type| type['displayOrder'] }
624
+ # Layout template options
625
+ cluster_payload.deep_merge!(Morpheus::Cli::OptionTypes.prompt(load_layout_options(cluster_payload), options[:options], @api_client, api_params, options[:no_prompt], true))
611
626
 
612
- server_payload.deep_merge!(Morpheus::Cli::OptionTypes.prompt(option_type_list, options[:options], @api_client, {zoneId: cloud['id'], siteId: group['id'], layoutId: layout['id']}))
627
+ # Server options
628
+ server_payload.deep_merge!(Morpheus::Cli::OptionTypes.prompt(option_type_list, options[:options], @api_client, api_params, options[:no_prompt], true))
613
629
 
614
630
  # Worker count
615
631
  default_node_count = layout['computeServers'] ? (layout['computeServers'].find {|it| it['nodeType'] == 'worker'} || {'nodeCount' => 3})['nodeCount'] : 3
616
- server_payload['nodeCount'] = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => "nodeCount", 'type' => 'number', 'fieldLabel' => "#{cluster_type['code'].include?('docker') ? 'Host' : 'Worker'} Count", 'required' => true, 'defaultValue' => default_node_count}], options[:options], @api_client, {}, options[:no_prompt])["nodeCount"]
632
+ server_payload['config']['nodeCount'] = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => "config.nodeCount", 'type' => 'number', 'fieldLabel' => "#{cluster_type['code'].include?('docker') ? 'Host' : 'Worker'} Count", 'required' => true, 'defaultValue' => default_node_count > 0 ? default_node_count : 3}], options[:options], @api_client, api_params, options[:no_prompt])['config']['nodeCount']
617
633
 
618
634
  # Create User
619
635
  if !options[:createUser].nil?
@@ -629,7 +645,7 @@ class Morpheus::Cli::Clusters
629
645
  if userGroup
630
646
  server_payload['userGroup'] = userGroup
631
647
  elsif !options[:no_prompt]
632
- userGroupId = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'userGroupId', 'fieldLabel' => 'User Group', 'type' => 'select', 'required' => false, 'optionSource' => 'userGroups'}], options[:options], @api_client, {})['userGroupId']
648
+ userGroupId = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'userGroupId', 'fieldLabel' => 'User Group', 'type' => 'select', 'required' => false, 'optionSource' => 'userGroups'}], options[:options], @api_client, api_params)['userGroupId']
633
649
 
634
650
  if userGroupId
635
651
  server_payload['userGroup'] = {'id' => userGroupId}
@@ -637,11 +653,11 @@ class Morpheus::Cli::Clusters
637
653
  end
638
654
 
639
655
  # Host / Domain
640
- server_payload['networkDomain'] = options[:domain] || Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'networkDomain', 'fieldLabel' => 'Network Domain', 'type' => 'select', 'required' => false, 'optionSource' => 'networkDomains'}], options[:options], @api_client, {})['networkDomain']
641
- server_payload['hostname'] = options[:hostname] || Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'hostname', 'fieldLabel' => 'Hostname', 'type' => 'text', 'required' => true, 'description' => 'Hostname', 'defaultValue' => resourceName}], options[:options], @api_client)['hostname']
656
+ server_payload['networkDomain'] = options[:domain] || Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'networkDomain', 'fieldLabel' => 'Network Domain', 'type' => 'select', 'required' => false, 'optionSource' => 'networkDomains'}], options[:options], @api_client, api_params)['networkDomain']
657
+ server_payload['hostname'] = options[:hostname] || Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'hostname', 'fieldLabel' => 'Hostname', 'type' => 'text', 'required' => true, 'description' => 'Hostname', 'defaultValue' => resourceName}], options[:options], @api_client, api_params)['hostname']
642
658
 
643
659
  # Workflow / Automation
644
- task_set_id = options[:taskSetId] || Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'taskSet', 'fieldLabel' => 'Workflow', 'type' => 'select', 'required' => false, 'optionSource' => 'taskSets'}], options[:options], @api_client, {'phase' => 'postProvision'})['taskSet']
660
+ task_set_id = options[:taskSetId] || Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'taskSet', 'fieldLabel' => 'Workflow', 'type' => 'select', 'required' => false, 'optionSource' => 'taskSets'}], options[:options], @api_client, api_params.merge({'phase' => 'postProvision'}))['taskSet']
645
661
 
646
662
  if !task_set_id.nil?
647
663
  server_payload['taskSet'] = {'id' => task_set_id}
@@ -1147,20 +1163,20 @@ class Morpheus::Cli::Clusters
1147
1163
  cloud_id = (default_cloud && cloud_id == default_cloud['name']) ? default_cloud['value'] : cloud_id
1148
1164
  end
1149
1165
 
1166
+ # resources (zone pools)
1167
+ cloud = @clouds_interface.get(cloud_id)['zone']
1168
+ cloud['zoneType'] = get_cloud_type(cloud['zoneType']['id'])
1169
+ group = @groups_interface.get(cluster['site']['id'])['group']
1170
+
1150
1171
  server_payload['cloud'] = {'id' => cloud_id}
1151
- service_plan = prompt_service_plan(cloud_id, server_type['provisionType'], options)
1172
+ service_plan = prompt_service_plan({zoneId: cloud_id, siteId: cluster['site']['id'], provisionTypeId: server_type['provisionType']['id'], groupTypeId: cluster_type['id'], }, options)
1152
1173
 
1153
1174
  if service_plan
1154
1175
  server_payload['plan'] = {'code' => service_plan['code'], 'options' => prompt_service_plan_options(service_plan, options)}
1155
1176
  end
1156
1177
 
1157
- # resources (zone pools)
1158
- cloud = @clouds_interface.get(cloud_id)['zone']
1159
- cloud['zoneType'] = get_cloud_type(cloud['zoneType']['id'])
1160
- group = @groups_interface.get(cluster['site']['id'])['group']
1161
-
1162
1178
  if resource_pool = prompt_resource_pool(cluster, cloud, service_plan, server_type['provisionType'], options)
1163
- server_payload['config']['resourcePool'] = resource_pool['externalId']
1179
+ server_payload['config']['resourcePoolId'] = resource_pool['id']
1164
1180
  end
1165
1181
 
1166
1182
  # Multi-disk / prompt for volumes
@@ -1181,7 +1197,7 @@ class Morpheus::Cli::Clusters
1181
1197
  server_payload['securityGroups'] = prompt_security_groups_by_cloud(cloud, provision_type, resource_pool, options)
1182
1198
 
1183
1199
  # Worker count
1184
- default_node_count = layout['computeServers'] ? (layout['computeServers'].find {|it| it['nodeType'] == 'worker'} || {'nodeCount' => 3})['nodeCount'] : 3
1200
+ default_node_count = layout['computeServers'] ? (layout['computeServers'].find {|it| it['nodeType'] == 'worker'} || {'nodeCount' => 1})['nodeCount'] : 1
1185
1201
  server_payload['nodeCount'] = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => "nodeCount", 'type' => 'number', 'fieldLabel' => "#{cluster_type['code'].include?('docker') ? 'Host' : 'Worker'} Count", 'required' => true, 'defaultValue' => default_node_count}], options[:options], @api_client, {}, options[:no_prompt])["nodeCount"]
1186
1202
 
1187
1203
  # Options / Custom Config
@@ -3635,8 +3651,8 @@ class Morpheus::Cli::Clusters
3635
3651
  @server_types_interface.get(val)['serverType']
3636
3652
  end
3637
3653
 
3638
- def service_plans_for_dropdown(zone_id, provision_type_id)
3639
- @servers_interface.service_plans({zoneId: zone_id, provisionTypeId: provision_type_id})['plans'] rescue []
3654
+ def service_plans_for_dropdown(api_params)
3655
+ @servers_interface.service_plans(api_params)['plans'] rescue []
3640
3656
  end
3641
3657
 
3642
3658
  def namespace_service_plans
@@ -3653,7 +3669,7 @@ class Morpheus::Cli::Clusters
3653
3669
  @clouds_interface.cloud_type(zone_type_id)['zoneType']['provisionTypes'].first rescue nil
3654
3670
  end
3655
3671
 
3656
- def load_group(options)
3672
+ def load_group(group_type, options)
3657
3673
  # Group / Site
3658
3674
  group_id = nil
3659
3675
  group = options[:group] ? find_group_by_name_or_id_for_provisioning(options[:group]) : nil
@@ -3664,25 +3680,23 @@ class Morpheus::Cli::Clusters
3664
3680
  if @active_group_id
3665
3681
  group_id = @active_group_id
3666
3682
  else
3667
- available_groups = get_available_groups
3683
+ available_groups = get_available_groups({groupType: group_type})
3668
3684
 
3669
3685
  if available_groups.empty?
3670
3686
  print_red_alert "No available groups"
3671
3687
  exit 1
3672
- elsif available_groups.count > 1 && !options[:no_prompt]
3688
+ else available_groups.count > 1 && !options[:no_prompt]
3673
3689
  group_id = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'group', 'type' => 'select', 'fieldLabel' => 'Group', 'selectOptions' => available_groups, 'required' => true, 'description' => 'Select Group.'}],options[:options],@api_client,{})['group']
3674
- else
3675
- group_id = available_groups.first['id']
3676
3690
  end
3677
3691
  end
3678
3692
  end
3679
3693
  @groups_interface.get(group_id)['group']
3680
3694
  end
3681
3695
 
3682
- def prompt_service_plan(zone_id, provision_type, options)
3683
- available_service_plans = service_plans_for_dropdown(zone_id, provision_type['id'])
3696
+ def prompt_service_plan(api_params, options)
3697
+ available_service_plans = service_plans_for_dropdown(api_params)
3684
3698
  if available_service_plans.empty?
3685
- print_red_alert "Cloud #{zone_id} has no available plans"
3699
+ print_red_alert "Cloud #{api_params['zoneId']} has no available plans"
3686
3700
  exit 1
3687
3701
  end
3688
3702
  if options[:servicePlan]
@@ -3853,7 +3867,7 @@ class Morpheus::Cli::Clusters
3853
3867
  resource_pool = options[:resourcePool] ? find_cloud_resource_pool_by_name_or_id(cloud['id'], options[:resourcePool]) : nil
3854
3868
 
3855
3869
  if !resource_pool
3856
- resource_pool_options = @options_interface.options_for_source('zonePools', {groupId: group['id'], zoneId: cloud['id'], planId: (service_plan['id'] rescue nil)})['data'].reject { |it| it['id'].nil? && it['name'].nil? }
3870
+ resource_pool_options = @options_interface.options_for_source('zonePools', {groupId: group['id'], zoneId: cloud['id']}.merge(service_plan ? {planId: service_plan['id']} : {}))['data'].reject { |it| it['id'].nil? && it['name'].nil? }
3857
3871
 
3858
3872
  if resource_pool_options.empty?
3859
3873
  print_red_alert "Cloud #{cloud['name']} has no available resource pools"
@@ -3914,4 +3928,27 @@ class Morpheus::Cli::Clusters
3914
3928
  ]
3915
3929
  end
3916
3930
 
3931
+ def load_layout_options(cluster)
3932
+ (@api_client.options.options_for_source('computeTypeLayoutParameters', {layoutId: cluster['layout']['id']})['data'] || []).collect do |it|
3933
+ it['fieldName'] = it['name']
3934
+ it['fieldLabel'] = it['displayName']
3935
+ it['fieldContext'] = 'config.templateParameter'
3936
+ if it['type'] == 'ServicePlan'
3937
+ it['optionSource'] = 'servicePlans'
3938
+ it['type'] = 'select'
3939
+ it['params'] = {:provisionType => '', :zoneId => '', :siteId => '', :resourcePoolId => ''}
3940
+ it['params'][:provisionType] = 'azure' if it['azureServicePlanType']
3941
+ elsif it['type'] == 'Subnet'
3942
+ it['optionSource'] = 'networks'
3943
+ it['type'] = 'select'
3944
+ it['params'] = {:siteId => '', :instanceId => '', :serverId => '', :zonePoolId => '', :zoneRegionId => '', :zoneId => '', :provisionType => ''}
3945
+ if cluster['type'] == 'aks-cluster'
3946
+ it['params'][:provisionType] = 'azure'
3947
+ end
3948
+ else
3949
+ it['type'] = 'text'
3950
+ end
3951
+ it
3952
+ end
3953
+ end
3917
3954
  end
@@ -1,6 +1,4 @@
1
- require 'optparse'
2
1
  require 'morpheus/cli/cli_command'
3
- require 'json'
4
2
 
5
3
  # This is for use in dotfile scripts
6
4
  # It allows you to turn colors on or off globally
@@ -1,11 +1,4 @@
1
- require 'io/console'
2
- require 'rest_client'
3
- require 'optparse'
4
- require 'filesize'
5
1
  require 'morpheus/cli/cli_command'
6
- require 'morpheus/cli/mixins/provisioning_helper'
7
- require 'morpheus/cli/mixins/logs_helper'
8
- require 'morpheus/cli/option_types'
9
2
 
10
3
  class Morpheus::Cli::ContainersCommand
11
4
  include Morpheus::Cli::CliCommand
@@ -1,7 +1,4 @@
1
- require 'optparse'
2
- require 'morpheus/logging'
3
1
  require 'morpheus/cli/cli_command'
4
- require 'json'
5
2
 
6
3
  class Morpheus::Cli::CurlCommand
7
4
  include Morpheus::Cli::CliCommand
@@ -1,4 +1,3 @@
1
- require 'json'
2
1
  require 'morpheus/cli/cli_command'
3
2
 
4
3
  class Morpheus::Cli::CypherCommand
@@ -1,6 +1,4 @@
1
- require 'optparse'
2
1
  require 'morpheus/cli/cli_command'
3
- require 'json'
4
2
 
5
3
  class Morpheus::Cli::DashboardCommand
6
4
  include Morpheus::Cli::CliCommand
@@ -1,5 +1,4 @@
1
1
  require 'morpheus/cli/cli_command'
2
- require 'morpheus/logging'
3
2
 
4
3
  # This is for use in dotfile scripts
5
4
  # It allows you to turn colors on or off globally
@@ -1,5 +1,4 @@
1
1
  require 'morpheus/cli/cli_command'
2
- require 'yaml'
3
2
 
4
3
  class Morpheus::Cli::Deploy
5
4
  include Morpheus::Cli::CliCommand
@@ -1,5 +1,4 @@
1
1
  require 'morpheus/cli/cli_command'
2
- require 'yaml'
3
2
 
4
3
  class Morpheus::Cli::Deploys
5
4
  include Morpheus::Cli::CliCommand
@@ -2,7 +2,7 @@ require 'morpheus/cli/cli_command'
2
2
 
3
3
  # This provides commands for authentication
4
4
  # This also includes credential management.
5
- class Morpheus::Cli::DocCommand
5
+ class Morpheus::Cli::Doc
6
6
  include Morpheus::Cli::CliCommand
7
7
 
8
8
  set_command_name :'doc'
@@ -1,6 +1,4 @@
1
1
  require 'morpheus/cli/cli_command'
2
- require 'term/ansicolor'
3
- require 'json'
4
2
 
5
3
  # This is for use in dotfile scripts for printing
6
4
  # It is also responsible for maintaining a map of variables
@@ -1,8 +1,6 @@
1
1
  require 'morpheus/cli/cli_command'
2
- require 'term/ansicolor'
3
- require 'json'
4
2
 
5
- # Command for editing the .morpheus_profile initalization script
3
+ # Command for editing the .morpheus_profile initialization script
6
4
  class Morpheus::Cli::EditProfileCommand
7
5
  include Morpheus::Cli::CliCommand
8
6
  set_command_name :'edit-profile'
@@ -18,7 +16,20 @@ class Morpheus::Cli::EditProfileCommand
18
16
  editor = val
19
17
  end
20
18
  build_common_options(opts, options, [])
21
- opts.footer = "Edit your interactive shell script at #{filename}"
19
+ opts.footer = <<-EOT
20
+ Edit your .morpheus_profile script located in the morpheus home directory.
21
+ This script runs whenever the morpheus terminal command is executed.
22
+ It provides a way to initialize your cli environment for all morpheus commands.
23
+
24
+ Example:
25
+
26
+ # disable coloring to exclude ansi characters in output
27
+ coloring off -q
28
+
29
+ # Enable debugging to print extra output for troubleshooting
30
+ debug on
31
+
32
+ EOT
22
33
  end
23
34
  optparse.parse!(args)
24
35
 
@@ -1,6 +1,4 @@
1
1
  require 'morpheus/cli/cli_command'
2
- require 'term/ansicolor'
3
- require 'json'
4
2
 
5
3
  # Command for editing the .morpheus_profile initalization script
6
4
  class Morpheus::Cli::EditRcCommand
@@ -18,7 +16,25 @@ class Morpheus::Cli::EditRcCommand
18
16
  editor = val.gsub("'",'')
19
17
  end
20
18
  build_common_options(opts, options, [])
21
- opts.footer = "Edit your morpheus initialization script at #{filename}"
19
+ opts.footer = <<-EOT
20
+ Edit your .morpheusrc script located in the morpheus home directory.
21
+ This script runs at the beginning of the interactive morpheus shell command.
22
+ It provides a way to initialize your interactive morpheus shell environment.
23
+
24
+ Example:
25
+
26
+ # customize the morpheus shell prompt
27
+ set-prompt "%cyan%username%reset@%magenta%remote %cyanmorpheus> %reset"
28
+
29
+ # print the morpheus cli version
30
+ version
31
+
32
+ # print the current remote appliance version
33
+ remote get current
34
+
35
+ # greetings
36
+ echo "Welcome back %username"
37
+ EOT
22
38
  end
23
39
  optparse.parse!(args)
24
40
 
@@ -1,9 +1,4 @@
1
- require 'io/console'
2
- require 'rest_client'
3
- require 'optparse'
4
1
  require 'morpheus/cli/cli_command'
5
- require 'morpheus/cli/option_types'
6
- require 'json'
7
2
 
8
3
  class Morpheus::Cli::EnvironmentsCommand
9
4
  include Morpheus::Cli::CliCommand
@@ -1,6 +1,4 @@
1
1
  require 'morpheus/cli/cli_command'
2
- # require 'morpheus/cli/mixins/provisioning_helper'
3
- # require 'morpheus/cli/mixins/infrastructure_helper'
4
2
 
5
3
  class Morpheus::Cli::ExecutionRequestCommand
6
4
  include Morpheus::Cli::CliCommand
@@ -1,6 +1,4 @@
1
1
  require 'morpheus/cli/cli_command'
2
- require 'term/ansicolor'
3
- require 'json'
4
2
 
5
3
  # Utility command for exiting a shell
6
4
  class Morpheus::Cli::ExitCommand
@@ -1,11 +1,7 @@
1
1
  require 'morpheus/cli/cli_command'
2
- # require 'morpheus/cli/mixins/provisioning_helper'
3
- # require 'morpheus/cli/mixins/infrastructure_helper'
4
2
 
5
3
  class Morpheus::Cli::FileCopyRequestCommand
6
4
  include Morpheus::Cli::CliCommand
7
- # include Morpheus::Cli::InfrastructureHelper
8
- # include Morpheus::Cli::ProvisioningHelper
9
5
 
10
6
  set_command_name :'file-copy-request'
11
7
 
@@ -1,6 +1,3 @@
1
- require 'optparse'
2
- require 'json'
3
- require 'morpheus/logging'
4
1
  require 'morpheus/cli/cli_command'
5
2
 
6
3
  class Morpheus::Cli::GetPromptCommand
@@ -1,11 +1,4 @@
1
- require 'fileutils'
2
- require 'yaml'
3
- require 'io/console'
4
- require 'rest_client'
5
- require 'optparse'
6
1
  require 'morpheus/cli/cli_command'
7
- require 'morpheus/cli/mixins/infrastructure_helper'
8
- require 'morpheus/logging'
9
2
 
10
3
  class Morpheus::Cli::Groups
11
4
  include Morpheus::Cli::CliCommand
@@ -1,5 +1,5 @@
1
1
  require 'morpheus/cli/cli_command'
2
- require 'date'
2
+ require 'date' #needed?
3
3
 
4
4
  class Morpheus::Cli::GuidanceCommand
5
5
  include Morpheus::Cli::CliCommand