morpheus-cli 5.3.4 → 5.4.3

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 (214) 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 +69 -11
  5. data/lib/morpheus/api/audit_interface.rb +9 -0
  6. data/lib/morpheus/api/catalog_item_types_interface.rb +20 -0
  7. data/lib/morpheus/api/health_interface.rb +37 -3
  8. data/lib/morpheus/api/instances_interface.rb +49 -0
  9. data/lib/morpheus/api/load_balancer_monitors_interface.rb +9 -0
  10. data/lib/morpheus/api/load_balancer_pools_interface.rb +4 -4
  11. data/lib/morpheus/api/load_balancer_profiles_interface.rb +4 -5
  12. data/lib/morpheus/api/load_balancer_virtual_servers_interface.rb +13 -4
  13. data/lib/morpheus/api/load_balancers_interface.rb +5 -0
  14. data/lib/morpheus/api/network_dhcp_relays_interface.rb +36 -0
  15. data/lib/morpheus/api/network_dhcp_servers_interface.rb +36 -0
  16. data/lib/morpheus/api/network_edge_clusters_interface.rb +26 -0
  17. data/lib/morpheus/api/network_routers_interface.rb +9 -0
  18. data/lib/morpheus/api/network_servers_interface.rb +68 -12
  19. data/lib/morpheus/api/network_static_routes_interface.rb +36 -0
  20. data/lib/morpheus/api/ping_interface.rb +2 -0
  21. data/lib/morpheus/api/read_interface.rb +4 -3
  22. data/lib/morpheus/api/rest_interface.rb +3 -3
  23. data/lib/morpheus/api/roles_interface.rb +7 -0
  24. data/lib/morpheus/api/secondary_read_interface.rb +1 -1
  25. data/lib/morpheus/api/secondary_rest_interface.rb +19 -19
  26. data/lib/morpheus/api/setup_interface.rb +4 -0
  27. data/lib/morpheus/api/snapshots_interface.rb +19 -0
  28. data/lib/morpheus/api/storage_server_types_interface.rb +14 -0
  29. data/lib/morpheus/api/storage_servers_interface.rb +9 -0
  30. data/lib/morpheus/api/storage_volume_types_interface.rb +9 -0
  31. data/lib/morpheus/api/storage_volumes_interface.rb +9 -0
  32. data/lib/morpheus/api/users_interface.rb +16 -63
  33. data/lib/morpheus/cli/cli_command.rb +260 -13
  34. data/lib/morpheus/cli/cli_registry.rb +2 -1
  35. data/lib/morpheus/cli/{access_token_command.rb → commands/access_token_command.rb} +1 -1
  36. data/lib/morpheus/cli/{account_groups_command.rb → commands/account_groups_command.rb} +0 -8
  37. data/lib/morpheus/cli/{activity_command.rb → commands/activity_command.rb} +0 -0
  38. data/lib/morpheus/cli/commands/{standard/alias_command.rb → alias_command.rb} +1 -4
  39. data/lib/morpheus/cli/{appliance_settings_command.rb → commands/appliance_settings_command.rb} +0 -0
  40. data/lib/morpheus/cli/{approvals_command.rb → commands/approvals_command.rb} +0 -0
  41. data/lib/morpheus/cli/{apps.rb → commands/apps.rb} +14 -87
  42. data/lib/morpheus/cli/{archives_command.rb → commands/archives_command.rb} +0 -6
  43. data/lib/morpheus/cli/commands/audit.rb +188 -0
  44. data/lib/morpheus/cli/{backup_jobs_command.rb → commands/backup_jobs_command.rb} +0 -0
  45. data/lib/morpheus/cli/{backup_settings_command.rb → commands/backup_settings_command.rb} +0 -0
  46. data/lib/morpheus/cli/{backups_command.rb → commands/backups_command.rb} +0 -0
  47. data/lib/morpheus/cli/commands/{standard/benchmark_command.rb → benchmark_command.rb} +0 -3
  48. data/lib/morpheus/cli/{blueprints_command.rb → commands/blueprints_command.rb} +1 -1
  49. data/lib/morpheus/cli/{boot_scripts_command.rb → commands/boot_scripts_command.rb} +0 -3
  50. data/lib/morpheus/cli/{budgets_command.rb → commands/budgets_command.rb} +0 -0
  51. data/lib/morpheus/cli/commands/{standard/cat_command.rb → cat_command.rb} +0 -0
  52. data/lib/morpheus/cli/{catalog_item_types_command.rb → commands/catalog_item_types_command.rb} +88 -0
  53. data/lib/morpheus/cli/{certificates_command.rb → commands/certificates_command.rb} +0 -0
  54. data/lib/morpheus/cli/commands/change_password_command.rb +132 -0
  55. data/lib/morpheus/cli/{cloud_datastores_command.rb → commands/cloud_datastores_command.rb} +0 -4
  56. data/lib/morpheus/cli/{cloud_folders_command.rb → commands/cloud_folders_command.rb} +0 -4
  57. data/lib/morpheus/cli/{cloud_resource_pools_command.rb → commands/cloud_resource_pools_command.rb} +0 -4
  58. data/lib/morpheus/cli/{clouds.rb → commands/clouds.rb} +0 -7
  59. data/lib/morpheus/cli/{clusters.rb → commands/clusters.rb} +96 -64
  60. data/lib/morpheus/cli/commands/{standard/coloring_command.rb → coloring_command.rb} +0 -2
  61. data/lib/morpheus/cli/{containers_command.rb → commands/containers_command.rb} +0 -7
  62. data/lib/morpheus/cli/commands/{standard/curl_command.rb → curl_command.rb} +0 -3
  63. data/lib/morpheus/cli/{cypher_command.rb → commands/cypher_command.rb} +0 -1
  64. data/lib/morpheus/cli/{dashboard_command.rb → commands/dashboard_command.rb} +0 -2
  65. data/lib/morpheus/cli/commands/{standard/debug_command.rb → debug_command.rb} +0 -1
  66. data/lib/morpheus/cli/{deploy.rb → commands/deploy.rb} +0 -1
  67. data/lib/morpheus/cli/{deployments.rb → commands/deployments.rb} +0 -0
  68. data/lib/morpheus/cli/{deploys.rb → commands/deploys.rb} +0 -1
  69. data/lib/morpheus/cli/{doc.rb → commands/doc.rb} +1 -1
  70. data/lib/morpheus/cli/commands/{standard/echo_command.rb → echo_command.rb} +0 -2
  71. data/lib/morpheus/cli/commands/{standard/edit_profile_command.rb → edit_profile_command.rb} +15 -4
  72. data/lib/morpheus/cli/commands/{standard/edit_rc_command.rb → edit_rc_command.rb} +19 -3
  73. data/lib/morpheus/cli/{environments_command.rb → commands/environments_command.rb} +0 -5
  74. data/lib/morpheus/cli/{execute_schedules_command.rb → commands/execute_schedules_command.rb} +0 -0
  75. data/lib/morpheus/cli/{execution_request_command.rb → commands/execution_request_command.rb} +0 -2
  76. data/lib/morpheus/cli/commands/{standard/exit_command.rb → exit_command.rb} +0 -2
  77. data/lib/morpheus/cli/{file_copy_request_command.rb → commands/file_copy_request_command.rb} +0 -4
  78. data/lib/morpheus/cli/{forgot_password.rb → commands/forgot_password.rb} +0 -0
  79. data/lib/morpheus/cli/commands/{standard/get_prompt_command.rb → get_prompt_command.rb} +0 -3
  80. data/lib/morpheus/cli/{groups.rb → commands/groups.rb} +0 -7
  81. data/lib/morpheus/cli/{guidance_command.rb → commands/guidance_command.rb} +1 -1
  82. data/lib/morpheus/cli/{health_command.rb → commands/health_command.rb} +104 -19
  83. data/lib/morpheus/cli/commands/{standard/history_command.rb → history_command.rb} +0 -3
  84. data/lib/morpheus/cli/{hosts.rb → commands/hosts.rb} +27 -24
  85. data/lib/morpheus/cli/{image_builder_command.rb → commands/image_builder_command.rb} +6 -16
  86. data/lib/morpheus/cli/{instance_types.rb → commands/instance_types.rb} +0 -3
  87. data/lib/morpheus/cli/{instances.rb → commands/instances.rb} +359 -7
  88. data/lib/morpheus/cli/{integrations_command.rb → commands/integrations_command.rb} +1 -12
  89. data/lib/morpheus/cli/{invoices_command.rb → commands/invoices_command.rb} +1 -1
  90. data/lib/morpheus/cli/{jobs_command.rb → commands/jobs_command.rb} +0 -0
  91. data/lib/morpheus/cli/{key_pairs.rb → commands/key_pairs.rb} +0 -6
  92. data/lib/morpheus/cli/{library_cluster_layouts_command.rb → commands/library_cluster_layouts_command.rb} +0 -4
  93. data/lib/morpheus/cli/{library_container_scripts_command.rb → commands/library_container_scripts_command.rb} +0 -0
  94. data/lib/morpheus/cli/{library_container_templates_command.rb → commands/library_container_templates_command.rb} +0 -1
  95. data/lib/morpheus/cli/{library_container_types_command.rb → commands/library_container_types_command.rb} +0 -4
  96. data/lib/morpheus/cli/{library_instance_types_command.rb → commands/library_instance_types_command.rb} +3 -4
  97. data/lib/morpheus/cli/{library_layouts_command.rb → commands/library_layouts_command.rb} +0 -4
  98. data/lib/morpheus/cli/{library_option_lists_command.rb → commands/library_option_lists_command.rb} +0 -4
  99. data/lib/morpheus/cli/{library_option_types_command.rb → commands/library_option_types_command.rb} +0 -4
  100. data/lib/morpheus/cli/{library_spec_templates_command.rb → commands/library_spec_templates_command.rb} +0 -1
  101. data/lib/morpheus/cli/{library_upgrades_command.rb → commands/library_upgrades_command.rb} +0 -4
  102. data/lib/morpheus/cli/{license.rb → commands/license.rb} +0 -3
  103. data/lib/morpheus/cli/commands/load_balancer_monitors.rb +70 -0
  104. data/lib/morpheus/cli/commands/load_balancer_pools.rb +90 -0
  105. data/lib/morpheus/cli/commands/load_balancer_profiles.rb +64 -0
  106. data/lib/morpheus/cli/{load_balancer_types.rb → commands/load_balancer_types.rb} +9 -8
  107. data/lib/morpheus/cli/{load_balancer_virtual_servers.rb → commands/load_balancer_virtual_servers.rb} +69 -58
  108. data/lib/morpheus/cli/commands/load_balancers.rb +192 -0
  109. data/lib/morpheus/cli/commands/{standard/log_level_command.rb → log_level_command.rb} +0 -3
  110. data/lib/morpheus/cli/{log_settings_command.rb → commands/log_settings_command.rb} +0 -0
  111. data/lib/morpheus/cli/{login.rb → commands/login.rb} +0 -5
  112. data/lib/morpheus/cli/commands/logout.rb +63 -0
  113. data/lib/morpheus/cli/{logs_command.rb → commands/logs_command.rb} +0 -3
  114. data/lib/morpheus/cli/commands/{standard/man_command.rb → man_command.rb} +0 -2
  115. data/lib/morpheus/cli/{monitoring_alerts_command.rb → commands/monitoring_alerts_command.rb} +0 -7
  116. data/lib/morpheus/cli/{monitoring_apps_command.rb → commands/monitoring_apps_command.rb} +0 -1
  117. data/lib/morpheus/cli/{monitoring_checks_command.rb → commands/monitoring_checks_command.rb} +0 -1
  118. data/lib/morpheus/cli/{monitoring_contacts_command.rb → commands/monitoring_contacts_command.rb} +0 -7
  119. data/lib/morpheus/cli/{monitoring_groups_command.rb → commands/monitoring_groups_command.rb} +0 -1
  120. data/lib/morpheus/cli/{monitoring_incidents_command.rb → commands/monitoring_incidents_command.rb} +0 -1
  121. data/lib/morpheus/cli/commands/network_dhcp_relays_command.rb +416 -0
  122. data/lib/morpheus/cli/commands/network_dhcp_servers_command.rb +407 -0
  123. data/lib/morpheus/cli/{network_domains_command.rb → commands/network_domains_command.rb} +0 -4
  124. data/lib/morpheus/cli/commands/network_edge_clusters_command.rb +329 -0
  125. data/lib/morpheus/cli/commands/network_firewalls_command.rb +823 -0
  126. data/lib/morpheus/cli/{network_groups_command.rb → commands/network_groups_command.rb} +0 -4
  127. data/lib/morpheus/cli/{network_pool_servers_command.rb → commands/network_pool_servers_command.rb} +0 -4
  128. data/lib/morpheus/cli/{network_pools_command.rb → commands/network_pools_command.rb} +0 -4
  129. data/lib/morpheus/cli/{network_proxies_command.rb → commands/network_proxies_command.rb} +0 -4
  130. data/lib/morpheus/cli/{network_routers_command.rb → commands/network_routers_command.rb} +96 -50
  131. data/lib/morpheus/cli/{network_services_command.rb → commands/network_services_command.rb} +0 -4
  132. data/lib/morpheus/cli/commands/network_static_routes_command.rb +451 -0
  133. data/lib/morpheus/cli/{network_scopes_command.rb → commands/network_transport_zones_command.rb} +102 -92
  134. data/lib/morpheus/cli/{networks_command.rb → commands/networks_command.rb} +20 -20
  135. data/lib/morpheus/cli/commands/open_command.rb +30 -0
  136. data/lib/morpheus/cli/commands/options.rb +98 -0
  137. data/lib/morpheus/cli/{packages_command.rb → commands/packages_command.rb} +0 -2
  138. data/lib/morpheus/cli/{ping.rb → commands/ping.rb} +3 -12
  139. data/lib/morpheus/cli/{policies_command.rb → commands/policies_command.rb} +2 -9
  140. data/lib/morpheus/cli/{power_schedules_command.rb → commands/power_schedules_command.rb} +0 -0
  141. data/lib/morpheus/cli/{preseed_scripts_command.rb → commands/preseed_scripts_command.rb} +0 -3
  142. data/lib/morpheus/cli/{price_sets_command.rb → commands/price_sets_command.rb} +0 -0
  143. data/lib/morpheus/cli/{prices_command.rb → commands/prices_command.rb} +7 -7
  144. data/lib/morpheus/cli/{processes_command.rb → commands/processes_command.rb} +0 -1
  145. data/lib/morpheus/cli/{projects_command.rb → commands/projects_command.rb} +0 -0
  146. data/lib/morpheus/cli/{provisioning_licenses_command.rb → commands/provisioning_licenses_command.rb} +0 -0
  147. data/lib/morpheus/cli/{provisioning_settings_command.rb → commands/provisioning_settings_command.rb} +1 -0
  148. data/lib/morpheus/cli/{recent_activity_command.rb → commands/recent_activity_command.rb} +0 -0
  149. data/lib/morpheus/cli/{remote.rb → commands/remote.rb} +21 -19
  150. data/lib/morpheus/cli/{reports_command.rb → commands/reports_command.rb} +0 -2
  151. data/lib/morpheus/cli/commands/{standard/rm_command.rb → rm_command.rb} +0 -0
  152. data/lib/morpheus/cli/{roles.rb → commands/roles.rb} +245 -40
  153. data/lib/morpheus/cli/{search_command.rb → commands/search_command.rb} +0 -0
  154. data/lib/morpheus/cli/{security_group_rules.rb → commands/security_group_rules.rb} +0 -5
  155. data/lib/morpheus/cli/{security_groups.rb → commands/security_groups.rb} +2 -8
  156. data/lib/morpheus/cli/{service_catalog_command.rb → commands/service_catalog_command.rb} +0 -0
  157. data/lib/morpheus/cli/{service_plans_command.rb → commands/service_plans_command.rb} +1 -1
  158. data/lib/morpheus/cli/commands/{standard/set_prompt_command.rb → set_prompt_command.rb} +0 -3
  159. data/lib/morpheus/cli/{setup.rb → commands/setup.rb} +1 -1
  160. data/lib/morpheus/cli/{shell.rb → commands/shell.rb} +4 -105
  161. data/lib/morpheus/cli/commands/{standard/sleep_command.rb → sleep_command.rb} +0 -2
  162. data/lib/morpheus/cli/commands/snapshots.rb +139 -0
  163. data/lib/morpheus/cli/commands/{standard/source_command.rb → source_command.rb} +0 -2
  164. data/lib/morpheus/cli/commands/{standard/ssl_verification_command.rb → ssl_verification_command.rb} +0 -3
  165. data/lib/morpheus/cli/{storage_providers_command.rb → commands/storage_providers_command.rb} +0 -4
  166. data/lib/morpheus/cli/commands/storage_server_types.rb +50 -0
  167. data/lib/morpheus/cli/commands/storage_servers.rb +122 -0
  168. data/lib/morpheus/cli/commands/storage_volume_types.rb +50 -0
  169. data/lib/morpheus/cli/commands/storage_volumes.rb +103 -0
  170. data/lib/morpheus/cli/{subnets_command.rb → commands/subnets_command.rb} +0 -4
  171. data/lib/morpheus/cli/{tasks.rb → commands/tasks.rb} +5 -9
  172. data/lib/morpheus/cli/commands/{standard/tee_command.rb → tee_command.rb} +0 -0
  173. data/lib/morpheus/cli/{tenants_command.rb → commands/tenants_command.rb} +1 -8
  174. data/lib/morpheus/cli/commands/{standard/update_command.rb → update_command.rb} +0 -1
  175. data/lib/morpheus/cli/{usage_command.rb → commands/usage_command.rb} +0 -0
  176. data/lib/morpheus/cli/{user_groups_command.rb → commands/user_groups_command.rb} +1 -2
  177. data/lib/morpheus/cli/{user_settings_command.rb → commands/user_settings_command.rb} +3 -2
  178. data/lib/morpheus/cli/{user_sources_command.rb → commands/user_sources_command.rb} +1 -2
  179. data/lib/morpheus/cli/{users.rb → commands/users.rb} +28 -35
  180. data/lib/morpheus/cli/{vdi_allocations_command.rb → commands/vdi_allocations_command.rb} +0 -0
  181. data/lib/morpheus/cli/{vdi_apps_command.rb → commands/vdi_apps_command.rb} +0 -0
  182. data/lib/morpheus/cli/{vdi_command.rb → commands/vdi_command.rb} +0 -0
  183. data/lib/morpheus/cli/{vdi_gateways_command.rb → commands/vdi_gateways_command.rb} +0 -0
  184. data/lib/morpheus/cli/{vdi_pools_command.rb → commands/vdi_pools_command.rb} +0 -0
  185. data/lib/morpheus/cli/commands/{standard/version_command.rb → version_command.rb} +0 -0
  186. data/lib/morpheus/cli/commands/view.rb +102 -0
  187. data/lib/morpheus/cli/{virtual_images.rb → commands/virtual_images.rb} +4 -5
  188. data/lib/morpheus/cli/{whitelabel_settings_command.rb → commands/whitelabel_settings_command.rb} +0 -1
  189. data/lib/morpheus/cli/{whoami.rb → commands/whoami.rb} +0 -4
  190. data/lib/morpheus/cli/{wiki_command.rb → commands/wiki_command.rb} +0 -5
  191. data/lib/morpheus/cli/{workflows.rb → commands/workflows.rb} +0 -3
  192. data/lib/morpheus/cli/mixins/accounts_helper.rb +5 -5
  193. data/lib/morpheus/cli/mixins/load_balancers_helper.rb +24 -4
  194. data/lib/morpheus/cli/mixins/logs_helper.rb +1 -1
  195. data/lib/morpheus/cli/mixins/print_helper.rb +51 -18
  196. data/lib/morpheus/cli/mixins/processes_helper.rb +1 -2
  197. data/lib/morpheus/cli/mixins/provisioning_helper.rb +96 -6
  198. data/lib/morpheus/cli/mixins/rest_command.rb +222 -62
  199. data/lib/morpheus/cli/mixins/secondary_rest_command.rb +249 -70
  200. data/lib/morpheus/cli/mixins/storage_servers_helper.rb +156 -0
  201. data/lib/morpheus/cli/mixins/storage_volumes_helper.rb +119 -0
  202. data/lib/morpheus/cli/option_types.rb +150 -46
  203. data/lib/morpheus/cli/version.rb +1 -1
  204. data/lib/morpheus/cli.rb +5 -135
  205. data/lib/morpheus/ext/string.rb +29 -6
  206. data/lib/morpheus/routes.rb +238 -0
  207. data/lib/morpheus/terminal.rb +5 -6
  208. data/lib/morpheus/util.rb +6 -1
  209. metadata +174 -144
  210. data/lib/morpheus/cli/change_password_command.rb +0 -147
  211. data/lib/morpheus/cli/library.rb +0 -1
  212. data/lib/morpheus/cli/load_balancer_pools.rb +0 -111
  213. data/lib/morpheus/cli/load_balancers.rb +0 -90
  214. 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"
@@ -553,30 +547,34 @@ class Morpheus::Cli::Clusters
553
547
  available_layouts = layouts_for_dropdown(cloud['id'], cluster_type['id'])
554
548
 
555
549
  if !available_layouts.empty?
556
- if available_layouts.count > 1 && !options[:no_prompt]
557
- layout_id = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'layout', 'type' => 'select', 'fieldLabel' => 'Layout', 'selectOptions' => available_layouts, 'required' => true, 'description' => 'Select Layout.'}],options[:options],@api_client,{})['layout']
558
- else
559
- layout_id = available_layouts.first['id']
560
- end
550
+ layout_id = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'layout', 'type' => 'select', 'fieldLabel' => 'Layout', 'selectOptions' => available_layouts, 'required' => true, 'description' => 'Select Layout.'}],options[:options],@api_client,{})['layout']
561
551
  layout = find_layout_by_name_or_id(layout_id)
562
552
  end
563
553
  end
564
554
 
565
- cluster_payload['layout'] = {id: layout['id']}
555
+ cluster_payload['layout'] = {'id' => layout['id']}
566
556
 
567
557
  # Provision Type
568
558
  provision_type = (layout && layout['provisionType'] ? layout['provisionType'] : nil) || get_provision_type_for_zone_type(cloud['zoneType']['id'])
559
+ provision_type = @provision_types_interface.get(provision_type['id'])['provisionType'] if !provision_type.nil?
569
560
 
570
- api_params = {zoneId: cloud['id'], siteId: group['id'], layoutId: layout['id'], groupTypeId: cluster_type['id'], provisionTypeId: provision_type['id']}
561
+ api_params = {zoneId: cloud['id'], siteId: group['id'], layoutId: layout['id'], groupTypeId: cluster_type['id'], provisionType: provision_type['code'], provisionTypeId: provision_type['id']}
571
562
 
572
563
  # Controller type
573
- server_types = @server_types_interface.list({max:1, computeTypeId: cluster_type['controllerTypes'].first['id'], zoneTypeId: cloud['zoneType']['id'], useZoneProvisionTypes: true})['serverTypes']
564
+ server_types = @server_types_interface.list({computeTypeId: cluster_type['controllerTypes'].first['id'], zoneTypeId: cloud['zoneType']['id'], useZoneProvisionTypes: true})['serverTypes'].reject {|it| it['provisionType']['code'] == 'manual'}
574
565
  controller_provision_type = nil
575
566
  resource_pool = nil
576
567
 
577
568
  if !server_types.empty?
578
569
  controller_type = server_types.first
579
- controller_provision_type = controller_type['provisionType'] ? (@provision_types_interface.get(controller_type['provisionType']['id'])['provisionType'] rescue nil) : nil
570
+
571
+ if controller_type['provisionType']
572
+ if provision_type && provision_type['id'] == controller_type['provisionType']['id']
573
+ controller_provision_type = provision_type
574
+ else
575
+ controller_provision_type = @provision_types_interface.get(controller_type['provisionType']['id'])['provisionType'] rescue nil
576
+ end
577
+ end
580
578
 
581
579
  if controller_provision_type && resource_pool = prompt_resource_pool(group, cloud, nil, controller_provision_type, options)
582
580
  server_payload['config']['resourcePoolId'] = resource_pool['id']
@@ -591,21 +589,23 @@ class Morpheus::Cli::Clusters
591
589
  service_plan = prompt_service_plan(api_params, options)
592
590
 
593
591
  if service_plan
594
- server_payload['plan'] = {'id' => service_plan['id'], 'code' => service_plan['code'], 'options' => prompt_service_plan_options(service_plan, options)}
592
+ server_payload['plan'] = {'id' => service_plan['id'], 'code' => service_plan['code'], 'options' => prompt_service_plan_options(service_plan, provision_type, options)}
595
593
  api_params['planId'] = service_plan['id']
596
594
  end
597
595
 
598
596
  # Multi-disk / prompt for volumes
599
- volumes = options[:volumes] || prompt_volumes(service_plan, options.merge({'defaultAddFirstDataVolume': true}), @api_client, api_params)
600
-
601
- if !volumes.empty?
602
- server_payload['volumes'] = volumes
597
+ if provision_type['hasVolumes']
598
+ volumes = options[:volumes] || prompt_volumes(service_plan, options.merge({'defaultAddFirstDataVolume': true}), @api_client, api_params)
599
+ if !volumes.empty?
600
+ server_payload['volumes'] = volumes
601
+ end
603
602
  end
604
603
 
605
604
  # Options / Custom Config
606
605
  option_type_list =
607
- ((controller_type['optionTypes'].reject { |type| !type['enabled'] || type['fieldComponent'] } rescue []) + layout['optionTypes'] +
608
- (cluster_type['optionTypes'].reject { |type| !type['enabled'] || !type['creatable'] || type['fieldComponent'] } rescue [])).sort { |type| type['displayOrder'] }
606
+ ((controller_type.nil? ? [] : controller_type['optionTypes'].reject { |type| !type['enabled'] || type['fieldComponent'] } rescue []) +
607
+ layout['optionTypes'] +
608
+ (cluster_type['optionTypes'].reject { |type| !type['enabled'] || !type['creatable'] || type['fieldComponent'] } rescue []))
609
609
 
610
610
  # KLUDGE: google zone required for network selection
611
611
  if option_type = option_type_list.find {|type| type['code'] == 'computeServerType.googleLinux.googleZoneId'}
@@ -627,11 +627,17 @@ class Morpheus::Cli::Clusters
627
627
  # Visibility
628
628
  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'])
629
629
 
630
- server_payload.deep_merge!(Morpheus::Cli::OptionTypes.prompt(option_type_list, options[:options], @api_client, api_params, options[:no_prompt], true))
630
+ # Layout template options
631
+ cluster_payload.deep_merge!(Morpheus::Cli::OptionTypes.prompt(load_layout_options(cluster_payload), options[:options], @api_client, api_params, options[:no_prompt], true))
632
+
633
+ # Server options
634
+ server_payload.deep_merge!(Morpheus::Cli::OptionTypes.prompt(option_type_list, options[:options].deep_merge({:context_map => {'domain' => ''}}), @api_client, api_params, options[:no_prompt], true))
631
635
 
632
636
  # Worker count
633
- default_node_count = layout['computeServers'] ? (layout['computeServers'].find {|it| it['nodeType'] == 'worker'} || {'nodeCount' => 3})['nodeCount'] : 3
634
- 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']
637
+ if !['manual', 'external'].include?(provision_type['code'])
638
+ default_node_count = layout['computeServers'] ? (layout['computeServers'].find {|it| it['nodeType'] == 'worker'} || {'nodeCount' => 3})['nodeCount'] : 3
639
+ server_payload['config']['nodeCount'] = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => "config.nodeCount", 'type' => 'number', 'fieldLabel' => "#{['docker-cluster', 'kvm-cluster'].include?(cluster_type['code']) ? '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']
640
+ end
635
641
 
636
642
  # Create User
637
643
  if !options[:createUser].nil?
@@ -659,10 +665,12 @@ class Morpheus::Cli::Clusters
659
665
  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']
660
666
 
661
667
  # Workflow / Automation
662
- 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']
668
+ if provision_type['code'] != 'manual' && controller_type && controller_type['hasAutomation']
669
+ 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']
663
670
 
664
- if !task_set_id.nil?
665
- server_payload['taskSet'] = {'id' => task_set_id}
671
+ if !task_set_id.nil?
672
+ server_payload['taskSet'] = {'id' => task_set_id}
673
+ end
666
674
  end
667
675
 
668
676
  cluster_payload['server'] = server_payload
@@ -1174,7 +1182,7 @@ class Morpheus::Cli::Clusters
1174
1182
  service_plan = prompt_service_plan({zoneId: cloud_id, siteId: cluster['site']['id'], provisionTypeId: server_type['provisionType']['id'], groupTypeId: cluster_type['id'], }, options)
1175
1183
 
1176
1184
  if service_plan
1177
- server_payload['plan'] = {'code' => service_plan['code'], 'options' => prompt_service_plan_options(service_plan, options)}
1185
+ server_payload['plan'] = {'code' => service_plan['code'], 'options' => prompt_service_plan_options(service_plan, nil, options)}
1178
1186
  end
1179
1187
 
1180
1188
  if resource_pool = prompt_resource_pool(cluster, cloud, service_plan, server_type['provisionType'], options)
@@ -3671,7 +3679,7 @@ class Morpheus::Cli::Clusters
3671
3679
  @clouds_interface.cloud_type(zone_type_id)['zoneType']['provisionTypes'].first rescue nil
3672
3680
  end
3673
3681
 
3674
- def load_group(options)
3682
+ def load_group(group_type, options)
3675
3683
  # Group / Site
3676
3684
  group_id = nil
3677
3685
  group = options[:group] ? find_group_by_name_or_id_for_provisioning(options[:group]) : nil
@@ -3682,15 +3690,13 @@ class Morpheus::Cli::Clusters
3682
3690
  if @active_group_id
3683
3691
  group_id = @active_group_id
3684
3692
  else
3685
- available_groups = get_available_groups
3693
+ available_groups = get_available_groups({groupType: group_type})
3686
3694
 
3687
3695
  if available_groups.empty?
3688
3696
  print_red_alert "No available groups"
3689
3697
  exit 1
3690
- elsif available_groups.count > 1 && !options[:no_prompt]
3698
+ else available_groups.count > 1 && !options[:no_prompt]
3691
3699
  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']
3692
- else
3693
- group_id = available_groups.first['id']
3694
3700
  end
3695
3701
  end
3696
3702
  end
@@ -3717,34 +3723,37 @@ class Morpheus::Cli::Clusters
3717
3723
  service_plan
3718
3724
  end
3719
3725
 
3720
- def prompt_service_plan_options(service_plan, options)
3726
+ def prompt_service_plan_options(service_plan, provision_type, options)
3721
3727
  plan_options = {}
3722
-
3723
- # custom max memory
3724
- if service_plan['customMaxMemory']
3725
- if !options[:maxMemory]
3726
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'maxMemory', 'type' => 'number', 'fieldLabel' => 'Max Memory (MB)', 'required' => false, 'description' => 'This will override any memory requirement set on the virtual image', 'defaultValue' => service_plan['maxMemory'] ? service_plan['maxMemory'] / (1024 * 1024) : 10 }], options[:options])
3727
- plan_options['maxMemory'] = v_prompt['maxMemory'] * 1024 * 1024 if v_prompt['maxMemory']
3728
- else
3729
- plan_options['maxMemory'] = options[:maxMemory]
3728
+ hide_custom_options = provision_type && provision_type['code'] == 'manual'
3729
+
3730
+ if !hide_custom_options
3731
+ # custom max memory
3732
+ if service_plan['customMaxMemory']
3733
+ if !options[:maxMemory]
3734
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'maxMemory', 'type' => 'number', 'fieldLabel' => 'Max Memory (MB)', 'required' => false, 'description' => 'This will override any memory requirement set on the virtual image', 'defaultValue' => service_plan['maxMemory'] ? service_plan['maxMemory'] / (1024 * 1024) : 10 }], options[:options])
3735
+ plan_options['maxMemory'] = v_prompt['maxMemory'] * 1024 * 1024 if v_prompt['maxMemory']
3736
+ else
3737
+ plan_options['maxMemory'] = options[:maxMemory]
3738
+ end
3730
3739
  end
3731
- end
3732
3740
 
3733
- # custom cores: max cpu, max cores, cores per socket
3734
- if service_plan['customCores']
3735
- if options[:cpuCount].empty?
3736
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'cpuCount', 'type' => 'number', 'fieldLabel' => 'CPU Count', 'required' => false, 'description' => 'Set CPU Count', 'defaultValue' => service_plan['maxCpu'] ? service_plan['maxCpu'] : 1 }], options[:options])
3737
- plan_options['cpuCount'] = v_prompt['cpuCount'] if v_prompt['cpuCount']
3738
- else
3739
- plan_options['cpuCount']
3740
- end
3741
- if options[:coreCount].empty?
3742
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'coreCount', 'type' => 'number', 'fieldLabel' => 'Core Count', 'required' => false, 'description' => 'Set Core Count', 'defaultValue' => service_plan['maxCores'] ? service_plan['maxCores'] : 1 }], options[:options])
3743
- plan_options['coreCount'] = v_prompt['coreCount'] if v_prompt['coreCount']
3744
- end
3745
- if options[:coresPerSocket].empty? && service_plan['coresPerSocket']
3746
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'coresPerSocket', 'type' => 'number', 'fieldLabel' => 'Cores Per Socket', 'required' => false, 'description' => 'Set Core Per Socket', 'defaultValue' => service_plan['coresPerSocket']}], options[:options])
3747
- plan_options['coresPerSocket'] = v_prompt['coresPerSocket'] if v_prompt['coresPerSocket']
3741
+ # custom cores: max cpu, max cores, cores per socket
3742
+ if service_plan['customCores']
3743
+ if options[:cpuCount].empty?
3744
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'cpuCount', 'type' => 'number', 'fieldLabel' => 'CPU Count', 'required' => false, 'description' => 'Set CPU Count', 'defaultValue' => service_plan['maxCpu'] ? service_plan['maxCpu'] : 1 }], options[:options])
3745
+ plan_options['cpuCount'] = v_prompt['cpuCount'] if v_prompt['cpuCount']
3746
+ else
3747
+ plan_options['cpuCount']
3748
+ end
3749
+ if options[:coreCount].empty?
3750
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'coreCount', 'type' => 'number', 'fieldLabel' => 'Core Count', 'required' => false, 'description' => 'Set Core Count', 'defaultValue' => service_plan['maxCores'] ? service_plan['maxCores'] : 1 }], options[:options])
3751
+ plan_options['coreCount'] = v_prompt['coreCount'] if v_prompt['coreCount']
3752
+ end
3753
+ if options[:coresPerSocket].empty? && service_plan['coresPerSocket']
3754
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'coresPerSocket', 'type' => 'number', 'fieldLabel' => 'Cores Per Socket', 'required' => false, 'description' => 'Set Core Per Socket', 'defaultValue' => service_plan['coresPerSocket']}], options[:options])
3755
+ plan_options['coresPerSocket'] = v_prompt['coresPerSocket'] if v_prompt['coresPerSocket']
3756
+ end
3748
3757
  end
3749
3758
  end
3750
3759
  plan_options
@@ -3932,4 +3941,27 @@ class Morpheus::Cli::Clusters
3932
3941
  ]
3933
3942
  end
3934
3943
 
3944
+ def load_layout_options(cluster)
3945
+ (@api_client.options.options_for_source('computeTypeLayoutParameters', {layoutId: cluster['layout']['id']})['data'] || []).collect do |it|
3946
+ it['fieldName'] = it['name']
3947
+ it['fieldLabel'] = it['displayName']
3948
+ it['fieldContext'] = 'config.templateParameter'
3949
+ if it['type'] == 'ServicePlan'
3950
+ it['optionSource'] = 'servicePlans'
3951
+ it['type'] = 'select'
3952
+ it['params'] = {:provisionType => '', :zoneId => '', :siteId => '', :resourcePoolId => ''}
3953
+ it['params'][:provisionType] = 'azure' if it['azureServicePlanType']
3954
+ elsif it['type'] == 'Subnet'
3955
+ it['optionSource'] = 'networks'
3956
+ it['type'] = 'select'
3957
+ it['params'] = {:siteId => '', :instanceId => '', :serverId => '', :zonePoolId => '', :zoneRegionId => '', :zoneId => '', :provisionType => ''}
3958
+ if cluster['type'] == 'aks-cluster'
3959
+ it['params'][:provisionType] = 'azure'
3960
+ end
3961
+ else
3962
+ it['type'] = 'text'
3963
+ end
3964
+ it
3965
+ end
3966
+ end
3935
3967
  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