morpheus-cli 5.3.2.2 → 5.4.0

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 (182) hide show
  1. checksums.yaml +4 -4
  2. data/Dockerfile +1 -1
  3. data/lib/morpheus/api/api_client.rb +26 -1
  4. data/lib/morpheus/api/clouds_interface.rb +4 -11
  5. data/lib/morpheus/api/health_interface.rb +37 -3
  6. data/lib/morpheus/api/instances_interface.rb +18 -5
  7. data/lib/morpheus/api/load_balancer_pools_interface.rb +4 -4
  8. data/lib/morpheus/api/load_balancer_profiles_interface.rb +10 -0
  9. data/lib/morpheus/api/load_balancer_virtual_servers_interface.rb +4 -4
  10. data/lib/morpheus/api/network_dhcp_relays_interface.rb +36 -0
  11. data/lib/morpheus/api/network_dhcp_servers_interface.rb +36 -0
  12. data/lib/morpheus/api/network_edge_clusters_interface.rb +26 -0
  13. data/lib/morpheus/api/network_routers_interface.rb +21 -0
  14. data/lib/morpheus/api/network_servers_interface.rb +98 -0
  15. data/lib/morpheus/api/rest_interface.rb +2 -1
  16. data/lib/morpheus/api/roles_interface.rb +7 -0
  17. data/lib/morpheus/api/virtual_images_interface.rb +23 -2
  18. data/lib/morpheus/api/virtual_servers_interface.rb +9 -0
  19. data/lib/morpheus/cli/cli_command.rb +21 -14
  20. data/lib/morpheus/cli/cli_registry.rb +56 -2
  21. data/lib/morpheus/cli/{access_token_command.rb → commands/access_token_command.rb} +1 -1
  22. data/lib/morpheus/cli/{account_groups_command.rb → commands/account_groups_command.rb} +0 -8
  23. data/lib/morpheus/cli/{activity_command.rb → commands/activity_command.rb} +0 -0
  24. data/lib/morpheus/cli/commands/{standard/alias_command.rb → alias_command.rb} +0 -3
  25. data/lib/morpheus/cli/{appliance_settings_command.rb → commands/appliance_settings_command.rb} +0 -0
  26. data/lib/morpheus/cli/{approvals_command.rb → commands/approvals_command.rb} +0 -0
  27. data/lib/morpheus/cli/{apps.rb → commands/apps.rb} +3 -11
  28. data/lib/morpheus/cli/{archives_command.rb → commands/archives_command.rb} +0 -6
  29. data/lib/morpheus/cli/{backup_jobs_command.rb → commands/backup_jobs_command.rb} +0 -0
  30. data/lib/morpheus/cli/{backup_settings_command.rb → commands/backup_settings_command.rb} +0 -0
  31. data/lib/morpheus/cli/{backups_command.rb → commands/backups_command.rb} +0 -0
  32. data/lib/morpheus/cli/commands/{standard/benchmark_command.rb → benchmark_command.rb} +0 -3
  33. data/lib/morpheus/cli/{blueprints_command.rb → commands/blueprints_command.rb} +0 -0
  34. data/lib/morpheus/cli/{boot_scripts_command.rb → commands/boot_scripts_command.rb} +0 -3
  35. data/lib/morpheus/cli/{budgets_command.rb → commands/budgets_command.rb} +0 -0
  36. data/lib/morpheus/cli/commands/{standard/cat_command.rb → cat_command.rb} +0 -0
  37. data/lib/morpheus/cli/{catalog_item_types_command.rb → commands/catalog_item_types_command.rb} +0 -0
  38. data/lib/morpheus/cli/{certificates_command.rb → commands/certificates_command.rb} +0 -0
  39. data/lib/morpheus/cli/commands/change_password_command.rb +132 -0
  40. data/lib/morpheus/cli/{cloud_datastores_command.rb → commands/cloud_datastores_command.rb} +0 -4
  41. data/lib/morpheus/cli/{cloud_folders_command.rb → commands/cloud_folders_command.rb} +0 -4
  42. data/lib/morpheus/cli/{cloud_resource_pools_command.rb → commands/cloud_resource_pools_command.rb} +170 -138
  43. data/lib/morpheus/cli/{clouds.rb → commands/clouds.rb} +22 -47
  44. data/lib/morpheus/cli/{clusters.rb → commands/clusters.rb} +51 -39
  45. data/lib/morpheus/cli/commands/{standard/coloring_command.rb → coloring_command.rb} +0 -2
  46. data/lib/morpheus/cli/{containers_command.rb → commands/containers_command.rb} +0 -7
  47. data/lib/morpheus/cli/commands/{standard/curl_command.rb → curl_command.rb} +0 -3
  48. data/lib/morpheus/cli/{cypher_command.rb → commands/cypher_command.rb} +0 -1
  49. data/lib/morpheus/cli/{dashboard_command.rb → commands/dashboard_command.rb} +0 -2
  50. data/lib/morpheus/cli/commands/{standard/debug_command.rb → debug_command.rb} +0 -1
  51. data/lib/morpheus/cli/{deploy.rb → commands/deploy.rb} +0 -1
  52. data/lib/morpheus/cli/{deployments.rb → commands/deployments.rb} +0 -0
  53. data/lib/morpheus/cli/{deploys.rb → commands/deploys.rb} +0 -1
  54. data/lib/morpheus/cli/{doc.rb → commands/doc.rb} +1 -1
  55. data/lib/morpheus/cli/commands/{standard/echo_command.rb → echo_command.rb} +0 -2
  56. data/lib/morpheus/cli/commands/{standard/edit_profile_command.rb → edit_profile_command.rb} +15 -4
  57. data/lib/morpheus/cli/commands/{standard/edit_rc_command.rb → edit_rc_command.rb} +19 -3
  58. data/lib/morpheus/cli/{environments_command.rb → commands/environments_command.rb} +0 -5
  59. data/lib/morpheus/cli/{execute_schedules_command.rb → commands/execute_schedules_command.rb} +0 -0
  60. data/lib/morpheus/cli/{execution_request_command.rb → commands/execution_request_command.rb} +0 -2
  61. data/lib/morpheus/cli/commands/{standard/exit_command.rb → exit_command.rb} +0 -2
  62. data/lib/morpheus/cli/{file_copy_request_command.rb → commands/file_copy_request_command.rb} +0 -4
  63. data/lib/morpheus/cli/{forgot_password.rb → commands/forgot_password.rb} +0 -0
  64. data/lib/morpheus/cli/commands/{standard/get_prompt_command.rb → get_prompt_command.rb} +0 -3
  65. data/lib/morpheus/cli/{groups.rb → commands/groups.rb} +0 -7
  66. data/lib/morpheus/cli/{guidance_command.rb → commands/guidance_command.rb} +1 -1
  67. data/lib/morpheus/cli/{health_command.rb → commands/health_command.rb} +104 -19
  68. data/lib/morpheus/cli/commands/{standard/history_command.rb → history_command.rb} +0 -3
  69. data/lib/morpheus/cli/{hosts.rb → commands/hosts.rb} +0 -10
  70. data/lib/morpheus/cli/{image_builder_command.rb → commands/image_builder_command.rb} +2 -8
  71. data/lib/morpheus/cli/{instance_types.rb → commands/instance_types.rb} +0 -3
  72. data/lib/morpheus/cli/{instances.rb → commands/instances.rb} +364 -148
  73. data/lib/morpheus/cli/{integrations_command.rb → commands/integrations_command.rb} +0 -0
  74. data/lib/morpheus/cli/{invoices_command.rb → commands/invoices_command.rb} +118 -134
  75. data/lib/morpheus/cli/{jobs_command.rb → commands/jobs_command.rb} +0 -0
  76. data/lib/morpheus/cli/{key_pairs.rb → commands/key_pairs.rb} +0 -6
  77. data/lib/morpheus/cli/{library_cluster_layouts_command.rb → commands/library_cluster_layouts_command.rb} +20 -4
  78. data/lib/morpheus/cli/{library_container_scripts_command.rb → commands/library_container_scripts_command.rb} +0 -0
  79. data/lib/morpheus/cli/{library_container_templates_command.rb → commands/library_container_templates_command.rb} +0 -1
  80. data/lib/morpheus/cli/{library_container_types_command.rb → commands/library_container_types_command.rb} +0 -4
  81. data/lib/morpheus/cli/{library_instance_types_command.rb → commands/library_instance_types_command.rb} +0 -4
  82. data/lib/morpheus/cli/{library_layouts_command.rb → commands/library_layouts_command.rb} +0 -4
  83. data/lib/morpheus/cli/{library_option_lists_command.rb → commands/library_option_lists_command.rb} +3 -7
  84. data/lib/morpheus/cli/{library_option_types_command.rb → commands/library_option_types_command.rb} +0 -4
  85. data/lib/morpheus/cli/{library_spec_templates_command.rb → commands/library_spec_templates_command.rb} +0 -1
  86. data/lib/morpheus/cli/{library_upgrades_command.rb → commands/library_upgrades_command.rb} +0 -4
  87. data/lib/morpheus/cli/{license.rb → commands/license.rb} +0 -3
  88. data/lib/morpheus/cli/commands/load_balancer_pools.rb +111 -0
  89. data/lib/morpheus/cli/{load_balancer_types.rb → commands/load_balancer_types.rb} +0 -4
  90. data/lib/morpheus/cli/commands/load_balancer_virtual_servers.rb +136 -0
  91. data/lib/morpheus/cli/commands/load_balancers.rb +89 -0
  92. data/lib/morpheus/cli/commands/{standard/log_level_command.rb → log_level_command.rb} +0 -3
  93. data/lib/morpheus/cli/{log_settings_command.rb → commands/log_settings_command.rb} +0 -0
  94. data/lib/morpheus/cli/{login.rb → commands/login.rb} +0 -5
  95. data/lib/morpheus/cli/commands/logout.rb +63 -0
  96. data/lib/morpheus/cli/{logs_command.rb → commands/logs_command.rb} +0 -3
  97. data/lib/morpheus/cli/commands/{standard/man_command.rb → man_command.rb} +0 -2
  98. data/lib/morpheus/cli/{monitoring_alerts_command.rb → commands/monitoring_alerts_command.rb} +0 -7
  99. data/lib/morpheus/cli/{monitoring_apps_command.rb → commands/monitoring_apps_command.rb} +0 -1
  100. data/lib/morpheus/cli/{monitoring_checks_command.rb → commands/monitoring_checks_command.rb} +2 -1
  101. data/lib/morpheus/cli/{monitoring_contacts_command.rb → commands/monitoring_contacts_command.rb} +0 -7
  102. data/lib/morpheus/cli/{monitoring_groups_command.rb → commands/monitoring_groups_command.rb} +0 -1
  103. data/lib/morpheus/cli/{monitoring_incidents_command.rb → commands/monitoring_incidents_command.rb} +0 -1
  104. data/lib/morpheus/cli/commands/network_dhcp_relays_command.rb +416 -0
  105. data/lib/morpheus/cli/commands/network_dhcp_servers_command.rb +407 -0
  106. data/lib/morpheus/cli/{network_domains_command.rb → commands/network_domains_command.rb} +0 -4
  107. data/lib/morpheus/cli/commands/network_edge_clusters_command.rb +329 -0
  108. data/lib/morpheus/cli/commands/network_firewalls_command.rb +806 -0
  109. data/lib/morpheus/cli/{network_groups_command.rb → commands/network_groups_command.rb} +0 -4
  110. data/lib/morpheus/cli/{network_pool_servers_command.rb → commands/network_pool_servers_command.rb} +0 -4
  111. data/lib/morpheus/cli/{network_pools_command.rb → commands/network_pools_command.rb} +0 -4
  112. data/lib/morpheus/cli/{network_proxies_command.rb → commands/network_proxies_command.rb} +0 -4
  113. data/lib/morpheus/cli/{network_routers_command.rb → commands/network_routers_command.rb} +291 -12
  114. data/lib/morpheus/cli/{network_services_command.rb → commands/network_services_command.rb} +0 -4
  115. data/lib/morpheus/cli/commands/network_transport_zones_command.rb +452 -0
  116. data/lib/morpheus/cli/{networks_command.rb → commands/networks_command.rb} +21 -21
  117. data/lib/morpheus/cli/{packages_command.rb → commands/packages_command.rb} +0 -2
  118. data/lib/morpheus/cli/{ping.rb → commands/ping.rb} +0 -7
  119. data/lib/morpheus/cli/{policies_command.rb → commands/policies_command.rb} +0 -7
  120. data/lib/morpheus/cli/{power_schedules_command.rb → commands/power_schedules_command.rb} +0 -0
  121. data/lib/morpheus/cli/{preseed_scripts_command.rb → commands/preseed_scripts_command.rb} +0 -3
  122. data/lib/morpheus/cli/{price_sets_command.rb → commands/price_sets_command.rb} +0 -0
  123. data/lib/morpheus/cli/{prices_command.rb → commands/prices_command.rb} +0 -0
  124. data/lib/morpheus/cli/{processes_command.rb → commands/processes_command.rb} +0 -1
  125. data/lib/morpheus/cli/{projects_command.rb → commands/projects_command.rb} +0 -0
  126. data/lib/morpheus/cli/{provisioning_licenses_command.rb → commands/provisioning_licenses_command.rb} +0 -0
  127. data/lib/morpheus/cli/{provisioning_settings_command.rb → commands/provisioning_settings_command.rb} +0 -0
  128. data/lib/morpheus/cli/{recent_activity_command.rb → commands/recent_activity_command.rb} +0 -0
  129. data/lib/morpheus/cli/{remote.rb → commands/remote.rb} +1 -7
  130. data/lib/morpheus/cli/{reports_command.rb → commands/reports_command.rb} +0 -2
  131. data/lib/morpheus/cli/commands/{standard/rm_command.rb → rm_command.rb} +0 -0
  132. data/lib/morpheus/cli/{roles.rb → commands/roles.rb} +244 -39
  133. data/lib/morpheus/cli/{search_command.rb → commands/search_command.rb} +0 -0
  134. data/lib/morpheus/cli/{security_group_rules.rb → commands/security_group_rules.rb} +0 -5
  135. data/lib/morpheus/cli/{security_groups.rb → commands/security_groups.rb} +0 -6
  136. data/lib/morpheus/cli/{service_catalog_command.rb → commands/service_catalog_command.rb} +0 -0
  137. data/lib/morpheus/cli/{service_plans_command.rb → commands/service_plans_command.rb} +0 -0
  138. data/lib/morpheus/cli/commands/{standard/set_prompt_command.rb → set_prompt_command.rb} +0 -3
  139. data/lib/morpheus/cli/{setup.rb → commands/setup.rb} +0 -0
  140. data/lib/morpheus/cli/{shell.rb → commands/shell.rb} +2 -103
  141. data/lib/morpheus/cli/commands/{standard/sleep_command.rb → sleep_command.rb} +0 -2
  142. data/lib/morpheus/cli/commands/{standard/source_command.rb → source_command.rb} +0 -2
  143. data/lib/morpheus/cli/commands/{standard/ssl_verification_command.rb → ssl_verification_command.rb} +0 -3
  144. data/lib/morpheus/cli/{storage_providers_command.rb → commands/storage_providers_command.rb} +0 -4
  145. data/lib/morpheus/cli/{subnets_command.rb → commands/subnets_command.rb} +7 -6
  146. data/lib/morpheus/cli/{tasks.rb → commands/tasks.rb} +25 -6
  147. data/lib/morpheus/cli/commands/{standard/tee_command.rb → tee_command.rb} +0 -0
  148. data/lib/morpheus/cli/{tenants_command.rb → commands/tenants_command.rb} +0 -7
  149. data/lib/morpheus/cli/commands/{standard/update_command.rb → update_command.rb} +0 -1
  150. data/lib/morpheus/cli/{usage_command.rb → commands/usage_command.rb} +0 -0
  151. data/lib/morpheus/cli/{user_groups_command.rb → commands/user_groups_command.rb} +0 -1
  152. data/lib/morpheus/cli/{user_settings_command.rb → commands/user_settings_command.rb} +0 -0
  153. data/lib/morpheus/cli/{user_sources_command.rb → commands/user_sources_command.rb} +0 -1
  154. data/lib/morpheus/cli/{users.rb → commands/users.rb} +0 -7
  155. data/lib/morpheus/cli/{vdi_allocations_command.rb → commands/vdi_allocations_command.rb} +0 -0
  156. data/lib/morpheus/cli/{vdi_apps_command.rb → commands/vdi_apps_command.rb} +0 -0
  157. data/lib/morpheus/cli/{vdi_command.rb → commands/vdi_command.rb} +0 -0
  158. data/lib/morpheus/cli/{vdi_gateways_command.rb → commands/vdi_gateways_command.rb} +0 -0
  159. data/lib/morpheus/cli/{vdi_pools_command.rb → commands/vdi_pools_command.rb} +4 -1
  160. data/lib/morpheus/cli/commands/{standard/version_command.rb → version_command.rb} +0 -0
  161. data/lib/morpheus/cli/{virtual_images.rb → commands/virtual_images.rb} +251 -33
  162. data/lib/morpheus/cli/{whitelabel_settings_command.rb → commands/whitelabel_settings_command.rb} +0 -1
  163. data/lib/morpheus/cli/{whoami.rb → commands/whoami.rb} +0 -4
  164. data/lib/morpheus/cli/{wiki_command.rb → commands/wiki_command.rb} +0 -5
  165. data/lib/morpheus/cli/{workflows.rb → commands/workflows.rb} +0 -3
  166. data/lib/morpheus/cli/mixins/load_balancers_helper.rb +2 -2
  167. data/lib/morpheus/cli/mixins/logs_helper.rb +1 -1
  168. data/lib/morpheus/cli/mixins/print_helper.rb +1 -0
  169. data/lib/morpheus/cli/mixins/provisioning_helper.rb +155 -112
  170. data/lib/morpheus/cli/mixins/rest_command.rb +154 -52
  171. data/lib/morpheus/cli/mixins/secondary_rest_command.rb +575 -0
  172. data/lib/morpheus/cli/option_parser.rb +25 -17
  173. data/lib/morpheus/cli/option_types.rb +96 -32
  174. data/lib/morpheus/cli/version.rb +1 -1
  175. data/lib/morpheus/cli.rb +5 -128
  176. data/lib/morpheus/terminal.rb +5 -6
  177. data/morpheus-cli.gemspec +1 -1
  178. metadata +156 -143
  179. data/lib/morpheus/cli/change_password_command.rb +0 -147
  180. data/lib/morpheus/cli/library.rb +0 -1
  181. data/lib/morpheus/cli/load_balancers.rb +0 -245
  182. data/lib/morpheus/cli/logout.rb +0 -81
@@ -0,0 +1,407 @@
1
+ require 'morpheus/cli/cli_command'
2
+
3
+ class Morpheus::Cli::NetworkDhcpServersCommand
4
+ include Morpheus::Cli::CliCommand
5
+ include Morpheus::Cli::ProvisioningHelper
6
+ include Morpheus::Cli::WhoamiHelper
7
+
8
+ set_command_name :'network-dhcp-servers'
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_servers_interface = @api_client.network_dhcp_servers
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]")
27
+ build_standard_list_options(opts, options)
28
+ opts.footer = "List network DHCP Servers." + "\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
+
40
+ server = find_network_server(args[0])
41
+ if server.nil?
42
+ return 1
43
+ end
44
+
45
+ _list(server, options)
46
+ end
47
+
48
+ def _list(server, options)
49
+ params = parse_list_options(options)
50
+ @network_dhcp_servers_interface.setopts(options)
51
+ if options[:dry_run]
52
+ print_dry_run @network_dhcp_servers_interface.dry.list_dhcp_servers(server['id'], params)
53
+ return
54
+ end
55
+
56
+ if server['type']['hasDhcpServers']
57
+ json_response = @network_dhcp_servers_interface.list_dhcp_servers(server['id'], params)
58
+ render_response(json_response, options, 'networkDhcpServers') do
59
+ print_h1 "Network DHCP Servers For: #{server['name']}"
60
+ print_dhcp_servers(server, json_response)
61
+ end
62
+ return 0, nil
63
+ else
64
+ print_red_alert "DHCP Servers not supported for #{server['type']['name']}"
65
+ return 1, "DHCP Servers not supported for #{server['type']['name']}"
66
+ end
67
+ end
68
+
69
+ def get(args)
70
+ options = {}
71
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
72
+ opts.banner = subcommand_usage("[server] [dhcp_server]")
73
+ build_standard_get_options(opts, options)
74
+ opts.footer = "Display details on a network DHCP Server." + "\n" +
75
+ "[server] is required. This is the name or id of a network server.\n" +
76
+ "[dhcp_server] is required. This is the id of a network DHCP Server.\n"
77
+ end
78
+
79
+ optparse.parse!(args)
80
+ connect(options)
81
+
82
+ verify_args!(args:args, optparse:optparse, count:2)
83
+
84
+ server = find_network_server(args[0])
85
+ if server.nil?
86
+ return 1
87
+ end
88
+
89
+ _get(server, args[1], options)
90
+ end
91
+
92
+ def _get(server, dhcp_server_id, options)
93
+ # params = parse_query_options(options) # todo: use this
94
+ @network_dhcp_servers_interface.setopts(options)
95
+
96
+ if options[:dry_run]
97
+ if dhcp_server_id.to_s =~ /\A\d{1,}\Z/
98
+ print_dry_run @network_dhcp_servers_interface.dry.get_dhcp_server(server['id'], dhcp_server_id.to_i)
99
+ else
100
+ print_dry_run @network_dhcp_servers_interface.dry.list_dhcp_servers(server['id'], {name: dhcp_server_id})
101
+ end
102
+ return
103
+ end
104
+
105
+ if server['type']['hasDhcpServers']
106
+ dhcpServer = find_dhcp_server(server['id'], dhcp_server_id)
107
+ return 1 if dhcpServer.nil?
108
+
109
+ render_response({networkDhcpServer: dhcpServer}, options, 'networkDhcpServer') do
110
+ print_h1 "Network DHCP Server Details"
111
+ print cyan
112
+
113
+ description_cols = {
114
+ "ID" => lambda {|it| it['id']},
115
+ "Name" => lambda {|it| it['name']},
116
+ "Lease Time" => lambda {|it| it['leaseTime']}
117
+ }
118
+
119
+ server['type']['dhcpServerOptionTypes'].sort_by {|it| it['displayOrder']}.each do |option_type|
120
+ if !option_type['fieldLabel'].nil?
121
+ description_cols[option_type['fieldLabel']] = lambda {|it| Morpheus::Cli::OptionTypes.get_option_value(it, option_type, true)}
122
+ end
123
+ end
124
+ print_description_list(description_cols, dhcpServer)
125
+ end
126
+ else
127
+ print_red_alert "DHCP Servers not supported for #{server['type']['name']}"
128
+ end
129
+ println reset
130
+ end
131
+
132
+ def add(args)
133
+ options = {:options=>{}}
134
+ params = {}
135
+ optparse = Morpheus::Cli::OptionParser.new do|opts|
136
+ opts.banner = subcommand_usage("[server]")
137
+ build_standard_add_options(opts, options)
138
+ opts.footer = "Create a network dhcp server." + "\n" +
139
+ "[server] is required. This is the name or id of a network server.\n";
140
+ end
141
+ optparse.parse!(args)
142
+ connect(options)
143
+ verify_args!(args:args, optparse:optparse, count:1)
144
+
145
+ server = find_network_server(args[0])
146
+ if server.nil?
147
+ return 1
148
+ end
149
+
150
+ if !server['type']['hasDhcpServers']
151
+ print_red_alert "DHCP Servers not supported for #{server['type']['name']}"
152
+ return 1
153
+ end
154
+
155
+ payload = nil
156
+ if options[:payload]
157
+ payload = options[:payload]
158
+ else
159
+ option_types = server['type']['dhcpServerOptionTypes'].sort_by {|it| it['displayOrder']}
160
+ # prompt options
161
+ option_result = Morpheus::Cli::OptionTypes.prompt(option_types, options[:options].deep_merge({:context_map => {'networkDhcpServer' => ''}}), @api_client, {'networkServerId' => server['id']}, nil, true)
162
+ payload = {'networkDhcpServer' => params.deep_merge(option_result)}
163
+ # copy all domain level fields to networkDhcpServer
164
+ if payload['networkDhcpServer']['domain']
165
+ payload['networkDhcpServer']['domain'].each do |k,v|
166
+ payload['networkDhcpServer'][k] = v
167
+ end
168
+ end
169
+ payload['networkDhcpServer'].delete('domain')
170
+
171
+ end
172
+
173
+ @network_dhcp_servers_interface.setopts(options)
174
+
175
+ if options[:dry_run]
176
+ print_dry_run @network_dhcp_servers_interface.dry.create_dhcp_server(server['id'], payload)
177
+ return
178
+ end
179
+
180
+ json_response = @network_dhcp_servers_interface.create_dhcp_server(server['id'], payload)
181
+ render_response(json_response, options, 'networkDhcpServer') do
182
+ print_green_success "\nAdded Network DHCP Server #{json_response['id']}\n"
183
+ _get(server, json_response['id'], options)
184
+ end
185
+ end
186
+
187
+ def update(args)
188
+ options = {:options=>{}}
189
+ params = {}
190
+ optparse = Morpheus::Cli::OptionParser.new do|opts|
191
+ opts.banner = subcommand_usage("[server] [dhcp_server]")
192
+ build_standard_update_options(opts, options)
193
+ opts.footer = "Update a network DHCP Server.\n" +
194
+ "[server] is required. This is the name or id of an existing network server.\n" +
195
+ "[dhcp_server] is required. This is the name or id of an existing network DHCP Server."
196
+ end
197
+ optparse.parse!(args)
198
+ verify_args!(args:args, optparse:optparse, count:2)
199
+ connect(options)
200
+
201
+ server = find_network_server(args[0])
202
+ if server.nil?
203
+ return 1
204
+ end
205
+
206
+ if !server['type']['hasDhcpServers']
207
+ print_red_alert "DHCP Servers not supported for #{server['type']['name']}"
208
+ return 1
209
+ end
210
+
211
+ dhcpServer = find_dhcp_server(server['id'], args[1])
212
+ return 1 if dhcpServer.nil?
213
+
214
+ payload = parse_payload(options) || {'networkDhcpServer' => params}
215
+ payload['networkDhcpServer'].deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options] && !payload['networkDhcpServer'].nil?
216
+
217
+ if payload['networkDhcpServer'].empty?
218
+ option_types = server['type']['dhcpServerOptionTypes'].sort_by {|it| it['displayOrder']}
219
+ print_green_success "Nothing to update"
220
+ println cyan
221
+ print Morpheus::Cli::OptionTypes.display_option_types_help(
222
+ option_types,
223
+ {:include_context => true, :context_map => {'networkDhcpServer' => ''}, :color => cyan, :title => "Available DHCP Server Options"}
224
+ )
225
+ exit 1
226
+ end
227
+
228
+ # copy all domain level fields to networkDhcpServer
229
+ if payload['networkDhcpServer']['domain']
230
+ payload['networkDhcpServer']['domain'].each do |k,v|
231
+ payload['networkDhcpServer'][k] = v
232
+ end
233
+ payload['networkDhcpServer'].delete('domain')
234
+ end
235
+
236
+ @network_dhcp_servers_interface.setopts(options)
237
+
238
+ if options[:dry_run]
239
+ print_dry_run @network_dhcp_servers_interface.dry.update_dhcp_server(server['id'], dhcpServer['id'], payload)
240
+ return
241
+ end
242
+
243
+ json_response = @network_dhcp_servers_interface.update_dhcp_server(server['id'], dhcpServer['id'], payload)
244
+ render_response(json_response, options, 'networkDhcpServer') do
245
+ print_green_success "\nUpdated Network DHCP Server #{dhcpServer['id']}\n"
246
+ _get(server, dhcpServer['id'], options)
247
+ end
248
+ end
249
+
250
+ def remove(args)
251
+ options = {}
252
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
253
+ opts.banner = subcommand_usage("[server] [dhcp_server]")
254
+ build_standard_remove_options(opts, options)
255
+ opts.footer = "Delete a network dhcp server.\n" +
256
+ "[server] is required. This is the name or id of an existing network server.\n" +
257
+ "[dhcp_server] is required. This is the name or id of an existing network dhcp server."
258
+ end
259
+ optparse.parse!(args)
260
+ verify_args!(args:args, optparse:optparse, count:2)
261
+ connect(options)
262
+
263
+ server = find_network_server(args[0])
264
+ if server.nil?
265
+ return 1
266
+ end
267
+
268
+ if !server['type']['hasDhcpServers']
269
+ print_red_alert "DHCP Servers not supported for #{server['type']['name']}"
270
+ return 1
271
+ end
272
+
273
+ dhcpServer = find_dhcp_server(server['id'], args[1])
274
+ return 1 if dhcpServer.nil?
275
+
276
+ unless options[:yes] || ::Morpheus::Cli::OptionTypes::confirm("Are you sure you would like to remove the network dhcp server '#{dhcpServer['name']}' from server '#{server['name']}'?", options)
277
+ return 9, "aborted command"
278
+ end
279
+
280
+ @network_dhcp_servers_interface.setopts(options)
281
+
282
+ if options[:dry_run]
283
+ print_dry_run @network_dhcp_servers_interface.dry.delete_dhcp_server(server['id'], dhcpServer['id'])
284
+ return
285
+ end
286
+ json_response = @network_dhcp_servers_interface.delete_dhcp_server(server['id'], dhcpServer['id'])
287
+ render_response(json_response, options, 'networkDhcpServer') do
288
+ print_green_success "\nDeleted Network DHCP Server #{dhcpServer['name']}\n"
289
+ _list(server, options)
290
+ end
291
+ end
292
+
293
+ private
294
+
295
+ def print_dhcp_servers(server, json_response)
296
+ dhcpServers = json_response['networkDhcpServers']
297
+ print cyan
298
+ if dhcpServers.count > 0
299
+ cols = [:id]
300
+ server['type']['dhcpServerOptionTypes'].sort_by {|it| it['displayOrder']}.each do |option_type|
301
+ cols << option_type['fieldLabel']
302
+ end
303
+ rows = dhcpServers.collect do |it|
304
+ row = {
305
+ id: it['id'],
306
+ name: it['name'],
307
+ serverIpAddress: it['serverIpAddress'],
308
+ leaseTime: it['leaseTime'],
309
+ }
310
+ server['type']['dhcpServerOptionTypes'].sort_by {|it| it['displayOrder']}.each do |option_type|
311
+ row[option_type['fieldLabel']] = Morpheus::Cli::OptionTypes.get_option_value(it, option_type, true)
312
+ end
313
+ row
314
+ end
315
+ print as_pretty_table(rows, cols)
316
+ print_results_pagination(json_response)
317
+ else
318
+ println "No DHCP Servers"
319
+ end
320
+ println reset
321
+ end
322
+
323
+ def find_network_server(val)
324
+ if val.to_s =~ /\A\d{1,}\Z/
325
+ return find_network_server_by_id(val)
326
+ else
327
+ if server = find_network_server_by_name(val)
328
+ return find_network_server_by_id(server['id'])
329
+ end
330
+ end
331
+ end
332
+
333
+ def find_network_server_by_id(id)
334
+ begin
335
+ json_response = @network_servers_interface.get(id.to_i)
336
+ return json_response['networkServer']
337
+ rescue RestClient::Exception => e
338
+ if e.response && e.response.code == 404
339
+ print_red_alert "Network Server not found by id #{id}"
340
+ return nil
341
+ else
342
+ raise e
343
+ end
344
+ end
345
+ end
346
+
347
+ def find_network_server_by_name(name)
348
+ json_response = @network_servers_interface.list({phrase: name.to_s})
349
+ servers = json_response['networkServers']
350
+ if servers.empty?
351
+ print_red_alert "Network Server not found by name #{name}"
352
+ return nil
353
+ elsif servers.size > 1
354
+ print_red_alert "#{servers.size} network servers found by name #{name}"
355
+ rows = servers.collect do |it|
356
+ {id: it['id'], name: it['name']}
357
+ end
358
+ puts as_pretty_table(rows, [:id, :name], {color:red})
359
+ return nil
360
+ else
361
+ return servers[0]
362
+ end
363
+ end
364
+
365
+ def find_dhcp_server(server_id, val)
366
+ if val.to_s =~ /\A\d{1,}\Z/
367
+ return find_dhcp_server_by_id(server_id, val)
368
+ else
369
+ if dhcpServer = find_dhcp_server_by_name(server_id, val)
370
+ return find_dhcp_server_by_id(server_id, dhcpServer['id'])
371
+ end
372
+ end
373
+ end
374
+
375
+ def find_dhcp_server_by_id(server_id, dhcp_server_id)
376
+ begin
377
+ json_response = @network_dhcp_servers_interface.get_dhcp_server(server_id, dhcp_server_id.to_i)
378
+ return json_response['networkDhcpServer']
379
+ rescue RestClient::Exception => e
380
+ if e.response && e.response.code == 404
381
+ print_red_alert "Network DHCP Server not found by id #{dhcp_server_id}"
382
+ return nil
383
+ else
384
+ raise e
385
+ end
386
+ end
387
+ end
388
+
389
+ def find_dhcp_server_by_name(server_id, name)
390
+ json_response = @network_dhcp_servers_interface.list_dhcp_servers(server_id, {phrase: name.to_s})
391
+ dhcpServers = json_response['networkDhcpServers']
392
+ if dhcpServers.empty?
393
+ print_red_alert "Network DHCP Server not found by name #{name}"
394
+ return nil
395
+ elsif dhcpServers.size > 1
396
+ print_red_alert "#{dhcpServers.size} network DHCP Servers found by name #{name}"
397
+ rows = dhcpServers.collect do |it|
398
+ {id: it['id'], name: it['name']}
399
+ end
400
+ puts as_pretty_table(rows, [:id, :name], {color:red})
401
+ return nil
402
+ else
403
+ return dhcpServers[0]
404
+ end
405
+ end
406
+
407
+ end
@@ -1,8 +1,4 @@
1
- require 'rest_client'
2
- require 'optparse'
3
- require 'filesize'
4
1
  require 'morpheus/cli/cli_command'
5
- require 'morpheus/cli/mixins/infrastructure_helper'
6
2
 
7
3
  class Morpheus::Cli::NetworkDomainsCommand
8
4
  include Morpheus::Cli::CliCommand