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,5 +1,4 @@
1
1
  require 'morpheus/cli/cli_command'
2
- require 'morpheus/cli/mixins/library_helper'
3
2
 
4
3
  class Morpheus::Cli::LibrarySpecTemplatesCommand
5
4
  include Morpheus::Cli::CliCommand
@@ -1,8 +1,4 @@
1
- require 'io/console'
2
- require 'optparse'
3
- require 'filesize'
4
1
  require 'morpheus/cli/cli_command'
5
- require 'morpheus/cli/mixins/library_helper'
6
2
 
7
3
  class Morpheus::Cli::LibraryUpgradesCommand
8
4
  include Morpheus::Cli::CliCommand
@@ -1,6 +1,3 @@
1
- require 'io/console'
2
- require 'rest_client'
3
- require 'optparse'
4
1
  require 'morpheus/cli/cli_command'
5
2
 
6
3
  class Morpheus::Cli::License
@@ -0,0 +1,71 @@
1
+ require 'morpheus/cli/cli_command'
2
+
3
+ class Morpheus::Cli::LoadBalancerMonitors
4
+ include Morpheus::Cli::CliCommand
5
+ include Morpheus::Cli::RestCommand
6
+ include Morpheus::Cli::SecondaryRestCommand
7
+ include Morpheus::Cli::LoadBalancersHelper
8
+
9
+ set_command_hidden
10
+ set_command_description "View and manage load balancer monitors."
11
+ set_command_name :'load-balancer-monitors'
12
+ register_subcommands :list, :get, :add, :update, :remove
13
+ register_interfaces :load_balancer_monitors,
14
+ :load_balancers, :load_balancer_types
15
+
16
+ set_rest_parent_name :load_balancers
17
+
18
+ # set_rest_interface_name :load_balancer_monitors
19
+ # set_parent_rest_interface_name :load_balancers
20
+
21
+ # todo: a configurable way to load the optionTypes
22
+ # option_types = loadBalancer['monitorOptionTypes']
23
+ # set_rest_has_type true
24
+ # set_rest_type :load_balancer_virtual_server_types
25
+
26
+ protected
27
+
28
+ def load_balancer_monitor_list_column_definitions(options)
29
+ {
30
+ "ID" => 'id',
31
+ "Name" => 'name',
32
+ "Monitor Type" => lambda {|it| it['monitorTypeDisplay'] || it['monitorType'] },
33
+ }
34
+ end
35
+
36
+ def load_balancer_monitor_column_definitions(options)
37
+ {
38
+ "ID" => 'id',
39
+ "Name" => 'name',
40
+ "Load Balancer" => lambda {|it| it['loadBalancer'] ? it['loadBalancer']['name'] : '' },
41
+ "Description" => 'description',
42
+ "Monitor Type" => lambda {|it| it['monitorTypeDisplay'] || it['monitorType'] },
43
+ "Created" => lambda {|it| format_local_dt(it['dateCreated']) },
44
+ "Updated" => lambda {|it| format_local_dt(it['lastUpdated']) }
45
+ }
46
+ end
47
+
48
+ def load_balancer_monitor_object_key
49
+ 'loadBalancerMonitor'
50
+ end
51
+
52
+ def load_balancer_monitor_list_key
53
+ 'loadBalancerMonitors'
54
+ end
55
+
56
+ def load_balancer_monitor_label
57
+ 'Load Balancer Monitor'
58
+ end
59
+
60
+ def load_balancer_monitor_label_plural
61
+ 'Load Balancer Monitors'
62
+ end
63
+
64
+ def load_option_types_for_load_balancer_monitor(type_record, parent_record)
65
+ load_balancer = parent_record
66
+ load_balancer_type_id = load_balancer['type']['id']
67
+ load_balancer_type = find_by_id(:load_balancer_type, load_balancer_type_id)
68
+ load_balancer_type['monitorOptionTypes']
69
+ end
70
+
71
+ end
@@ -0,0 +1,91 @@
1
+ require 'morpheus/cli/cli_command'
2
+
3
+ class Morpheus::Cli::LoadBalancerPools
4
+ include Morpheus::Cli::CliCommand
5
+ include Morpheus::Cli::RestCommand
6
+ include Morpheus::Cli::SecondaryRestCommand
7
+ include Morpheus::Cli::LoadBalancersHelper
8
+
9
+ set_command_hidden
10
+ set_command_description "View and manage load balancer pools."
11
+ set_command_name :'load-balancer-pools'
12
+ register_subcommands :list, :get, :add, :update, :remove
13
+ register_interfaces :load_balancer_pools,
14
+ :load_balancers, :load_balancer_types
15
+
16
+ set_rest_parent_name :load_balancers
17
+
18
+ # set_rest_interface_name :load_balancer_pools
19
+ # set_parent_rest_interface_name :load_balancers
20
+
21
+ # todo: a configurable way to load the optionTypes
22
+ # option_types = loadBalancer['poolOptionTypes']
23
+ # set_rest_has_type true
24
+ # set_rest_type :load_balancer_virtual_server_types
25
+
26
+ protected
27
+
28
+ def load_balancer_pool_list_column_definitions(options)
29
+ {
30
+ "ID" => 'id',
31
+ "Name" => 'name',
32
+ #"Load Balancer" => lambda {|it| it['loadBalancer'] ? it['loadBalancer']['name'] : '' },
33
+ "Balancer Mode" => lambda {|it| it['vipBalance'] },
34
+ }
35
+ end
36
+
37
+ def load_balancer_pool_column_definitions(options)
38
+ {
39
+ "ID" => 'id',
40
+ "Name" => 'name',
41
+ "Load Balancer" => lambda {|it| it['loadBalancer'] ? it['loadBalancer']['name'] : '' },
42
+ "Description" => 'description',
43
+ "Balancer Mode" => lambda {|it| it['vipBalance'] },
44
+ # todo: more properties to show here
45
+ "Status" => lambda {|it| format_load_balancer_pool_status(it) },
46
+ "Created" => lambda {|it| format_local_dt(it['dateCreated']) },
47
+ "Updated" => lambda {|it| format_local_dt(it['lastUpdated']) }
48
+ }
49
+ end
50
+
51
+ def load_balancer_pool_object_key
52
+ 'loadBalancerPool'
53
+ end
54
+
55
+ def load_balancer_pool_list_key
56
+ 'loadBalancerPools'
57
+ end
58
+
59
+ def load_balancer_pool_label
60
+ 'Load Balancer Pool'
61
+ end
62
+
63
+ def load_balancer_pool_label_plural
64
+ 'Load Balancer Pools'
65
+ end
66
+
67
+ def format_load_balancer_pool_status(record, return_color=cyan)
68
+ out = ""
69
+ status_string = record['status']
70
+ if status_string.nil? || status_string.empty? || status_string == "unknown"
71
+ out << "#{white}UNKNOWN#{return_color}"
72
+ elsif status_string == 'ok'
73
+ out << "#{green}#{status_string.upcase}#{return_color}"
74
+ elsif status_string == 'syncing'
75
+ out << "#{yellow}#{status_string.upcase}#{return_color}"
76
+ else
77
+ out << "#{red}#{status_string ? status_string.upcase : 'N/A'}#{record['statusMessage'] ? "#{return_color} - #{record['statusMessage']}" : ''}#{return_color}"
78
+ end
79
+ out
80
+ end
81
+
82
+ def load_option_types_for_load_balancer_pool(type_record, parent_record)
83
+ load_balancer = parent_record
84
+ load_balancer_type_id = load_balancer['type']['id']
85
+ load_balancer_type = find_by_id(:load_balancer_type, load_balancer_type_id)
86
+ load_balancer_type['poolOptionTypes']
87
+ end
88
+
89
+ ## using CliCommand's generic find_by methods
90
+
91
+ end
@@ -0,0 +1,65 @@
1
+ require 'morpheus/cli/cli_command'
2
+
3
+ class Morpheus::Cli::LoadBalancerProfiles
4
+ include Morpheus::Cli::CliCommand
5
+ include Morpheus::Cli::RestCommand
6
+ include Morpheus::Cli::SecondaryRestCommand
7
+ include Morpheus::Cli::LoadBalancersHelper
8
+
9
+ set_command_hidden
10
+ set_command_description "View and manage load balancer profiles."
11
+ set_command_name :'load-balancer-profiles'
12
+ register_subcommands :list, :get, :add, :update, :remove
13
+ register_interfaces :load_balancer_profiles,
14
+ :load_balancers, :load_balancer_types
15
+
16
+ set_rest_parent_name :load_balancers
17
+
18
+ protected
19
+
20
+ def load_balancer_profile_list_column_definitions(options)
21
+ {
22
+ "ID" => 'id',
23
+ "Name" => 'name',
24
+ # "Profile Type" => lambda {|it| it['config']['profileType'] rescue '' },
25
+ "Service Type" => lambda {|it| it['serviceTypeDisplay'] || it['serviceType'] },
26
+ }
27
+ end
28
+
29
+ def load_balancer_profile_column_definitions(options)
30
+ {
31
+ "ID" => 'id',
32
+ "Name" => 'name',
33
+ "Load Balancer" => lambda {|it| it['loadBalancer'] ? it['loadBalancer']['name'] : '' },
34
+ "Description" => 'description',
35
+ # "Profile Type" => lambda {|it| it['config']['profileType'] rescue '' },
36
+ "Service Type" => lambda {|it| it['serviceTypeDisplay'] || it['serviceType'] },
37
+ "Created" => lambda {|it| format_local_dt(it['dateCreated']) },
38
+ "Updated" => lambda {|it| format_local_dt(it['lastUpdated']) }
39
+ }
40
+ end
41
+
42
+ def load_balancer_profile_object_key
43
+ 'loadBalancerProfile'
44
+ end
45
+
46
+ def load_balancer_profile_list_key
47
+ 'loadBalancerProfiles'
48
+ end
49
+
50
+ def load_balancer_profile_label
51
+ 'Load Balancer Profile'
52
+ end
53
+
54
+ def load_balancer_profile_label_plural
55
+ 'Load Balancer Profiles'
56
+ end
57
+
58
+ def load_option_types_for_load_balancer_profile(type_record, parent_record)
59
+ load_balancer = parent_record
60
+ load_balancer_type_id = load_balancer['type']['id']
61
+ load_balancer_type = find_by_id(:load_balancer_type, load_balancer_type_id)
62
+ load_balancer_type['profileOptionTypes']
63
+ end
64
+
65
+ end
@@ -1,7 +1,3 @@
1
- # require 'yaml'
2
- require 'io/console'
3
- require 'rest_client'
4
- require 'optparse'
5
1
  require 'morpheus/cli/cli_command'
6
2
 
7
3
  class Morpheus::Cli::LoadBalancerTypes
@@ -16,16 +12,21 @@ class Morpheus::Cli::LoadBalancerTypes
16
12
 
17
13
  protected
18
14
 
19
- def load_balancer_type_column_definitions
15
+ def load_balancer_type_list_column_definitions(options)
20
16
  {
21
17
  "ID" => 'id',
22
18
  "Name" => 'name',
23
- "Code" => 'code'
19
+ "Code" => 'code',
24
20
  }
25
21
  end
26
22
 
27
- def load_balancer_type_list_column_definitions
28
- load_balancer_type_column_definitions
23
+ def load_balancer_type_column_definitions(options)
24
+ {
25
+ "ID" => 'id',
26
+ "Name" => 'name',
27
+ "Code" => 'code',
28
+ "Creatable" => lambda {|it| format_boolean(it['creatable']) },
29
+ }
29
30
  end
30
31
 
31
32
  # overridden to support name or code
@@ -0,0 +1,156 @@
1
+ require 'morpheus/cli/cli_command'
2
+
3
+ class Morpheus::Cli::LoadBalancerVirtualServers
4
+ include Morpheus::Cli::CliCommand
5
+ include Morpheus::Cli::RestCommand
6
+ include Morpheus::Cli::SecondaryRestCommand
7
+ include Morpheus::Cli::LoadBalancersHelper
8
+
9
+ set_command_hidden
10
+ set_command_description "View and manage load balancer virtual servers."
11
+ set_command_name :'load-balancer-virtual-servers'
12
+ register_subcommands :list, :get, :add, :update, :remove
13
+
14
+ register_interfaces :load_balancer_virtual_servers,
15
+ :load_balancers, :load_balancer_types
16
+
17
+ set_rest_parent_name :load_balancers
18
+ set_rest_arg 'vipName'
19
+
20
+ # overridden to provide global list functionality without requiring parent argument
21
+ def list(args)
22
+ parent_id, parent_record = nil, nil
23
+ params = {}
24
+ options = {}
25
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
26
+ opts.banner = subcommand_usage("[#{rest_parent_arg}] [search]")
27
+ build_list_options(opts, options, params)
28
+ opts.footer = <<-EOT
29
+ List #{rest_label_plural.downcase}.
30
+ [#{rest_parent_arg}] is optional. This is the #{rest_parent_has_name ? 'name or id' : 'id'} of #{a_or_an(rest_parent_label)} #{rest_parent_label.downcase}.
31
+ [search] is optional. This is a search phrase to filter the results.
32
+ EOT
33
+ end
34
+ optparse.parse!(args)
35
+ parent_id = args[0]
36
+ connect(options)
37
+ if parent_id
38
+ args = args[1..-1]
39
+ parent_record = rest_parent_find_by_name_or_id(parent_id)
40
+ if parent_record.nil?
41
+ return 1, "#{rest_parent_label} not found for '#{parent_id}"
42
+ end
43
+ parent_id = parent_record['id']
44
+ end
45
+ parse_list_options!(args, options, params)
46
+ rest_interface.setopts(options)
47
+ if options[:dry_run]
48
+ print_dry_run rest_interface.dry.list(parent_id, params)
49
+ return
50
+ end
51
+ json_response = rest_interface.list(parent_id, params)
52
+ render_response(json_response, options, rest_list_key) do
53
+ records = json_response[rest_list_key]
54
+ print_h1 "Morpheus #{rest_label_plural}"
55
+ if records.nil? || records.empty?
56
+ print cyan,"No #{rest_label_plural.downcase} found.",reset,"\n"
57
+ else
58
+ print as_pretty_table(records, rest_list_column_definitions(options).upcase_keys!, options)
59
+ print_results_pagination(json_response) if json_response['meta']
60
+ end
61
+ print reset,"\n"
62
+ end
63
+ return 0, nil
64
+ end
65
+
66
+ protected
67
+
68
+ def build_list_options(opts, options, params)
69
+ opts.on('--load-balancer LB', String, "Load Balancer Name or ID") do |val|
70
+ options[:load_balancer] = val
71
+ end
72
+ # build_standard_list_options(opts, options)
73
+ super
74
+ end
75
+
76
+ def parse_list_options!(args, options, params)
77
+ parse_parameter_as_resource_id!(:load_balancer, options, params)
78
+ super
79
+ end
80
+
81
+ def load_balancer_virtual_server_list_column_definitions(options)
82
+ {
83
+ "ID" => 'id',
84
+ "Name" => 'vipName',
85
+ "LB" => lambda {|it| it['loadBalancer'] ? it['loadBalancer']['name'] : '' },
86
+ # "Description" => 'description',
87
+ "Instance" => lambda {|it| it['instance'] ? it['instance']['name'] : '(Unassigned)' },
88
+ "Hostname" => lambda {|it| it['vipHostname'] },
89
+ "VIP" => lambda {|it| it['vipAddress'] },
90
+ "Protocol" => lambda {|it| it['vipProtocol'] },
91
+ "Port" => lambda {|it| it['vipPort'] },
92
+ "SSL" => lambda {|it| format_boolean(it['sslEnabled']) },
93
+ "Status" => lambda {|it| format_virtual_server_status(it) },
94
+ }
95
+ end
96
+
97
+ def load_balancer_virtual_server_column_definitions(options)
98
+ {
99
+ "ID" => 'id',
100
+ "Name" => 'vipName',
101
+ "Description" => 'description',
102
+ "LB" => lambda {|it| it['loadBalancer'] ? it['loadBalancer']['name'] : '' },
103
+ "Instance" => lambda {|it| it['instance'] ? it['instance']['name'] : '(Unassigned)' },
104
+ "Hostname" => lambda {|it| it['vipHostname'] },
105
+ "VIP" => lambda {|it| it['vipAddress'] },
106
+ "Protocol" => lambda {|it| it['vipProtocol'] },
107
+ "Port" => lambda {|it| it['vipPort'] },
108
+ "SSL" => lambda {|it| format_boolean(it['sslEnabled']) },
109
+ # todo: more properties to show here
110
+ "Status" => lambda {|it| format_virtual_server_status(it) },
111
+ "Created" => lambda {|it| format_local_dt(it['dateCreated']) },
112
+ "Updated" => lambda {|it| format_local_dt(it['lastUpdated']) }
113
+ }
114
+ end
115
+
116
+ def load_balancer_virtual_server_object_key
117
+ 'loadBalancerInstance'
118
+ end
119
+
120
+ def load_balancer_virtual_server_list_key
121
+ 'loadBalancerInstances'
122
+ end
123
+
124
+ def load_balancer_virtual_server_label
125
+ 'Virtual Server'
126
+ end
127
+
128
+ def load_balancer_virtual_server_label_plural
129
+ 'Virtual Servers'
130
+ end
131
+
132
+ def format_virtual_server_status(virtual_server, return_color=cyan)
133
+ out = ""
134
+ status_string = virtual_server['vipStatus'] || virtual_server['status']
135
+ if status_string.nil? || status_string.empty? || status_string == "unknown"
136
+ out << "#{white}UNKNOWN#{return_color}"
137
+ elsif status_string == 'online'
138
+ out << "#{green}#{status_string.upcase}#{return_color}"
139
+ elsif status_string == 'syncing'
140
+ out << "#{yellow}#{status_string.upcase}#{return_color}"
141
+ else
142
+ out << "#{red}#{status_string ? status_string.upcase : 'N/A'}#{virtual_server['statusMessage'] ? "#{return_color} - #{virtual_server['statusMessage']}" : ''}#{return_color}"
143
+ end
144
+ out
145
+ end
146
+
147
+ def load_option_types_for_load_balancer_virtual_server(type_record, parent_record)
148
+ load_balancer = parent_record
149
+ load_balancer_type_id = load_balancer['type']['id']
150
+ load_balancer_type = find_by_id(:load_balancer_type, load_balancer_type_id)
151
+ load_balancer_type['vipOptionTypes']
152
+ end
153
+
154
+ ## using CliCommand's generic find_by methods
155
+
156
+ end
@@ -0,0 +1,176 @@
1
+ require 'morpheus/cli/cli_command'
2
+
3
+ class Morpheus::Cli::LoadBalancers
4
+ include Morpheus::Cli::CliCommand
5
+ include Morpheus::Cli::RestCommand
6
+ include Morpheus::Cli::LoadBalancersHelper
7
+
8
+ set_command_hidden
9
+ set_command_description "View and manage load balancers."
10
+ set_command_name :'load-balancers'
11
+ register_subcommands :list, :get, :add, :update, :remove, :refresh
12
+
13
+ # deprecated the `load-balancers types` command in 5.3.2, it moved to `load-balancer-types list`
14
+ register_subcommands :types
15
+ set_subcommands_hidden :types
16
+
17
+ # RestCommand settings
18
+ register_interfaces :load_balancers, :load_balancer_types
19
+ set_rest_has_type true
20
+ # set_rest_type :load_balancer_types
21
+
22
+ def render_response_for_get(json_response, options)
23
+ render_response(json_response, options, rest_object_key) do
24
+ record = json_response[rest_object_key]
25
+ print_h1 rest_label, [], options
26
+ print cyan
27
+ print_description_list(rest_column_definitions(options), record, options)
28
+ # show LB Ports
29
+ ports = record['ports']
30
+ if ports && ports.size > 0
31
+ print_h2 "LB Ports", options
32
+ columns = [
33
+ {"ID" => 'id'},
34
+ {"Name" => 'name'},
35
+ #{"Description" => 'description'},
36
+ {"Port" => lambda {|it| it['port'] } },
37
+ {"Protocol" => lambda {|it| it['proxyProtocol'] } },
38
+ {"SSL" => lambda {|it| it['sslEnabled'] ? "Yes (#{it['sslCert'] ? it['sslCert']['name'] : 'none'})" : "No" } },
39
+ ]
40
+ print as_pretty_table(ports, columns, options)
41
+ end
42
+ print reset,"\n"
43
+ end
44
+ end
45
+
46
+ def refresh(args)
47
+ id = args[0]
48
+ record_type = nil
49
+ record_type_id = nil
50
+ options = {}
51
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
52
+ opts.banner = subcommand_usage("[#{rest_arg}] [options]")
53
+ build_standard_update_options(opts, options)
54
+ opts.footer = <<-EOT
55
+ Refresh an existing #{rest_label.downcase}.
56
+ [#{rest_arg}] is required. This is the #{rest_has_name ? 'name or id' : 'id'} of #{a_or_an(rest_label)} #{rest_label.downcase}.
57
+ EOT
58
+ end
59
+ optparse.parse!(args)
60
+ verify_args!(args:args, optparse:optparse, count:1)
61
+ connect(options)
62
+ record = rest_find_by_name_or_id(id)
63
+ if record.nil?
64
+ return 1, "#{rest_name} not found for '#{id}'"
65
+ end
66
+ passed_options = parse_passed_options(options)
67
+ payload = {}
68
+ if options[:payload]
69
+ payload = options[:payload]
70
+ payload.deep_merge!({rest_object_key => passed_options}) unless passed_options.empty?
71
+ else
72
+ record_payload = passed_options
73
+ payload[rest_object_key] = record_payload
74
+ end
75
+ rest_interface.setopts(options)
76
+ if options[:dry_run]
77
+ print_dry_run rest_interface.dry.refresh(record['id'], payload)
78
+ return
79
+ end
80
+ json_response = rest_interface.refresh(record['id'], payload)
81
+ render_response(json_response, options, rest_object_key) do
82
+ print_green_success "Refreshing #{rest_label.downcase} #{record['name'] || record['id']}"
83
+ _get(record["id"], {}, options)
84
+ end
85
+ return 0, nil
86
+ end
87
+
88
+ # deprecated, to be removed in the future.
89
+ def types(args)
90
+ print_error yellow,"[DEPRECATED] The command `load-balancers types` is deprecated and replaced by `load-balancer-types list`.",reset,"\n"
91
+ my_terminal.execute("load-balancer-types list #{args.join(' ')}")
92
+ end
93
+
94
+ protected
95
+
96
+ def load_balancer_list_column_definitions(options)
97
+ {
98
+ "ID" => 'id',
99
+ "Name" => 'name',
100
+ "Type" => lambda {|it| it['type'] ? it['type']['name'] : '' },
101
+ "Cloud" => lambda {|it| it['cloud'] ? it['cloud']['name'] : '' },
102
+ "Host" => lambda {|it| it['host'] }
103
+ }
104
+ end
105
+
106
+ def load_balancer_column_definitions(options)
107
+ {
108
+ "ID" => 'id',
109
+ "Name" => 'name',
110
+ "Description" => 'description',
111
+ "Type" => lambda {|it| it['type'] ? it['type']['name'] : '' },
112
+ "Cloud" => lambda {|it| it['cloud'] ? it['cloud']['name'] : '' },
113
+ "Visibility" => 'visibility',
114
+ "IP" => 'ip',
115
+ "Host" => 'host',
116
+ "Port" => 'port',
117
+ "Username" => 'username',
118
+ # "SSL Enabled" => lambda {|it| format_boolean it['sslEnabled'] },
119
+ # "SSL Cert" => lambda {|it| it['sslCert'] ? it['sslCert']['name'] : '' },
120
+ # "SSL" => lambda {|it| it['sslEnabled'] ? "Yes (#{it['sslCert'] ? it['sslCert']['name'] : 'none'})" : "No" },
121
+ "Created" => lambda {|it| format_local_dt(it['dateCreated']) },
122
+ "Updated" => lambda {|it| format_local_dt(it['lastUpdated']) }
123
+ }
124
+ end
125
+
126
+ # overridden to work with name or code
127
+ # nope, api works with name=code now too
128
+ # def find_load_balancer_type_by_name_or_id(name)
129
+ # load_balancer_type_for_name_or_id(name)
130
+ # end
131
+
132
+ # def add_load_balancer_option_types()
133
+ # [
134
+ # {'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true},
135
+ # {'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text', 'required' => false},
136
+ # {'fieldName' => 'enabled', 'fieldLabel' => 'Enabled', 'type' => 'checkbox', 'required' => false, 'defaultValue' => true},
137
+ # # {'fieldName' => 'type', 'fieldLabel' => 'Storage Server Type', 'type' => 'select', 'optionSource' => 'loadBalancerTypes', 'required' => true},
138
+ # ]
139
+ # end
140
+
141
+ def add_load_balancer_advanced_option_types()
142
+ [
143
+ {'fieldName' => 'visibility', 'fieldLabel' => 'Visibility', 'fieldGroup' => 'Advanced', 'type' => 'select', 'selectOptions' => [{'name' => 'Private', 'value' => 'private'},{'name' => 'Public', 'value' => 'public'}], 'required' => false, 'description' => 'Visibility', 'category' => 'permissions', 'defaultValue' => 'public'},
144
+ {'fieldName' => 'tenants', 'fieldLabel' => 'Tenants', 'fieldGroup' => 'Advanced', 'type' => 'multiSelect', 'optionSource' => lambda { |api_client, api_params|
145
+ api_client.options.options_for_source("allTenants", {})['data']
146
+ }},
147
+ ]
148
+ end
149
+
150
+ # def update_load_balancer_option_types()
151
+ # [
152
+ # {'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text'},
153
+ # {'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text'},
154
+ # {'fieldName' => 'enabled', 'fieldLabel' => 'Enabled', 'type' => 'checkbox'},
155
+ # ]
156
+ # end
157
+
158
+ def update_load_balancer_advanced_option_types()
159
+ add_load_balancer_advanced_option_types()
160
+ end
161
+
162
+ def load_option_types_for_load_balancer(type_record, parent_record)
163
+ load_balancer_type = type_record
164
+ # reload it by id to get optionTypes
165
+ option_types = load_balancer_type['optionTypes']
166
+ if option_types.nil?
167
+ load_balancer_type = find_by_id(:load_balancer_type, load_balancer_type['id'])
168
+ if load_balancer_type.nil?
169
+ raise_command_error("Load balancer type not found for id '#{id}'")
170
+ end
171
+ option_types = load_balancer_type['optionTypes']
172
+ end
173
+ return option_types
174
+ end
175
+
176
+ end
@@ -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::LogLevelCommand
@@ -1,9 +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 'json'
7
2
 
8
3
  class Morpheus::Cli::Login
9
4
  include Morpheus::Cli::CliCommand