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,5 +1,4 @@
1
1
  require 'morpheus/cli/cli_command'
2
- require 'morpheus/cli/mixins/monitoring_helper'
3
2
 
4
3
  class Morpheus::Cli::MonitoringChecksCommand
5
4
  include Morpheus::Cli::CliCommand
@@ -1,11 +1,4 @@
1
- # require 'yaml'
2
- require 'time'
3
- require 'io/console'
4
- require 'rest_client'
5
- require 'optparse'
6
- require 'filesize'
7
1
  require 'morpheus/cli/cli_command'
8
- require 'morpheus/cli/mixins/provisioning_helper'
9
2
 
10
3
  class Morpheus::Cli::MonitoringContactsCommand
11
4
  include Morpheus::Cli::CliCommand
@@ -1,5 +1,4 @@
1
1
  require 'morpheus/cli/cli_command'
2
- require 'morpheus/cli/mixins/monitoring_helper'
3
2
 
4
3
  class Morpheus::Cli::MonitoringGroupsCommand
5
4
  include Morpheus::Cli::CliCommand
@@ -1,5 +1,4 @@
1
1
  require 'morpheus/cli/cli_command'
2
- require 'morpheus/cli/mixins/monitoring_helper'
3
2
 
4
3
  class Morpheus::Cli::MonitoringIncidentsCommand
5
4
  include Morpheus::Cli::CliCommand
@@ -0,0 +1,416 @@
1
+ require 'morpheus/cli/cli_command'
2
+
3
+ class Morpheus::Cli::NetworkDhcpRelaysCommand
4
+ include Morpheus::Cli::CliCommand
5
+ include Morpheus::Cli::ProvisioningHelper
6
+ include Morpheus::Cli::WhoamiHelper
7
+
8
+ set_command_name :'network-dhcp-relays'
9
+ register_subcommands :list, :get, :add, :remove, :update
10
+
11
+ def connect(opts)
12
+ @api_client = establish_remote_appliance_connection(opts)
13
+ @account_interface = @api_client.accounts
14
+ @network_dhcp_relays_interface = @api_client.network_dhcp_relays
15
+ @network_servers_interface = @api_client.network_servers
16
+ @options_interface = @api_client.options
17
+ end
18
+
19
+ def handle(args)
20
+ handle_subcommand(args)
21
+ end
22
+
23
+ def list(args)
24
+ options = {}
25
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
26
+ opts.banner = subcommand_usage("[server] [search]")
27
+ build_standard_list_options(opts, options)
28
+ opts.footer = "List network DHCP Relays." + "\n" +
29
+ "[server] is required. This is the name or id of a network server."
30
+ end
31
+
32
+ optparse.parse!(args)
33
+ connect(options)
34
+
35
+ verify_args!(args:args, optparse:optparse, min:1)
36
+ if args.count > 1
37
+ options[:phrase] = args[1..-1].join(" ")
38
+ end
39
+ server = find_network_server(args[0])
40
+ if server.nil?
41
+ return 1
42
+ end
43
+
44
+ _list(server, options)
45
+ end
46
+
47
+ def _list(server, options)
48
+ params = parse_list_options(options)
49
+ @network_dhcp_relays_interface.setopts(options)
50
+ if options[:dry_run]
51
+ print_dry_run @network_dhcp_relays_interface.dry.list_dhcp_relays(server['id'], params)
52
+ return
53
+ end
54
+
55
+ if server['type']['hasDhcpRelays']
56
+ json_response = @network_dhcp_relays_interface.list_dhcp_relays(server['id'], params)
57
+ render_response(json_response, options, 'networkDhcpRelays') do
58
+ print_h1 "Network DHCP Relays For: #{server['name']}"
59
+ print_dhcp_relays(server, json_response)
60
+ end
61
+ return 0, nil
62
+ else
63
+ print_red_alert "DHCP Relays not supported for #{server['type']['name']}"
64
+ return 1, "DHCP Relays not supported for #{server['type']['name']}"
65
+ end
66
+ end
67
+
68
+ def get(args)
69
+ options = {}
70
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
71
+ opts.banner = subcommand_usage("[server] [dhcp_relay]")
72
+ build_standard_get_options(opts, options)
73
+ opts.footer = "Display details on a network DHCP Relay." + "\n" +
74
+ "[server] is required. This is the name or id of a network server.\n" +
75
+ "[dhcp_relay] is required. This is the id of a network DHCP Relay.\n"
76
+ end
77
+
78
+ optparse.parse!(args)
79
+ connect(options)
80
+
81
+ verify_args!(args:args, optparse:optparse, count:2)
82
+
83
+ server = find_network_server(args[0])
84
+ if server.nil?
85
+ return 1
86
+ end
87
+
88
+ _get(server, args[1], options)
89
+ end
90
+
91
+ def _get(server, dhcp_relay_id, options)
92
+ # params = parse_query_options(options) # todo: use this
93
+ @network_dhcp_relays_interface.setopts(options)
94
+
95
+ if options[:dry_run]
96
+ if dhcp_relay_id.to_s =~ /\A\d{1,}\Z/
97
+ print_dry_run @network_dhcp_relays_interface.dry.get_dhcp_relay(server['id'], dhcp_relay_id.to_i)
98
+ else
99
+ print_dry_run @network_dhcp_relays_interface.dry.list_dhcp_relays(server['id'], {name: dhcp_relay_id})
100
+ end
101
+ return
102
+ end
103
+
104
+ if server['type']['hasDhcpRelays']
105
+ dhcpRelay = find_dhcp_relay(server['id'], dhcp_relay_id)
106
+ return 1 if dhcpRelay.nil?
107
+
108
+ render_response({networkDhcpRelay: dhcpRelay}, options, 'networkDhcpRelay') do
109
+ print_h1 "Network DHCP Relay Details"
110
+ print cyan
111
+
112
+ description_cols = {
113
+ "ID" => lambda {|it| it['id']},
114
+ "Name" => lambda {|it| it['name']}
115
+ }
116
+
117
+ server['type']['dhcpRelayOptionTypes'].sort_by {|it| it['displayOrder']}.each do |option_type|
118
+ description_cols[option_type['fieldLabel']] = lambda {|it| Morpheus::Cli::OptionTypes.get_option_value(it, option_type, true)}
119
+ end
120
+ print_description_list(description_cols, dhcpRelay)
121
+ end
122
+ else
123
+ print_red_alert "DHCP Relays not supported for #{server['type']['name']}"
124
+ end
125
+ println reset
126
+ end
127
+
128
+ def add(args)
129
+ options = {:options=>{}}
130
+ params = {}
131
+ optparse = Morpheus::Cli::OptionParser.new do|opts|
132
+ opts.banner = subcommand_usage("[server]")
133
+ build_standard_add_options(opts, options)
134
+ opts.footer = "Create a network dhcp relay." + "\n" +
135
+ "[server] is required. This is the name or id of a network server.\n";
136
+ end
137
+ optparse.parse!(args)
138
+ connect(options)
139
+ verify_args!(args:args, optparse:optparse, count:1)
140
+
141
+ server = find_network_server(args[0])
142
+ if server.nil?
143
+ return 1
144
+ end
145
+
146
+ if !server['type']['hasDhcpRelays']
147
+ print_red_alert "DHCP Relays not supported for #{server['type']['name']}"
148
+ return 1
149
+ end
150
+
151
+ payload = nil
152
+ if options[:payload]
153
+ payload = options[:payload]
154
+ else
155
+ option_types = server['type']['dhcpRelayOptionTypes'].sort_by {|it| it['displayOrder']}
156
+ # prompt options
157
+ option_result = Morpheus::Cli::OptionTypes.prompt(option_types, options[:options].deep_merge({:context_map => {'networkDhcpRelay' => ''}}), @api_client, {'networkServerId' => server['id']}, nil, true)
158
+ payload = {'networkDhcpRelay' => params.deep_merge(option_result)}
159
+ # copy all domain level fields to networkDhcpRelay
160
+ if payload['networkDhcpRelay']['domain']
161
+ payload['networkDhcpRelay']['domain'].each do |k,v|
162
+ payload['networkDhcpRelay'][k] = v
163
+ end
164
+ end
165
+ payload['networkDhcpRelay'].delete('domain')
166
+
167
+ end
168
+
169
+ @network_dhcp_relays_interface.setopts(options)
170
+
171
+ serverIpAddresses = payload['networkDhcpRelay']['serverIpAddresses']
172
+ if !serverIpAddresses.nil?
173
+ if !serverIpAddresses.kind_of?(Array)
174
+ payload['networkDhcpRelay']['serverIpAddresses'] = serverIpAddresses.to_s.split(',')
175
+ end
176
+ end
177
+
178
+ if options[:dry_run]
179
+ print_dry_run @network_dhcp_relays_interface.dry.create_dhcp_relay(server['id'], payload)
180
+ return
181
+ end
182
+
183
+ json_response = @network_dhcp_relays_interface.create_dhcp_relay(server['id'], payload)
184
+ render_response(json_response, options, 'networkDhcpRelay') do
185
+ print_green_success "\nAdded Network DHCP Relay #{json_response['id']}\n"
186
+ _get(server, json_response['id'], options)
187
+ end
188
+ end
189
+
190
+ def update(args)
191
+ options = {:options=>{}}
192
+ params = {}
193
+ optparse = Morpheus::Cli::OptionParser.new do|opts|
194
+ opts.banner = subcommand_usage("[server] [dhcp_relay]")
195
+ build_standard_update_options(opts, options)
196
+ opts.footer = "Update a network DHCP Relay.\n" +
197
+ "[server] is required. This is the name or id of an existing network server.\n" +
198
+ "[dhcp_relay] is required. This is the name or id of an existing network DHCP Relay."
199
+ end
200
+ optparse.parse!(args)
201
+ verify_args!(args:args, optparse:optparse, count:2)
202
+ connect(options)
203
+
204
+ server = find_network_server(args[0])
205
+ if server.nil?
206
+ return 1
207
+ end
208
+
209
+ if !server['type']['hasDhcpRelays']
210
+ print_red_alert "DHCP Relays not supported for #{server['type']['name']}"
211
+ return 1
212
+ end
213
+
214
+ dhcpRelay = find_dhcp_relay(server['id'], args[1])
215
+ return 1 if dhcpRelay.nil?
216
+
217
+ payload = parse_payload(options) || {'networkDhcpRelay' => params}
218
+ payload['networkDhcpRelay'].deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options] && !payload['networkDhcpRelay'].nil?
219
+
220
+ if payload['networkDhcpRelay'].empty?
221
+ option_types = server['type']['dhcpRelayOptionTypes'].sort_by {|it| it['displayOrder']}
222
+ print_green_success "Nothing to update"
223
+ println cyan
224
+ print Morpheus::Cli::OptionTypes.display_option_types_help(
225
+ option_types,
226
+ {:include_context => true, :context_map => {'networkDhcpRelay' => ''}, :color => cyan, :title => "Available DHCP Relay Options"}
227
+ )
228
+ exit 1
229
+ end
230
+
231
+ # copy all domain level fields to networkDhcpRelay
232
+ if payload['networkDhcpRelay']['domain']
233
+ payload['networkDhcpRelay']['domain'].each do |k,v|
234
+ payload['networkDhcpRelay'][k] = v
235
+ end
236
+ payload['networkDhcpRelay'].delete('domain')
237
+ end
238
+
239
+ @network_dhcp_relays_interface.setopts(options)
240
+
241
+ serverIpAddresses = payload['networkDhcpRelay']['serverIpAddresses']
242
+ if !serverIpAddresses.nil?
243
+ if !serverIpAddresses.kind_of?(Array)
244
+ payload['networkDhcpRelay']['serverIpAddresses'] = serverIpAddresses.to_s.split(',')
245
+ end
246
+ end
247
+
248
+ if options[:dry_run]
249
+ print_dry_run @network_dhcp_relays_interface.dry.update_dhcp_relay(server['id'], dhcpRelay['id'], payload)
250
+ return
251
+ end
252
+
253
+ json_response = @network_dhcp_relays_interface.update_dhcp_relay(server['id'], dhcpRelay['id'], payload)
254
+ render_response(json_response, options, 'networkDhcpRelay') do
255
+ print_green_success "\nUpdated Network DHCP Relay #{dhcpRelay['id']}\n"
256
+ _get(server, dhcpRelay['id'], options)
257
+ end
258
+ end
259
+
260
+ def remove(args)
261
+ options = {}
262
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
263
+ opts.banner = subcommand_usage("[server] [dhcp_relay]")
264
+ build_standard_remove_options(opts, options)
265
+ opts.footer = "Delete a network dhcp relay.\n" +
266
+ "[server] is required. This is the name or id of an existing network server.\n" +
267
+ "[dhcp_relay] is required. This is the name or id of an existing network dhcp relay."
268
+ end
269
+ optparse.parse!(args)
270
+ verify_args!(args:args, optparse:optparse, count:2)
271
+ connect(options)
272
+
273
+ server = find_network_server(args[0])
274
+ if server.nil?
275
+ return 1
276
+ end
277
+
278
+ if !server['type']['hasDhcpRelays']
279
+ print_red_alert "DHCP Relays not supported for #{server['type']['name']}"
280
+ return 1
281
+ end
282
+
283
+ dhcpRelay = find_dhcp_relay(server['id'], args[1])
284
+ return 1 if dhcpRelay.nil?
285
+
286
+ unless options[:yes] || ::Morpheus::Cli::OptionTypes::confirm("Are you sure you would like to remove the network dhcp relay '#{dhcpRelay['name']}' from server '#{server['name']}'?", options)
287
+ return 9, "aborted command"
288
+ end
289
+
290
+ @network_dhcp_relays_interface.setopts(options)
291
+
292
+ if options[:dry_run]
293
+ print_dry_run @network_dhcp_relays_interface.dry.delete_dhcp_relay(server['id'], dhcpRelay['id'])
294
+ return
295
+ end
296
+ json_response = @network_dhcp_relays_interface.delete_dhcp_relay(server['id'], dhcpRelay['id'])
297
+ render_response(json_response, options, 'networkDhcpRelay') do
298
+ print_green_success "\nDeleted Network DHCP Relay #{dhcpRelay['name']}\n"
299
+ _list(server, options)
300
+ end
301
+ end
302
+
303
+ private
304
+
305
+ def print_dhcp_relays(server, json_response)
306
+ dhcpRelays = json_response['networkDhcpRelays']
307
+ print cyan
308
+ if dhcpRelays.count > 0
309
+ cols = [:id]
310
+ server['type']['dhcpRelayOptionTypes'].sort_by {|it| it['displayOrder']}.each do |option_type|
311
+ cols << option_type['fieldLabel']
312
+ end
313
+ rows = dhcpRelays.collect do |it|
314
+ row = {
315
+ id: it['id'],
316
+ name: it['name'],
317
+ serverIpAddresses: it['serverIpAddresses']
318
+ }
319
+ server['type']['dhcpRelayOptionTypes'].sort_by {|it| it['displayOrder']}.each do |option_type|
320
+ row[option_type['fieldLabel']] = Morpheus::Cli::OptionTypes.get_option_value(it, option_type, true)
321
+ end
322
+ row
323
+ end
324
+ print as_pretty_table(rows, cols)
325
+ print_results_pagination(json_response)
326
+ else
327
+ println "No DHCP Relays"
328
+ end
329
+ println reset
330
+ end
331
+
332
+ def find_network_server(val)
333
+ if val.to_s =~ /\A\d{1,}\Z/
334
+ return find_network_server_by_id(val)
335
+ else
336
+ if server = find_network_server_by_name(val)
337
+ return find_network_server_by_id(server['id'])
338
+ end
339
+ end
340
+ end
341
+
342
+ def find_network_server_by_id(id)
343
+ begin
344
+ json_response = @network_servers_interface.get(id.to_i)
345
+ return json_response['networkServer']
346
+ rescue RestClient::Exception => e
347
+ if e.response && e.response.code == 404
348
+ print_red_alert "Network Server not found by id #{id}"
349
+ return nil
350
+ else
351
+ raise e
352
+ end
353
+ end
354
+ end
355
+
356
+ def find_network_server_by_name(name)
357
+ json_response = @network_servers_interface.list({phrase: name.to_s})
358
+ servers = json_response['networkServers']
359
+ if servers.empty?
360
+ print_red_alert "Network Server not found by name #{name}"
361
+ return nil
362
+ elsif servers.size > 1
363
+ print_red_alert "#{servers.size} network servers found by name #{name}"
364
+ rows = servers.collect do |it|
365
+ {id: it['id'], name: it['name']}
366
+ end
367
+ puts as_pretty_table(rows, [:id, :name], {color:red})
368
+ return nil
369
+ else
370
+ return servers[0]
371
+ end
372
+ end
373
+
374
+ def find_dhcp_relay(server_id, val)
375
+ if val.to_s =~ /\A\d{1,}\Z/
376
+ return find_dhcp_relay_by_id(server_id, val)
377
+ else
378
+ if dhcpRelay = find_dhcp_relay_by_name(server_id, val)
379
+ return find_dhcp_relay_by_id(server_id, dhcpRelay['id'])
380
+ end
381
+ end
382
+ end
383
+
384
+ def find_dhcp_relay_by_id(server_id, dhcp_relay_id)
385
+ begin
386
+ json_response = @network_dhcp_relays_interface.get_dhcp_relay(server_id, dhcp_relay_id.to_i)
387
+ return json_response['networkDhcpRelay']
388
+ rescue RestClient::Exception => e
389
+ if e.response && e.response.code == 404
390
+ print_red_alert "Network DHCP Relay not found by id #{dhcp_relay_id}"
391
+ return nil
392
+ else
393
+ raise e
394
+ end
395
+ end
396
+ end
397
+
398
+ def find_dhcp_relay_by_name(server_id, name)
399
+ json_response = @network_dhcp_relays_interface.list_dhcp_relays(server_id, {phrase: name.to_s})
400
+ dhcpRelays = json_response['networkDhcpRelays']
401
+ if dhcpRelays.empty?
402
+ print_red_alert "Network DHCP Relay not found by name #{name}"
403
+ return nil
404
+ elsif dhcpRelays.size > 1
405
+ print_red_alert "#{dhcpRelays.size} network DHCP Relays found by name #{name}"
406
+ rows = dhcpRelays.collect do |it|
407
+ {id: it['id'], name: it['name']}
408
+ end
409
+ puts as_pretty_table(rows, [:id, :name], {color:red})
410
+ return nil
411
+ else
412
+ return dhcpRelays[0]
413
+ end
414
+ end
415
+
416
+ end