morpheus-cli 6.2.2 → 6.2.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.
- checksums.yaml +4 -4
- data/Dockerfile +1 -1
- data/lib/morpheus/api/api_client.rb +12 -0
- data/lib/morpheus/api/clusters_interface.rb +7 -0
- data/lib/morpheus/api/network_security_server_types_interface.rb +9 -0
- data/lib/morpheus/api/network_server_types_interface.rb +9 -0
- data/lib/morpheus/api/network_servers_interface.rb +4 -0
- data/lib/morpheus/cli/cli_command.rb +1 -0
- data/lib/morpheus/cli/commands/clouds.rb +101 -28
- data/lib/morpheus/cli/commands/clouds_types.rb +141 -0
- data/lib/morpheus/cli/commands/clusters.rb +44 -0
- data/lib/morpheus/cli/commands/instances.rb +1 -0
- data/lib/morpheus/cli/commands/network_dhcp_relays_command.rb +1 -42
- data/lib/morpheus/cli/commands/network_dhcp_servers_command.rb +3 -44
- data/lib/morpheus/cli/commands/network_edge_clusters_command.rb +1 -42
- data/lib/morpheus/cli/commands/network_firewalls_command.rb +1 -41
- data/lib/morpheus/cli/commands/network_pool_servers_command.rb +3 -1
- data/lib/morpheus/cli/commands/network_routers_command.rb +4 -6
- data/lib/morpheus/cli/commands/network_security_server_types.rb +20 -0
- data/lib/morpheus/cli/commands/network_server_types_command.rb +20 -0
- data/lib/morpheus/cli/commands/network_servers_command.rb +368 -0
- data/lib/morpheus/cli/commands/network_transport_zones_command.rb +1 -41
- data/lib/morpheus/cli/commands/networks_command.rb +1 -1
- data/lib/morpheus/cli/commands/options.rb +135 -2
- data/lib/morpheus/cli/mixins/infrastructure_helper.rb +103 -2
- data/lib/morpheus/cli/mixins/networks_helper.rb +62 -0
- data/lib/morpheus/cli/mixins/print_helper.rb +28 -7
- data/lib/morpheus/cli/mixins/prompt_helper.rb +15 -0
- data/lib/morpheus/cli/mixins/provisioning_helper.rb +25 -9
- data/lib/morpheus/cli/mixins/rest_command.rb +1 -1
- data/lib/morpheus/cli/option_types.rb +3 -3
- data/lib/morpheus/cli/version.rb +1 -1
- data/lib/morpheus/logging.rb +6 -3
- metadata +10 -2
@@ -2,6 +2,7 @@ require 'morpheus/cli/cli_command'
|
|
2
2
|
|
3
3
|
class Morpheus::Cli::NetworkFirewallsCommand
|
4
4
|
include Morpheus::Cli::CliCommand
|
5
|
+
include Morpheus::Cli::NetworksHelper
|
5
6
|
include Morpheus::Cli::ProvisioningHelper
|
6
7
|
include Morpheus::Cli::WhoamiHelper
|
7
8
|
|
@@ -685,47 +686,6 @@ class Morpheus::Cli::NetworkFirewallsCommand
|
|
685
686
|
|
686
687
|
private
|
687
688
|
|
688
|
-
def find_network_server(val)
|
689
|
-
if val.to_s =~ /\A\d{1,}\Z/
|
690
|
-
return find_network_server_by_id(val)
|
691
|
-
else
|
692
|
-
if server = find_network_server_by_name(val)
|
693
|
-
return find_network_server_by_id(server['id'])
|
694
|
-
end
|
695
|
-
end
|
696
|
-
end
|
697
|
-
|
698
|
-
def find_network_server_by_id(id)
|
699
|
-
begin
|
700
|
-
json_response = @network_servers_interface.get(id.to_i)
|
701
|
-
return json_response['networkServer']
|
702
|
-
rescue RestClient::Exception => e
|
703
|
-
if e.response && e.response.code == 404
|
704
|
-
print_red_alert "Network Server not found by id #{id}"
|
705
|
-
return nil
|
706
|
-
else
|
707
|
-
raise e
|
708
|
-
end
|
709
|
-
end
|
710
|
-
end
|
711
|
-
|
712
|
-
def find_network_server_by_name(name)
|
713
|
-
servers = search_network_servers(name)
|
714
|
-
if servers.empty?
|
715
|
-
print_red_alert "Network Server not found by name #{name}"
|
716
|
-
return nil
|
717
|
-
elsif servers.size > 1
|
718
|
-
print_red_alert "#{servers.size} network servers found by name #{name}"
|
719
|
-
rows = servers.collect do |it|
|
720
|
-
{id: it['id'], name: it['name']}
|
721
|
-
end
|
722
|
-
puts as_pretty_table(rows, [:id, :name], {color:red})
|
723
|
-
return nil
|
724
|
-
else
|
725
|
-
return servers[0]
|
726
|
-
end
|
727
|
-
end
|
728
|
-
|
729
689
|
def search_network_servers(phrase = nil)
|
730
690
|
@network_servers_interface.list(phrase ? {phrase: phrase.to_s} : {})['networkServers']
|
731
691
|
end
|
@@ -10,11 +10,13 @@ class Morpheus::Cli::NetworkPoolServersCommand
|
|
10
10
|
|
11
11
|
register_subcommands :list, :get, :add, :update, :remove
|
12
12
|
register_subcommands :list_types, :get_type
|
13
|
+
alias_subcommand :types, :'list-types'
|
14
|
+
alias_subcommand :type, :'get-type'
|
13
15
|
|
14
16
|
# RestCommand settings
|
15
17
|
register_interfaces :network_pool_servers, :network_pool_server_types, :clouds, :options
|
16
18
|
set_rest_has_type true
|
17
|
-
|
19
|
+
set_rest_type :network_pool_server_types
|
18
20
|
|
19
21
|
def handle(args)
|
20
22
|
handle_subcommand(args)
|
@@ -301,7 +301,10 @@ class Morpheus::Cli::NetworkRoutersCommand
|
|
301
301
|
|
302
302
|
if router_type['hasNetworkServer']
|
303
303
|
if options[:network_server]
|
304
|
-
|
304
|
+
# This is using network_services instead of network_servers though, hrmm
|
305
|
+
# server = find_network_server(options[:network_server])
|
306
|
+
services = @network_services_interface.list()['networkServices']
|
307
|
+
server = (options[:network_server].to_s =~ /\A\d{1,}\Z/) ? services.find {|it| it['id'].to_i == options[:network_server].to_i} : services.find {|it| it['name'] == options[:network_server]}
|
305
308
|
if server.nil?
|
306
309
|
print_red_alert "Network server #{options[:network_server]} not found"
|
307
310
|
exit 1
|
@@ -2552,11 +2555,6 @@ class Morpheus::Cli::NetworkRoutersCommand
|
|
2552
2555
|
@network_routers_interface.groups
|
2553
2556
|
end
|
2554
2557
|
|
2555
|
-
def find_network_server(val)
|
2556
|
-
services = @network_services_interface.list()['networkServices']
|
2557
|
-
(val.to_s =~ /\A\d{1,}\Z/) ? services.find {|it| it['id'].to_i == val.to_i} : services.find {|it| it['name'] == val}
|
2558
|
-
end
|
2559
|
-
|
2560
2558
|
def find_firewall_rule(router, rule_id)
|
2561
2559
|
rule = nil
|
2562
2560
|
if router['type']['hasFirewallGroups']
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'morpheus/cli/cli_command'
|
2
|
+
|
3
|
+
class Morpheus::Cli::NetworkSecurityServerTypes
|
4
|
+
include Morpheus::Cli::CliCommand
|
5
|
+
include Morpheus::Cli::RestCommand
|
6
|
+
include Morpheus::Cli::InfrastructureHelper
|
7
|
+
|
8
|
+
set_command_description "View network security server types"
|
9
|
+
set_command_name :'network-security-server-types'
|
10
|
+
register_subcommands :list, :get
|
11
|
+
|
12
|
+
# hidden in favor of get-type and list-types
|
13
|
+
set_command_hidden
|
14
|
+
|
15
|
+
# register_interfaces :network_security_server_types
|
16
|
+
|
17
|
+
protected
|
18
|
+
|
19
|
+
end
|
20
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'morpheus/cli/cli_command'
|
2
|
+
|
3
|
+
class Morpheus::Cli::NetworkServerTypes
|
4
|
+
include Morpheus::Cli::CliCommand
|
5
|
+
include Morpheus::Cli::RestCommand
|
6
|
+
include Morpheus::Cli::InfrastructureHelper
|
7
|
+
|
8
|
+
set_command_description "View network server types"
|
9
|
+
set_command_name :'network-server-types'
|
10
|
+
register_subcommands :list, :get
|
11
|
+
|
12
|
+
# hidden in favor of get-type and list-types
|
13
|
+
set_command_hidden
|
14
|
+
|
15
|
+
register_interfaces :network_server_types
|
16
|
+
|
17
|
+
protected
|
18
|
+
|
19
|
+
end
|
20
|
+
|
@@ -0,0 +1,368 @@
|
|
1
|
+
require 'morpheus/cli/cli_command'
|
2
|
+
|
3
|
+
class Morpheus::Cli::NetworkServersCommand
|
4
|
+
include Morpheus::Cli::CliCommand
|
5
|
+
include Morpheus::Cli::RestCommand
|
6
|
+
include Morpheus::Cli::InfrastructureHelper
|
7
|
+
|
8
|
+
set_command_description "View and manage network servers"
|
9
|
+
set_command_name :'network-servers'
|
10
|
+
|
11
|
+
register_subcommands :list, :get, :add, :update, :remove, :refresh
|
12
|
+
register_subcommands :list_types, :get_type
|
13
|
+
alias_subcommand :types, :'list-types'
|
14
|
+
alias_subcommand :type, :'get-type'
|
15
|
+
|
16
|
+
# RestCommand settings
|
17
|
+
register_interfaces :network_servers, :network_server_types, :clouds, :options
|
18
|
+
set_rest_has_type true
|
19
|
+
set_rest_type :network_server_types
|
20
|
+
|
21
|
+
def handle(args)
|
22
|
+
handle_subcommand(args)
|
23
|
+
end
|
24
|
+
|
25
|
+
def add(args)
|
26
|
+
options = {}
|
27
|
+
params = {}
|
28
|
+
ip_range_list = nil
|
29
|
+
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
30
|
+
opts.banner = subcommand_usage("[name]")
|
31
|
+
opts.on('--name VALUE', String, "Name for this network server") do |val|
|
32
|
+
params['name'] = val
|
33
|
+
end
|
34
|
+
opts.on('--type VALUE', String, "Network Server Type code") do |val|
|
35
|
+
params['type'] = val
|
36
|
+
end
|
37
|
+
# opts.on('--enabled [on|off]', String, "Can be used to disable the network server") do |val|
|
38
|
+
# params['enabled'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s.empty?
|
39
|
+
# end
|
40
|
+
# ['name', 'serviceUsername', 'servicePassword', 'servicePort', 'serviceHost', 'serviceUrl', 'serviceMode', 'networkFilter', 'tenantMatch']
|
41
|
+
build_standard_add_options(opts, options)
|
42
|
+
opts.footer = <<-EOT
|
43
|
+
Create a new network server.
|
44
|
+
[name] is required and can be passed as --name instead.
|
45
|
+
Configuration options vary by network server type.
|
46
|
+
EOT
|
47
|
+
end
|
48
|
+
optparse.parse!(args)
|
49
|
+
verify_args!(args:args, optparse:optparse, max: 1)
|
50
|
+
connect(options)
|
51
|
+
|
52
|
+
# support [name] as first argument
|
53
|
+
if args[0]
|
54
|
+
params['name'] = args[0]
|
55
|
+
end
|
56
|
+
|
57
|
+
# merge -O options into normally parsed options
|
58
|
+
params.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
|
59
|
+
|
60
|
+
# construct payload
|
61
|
+
payload = nil
|
62
|
+
if options[:payload]
|
63
|
+
payload = options[:payload]
|
64
|
+
else
|
65
|
+
# prompt for network server options
|
66
|
+
|
67
|
+
# Name
|
68
|
+
if !params['name']
|
69
|
+
params['name'] = prompt_value({'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'description' => 'Name for this network server.'}, params, options[:no_prompt])
|
70
|
+
# params['name'] = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'description' => 'Name for this network server.'}], params, @api_client, {}, options[:no_prompt])['name']
|
71
|
+
end
|
72
|
+
|
73
|
+
# Network Server Type
|
74
|
+
network_type_id = nil
|
75
|
+
# use this optionSource networkServices which is really network service
|
76
|
+
# where the response data is categories, each with a list ofservices (service types)
|
77
|
+
network_services_options = @options_interface.options_for_source('networkServices',{})['data']
|
78
|
+
networking_category = network_services_options.find {|it| it['value'] == 'networkServer'}
|
79
|
+
service_types = networking_category ? networking_category['services'] : []
|
80
|
+
network_server_type_options = service_types.collect {|it| {'name' => it['name'], 'value' => it['code'], 'code' => it['code'], 'id' => it['id']} }
|
81
|
+
if network_server_type_options.empty?
|
82
|
+
raise_command_error "No available network server types found"
|
83
|
+
end
|
84
|
+
# v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'type', 'fieldLabel' => 'Network Server Type', 'type' => 'select', 'optionSource' => 'networkServerTypes', 'required' => true, 'description' => 'Choose a network server type.'}], options, @api_client, {})
|
85
|
+
#network_type_id = v_prompt['type']
|
86
|
+
# allow matching type by id, name or code
|
87
|
+
selected_type = nil
|
88
|
+
if params['type'] && params['type'].to_s =~ /\A\d{1,}\Z/
|
89
|
+
network_type_id = params['type'].to_i
|
90
|
+
selected_type = network_server_type_options.find {|it| it['id'] == network_type_id }
|
91
|
+
if selected_type.nil?
|
92
|
+
raise_command_error "Network Server Type not found by id '#{params['type']}'"
|
93
|
+
end
|
94
|
+
network_type_code = selected_type['code']
|
95
|
+
else
|
96
|
+
network_type_code = prompt_value({'fieldName' => 'type', 'fieldLabel' => 'Network Server Type', 'type' => 'select', 'selectOptions' => network_server_type_options, 'required' => true, 'description' => 'Choose a network server type.'}, params, options[:no_prompt])
|
97
|
+
#network_type_code = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'type', 'fieldLabel' => 'Network Server Type', 'type' => 'select', 'selectOptions' => network_server_type_options, 'required' => true, 'description' => 'Choose a network server type.'}], options, @api_client, {}, options[:no_prompt])['type']
|
98
|
+
selected_type = network_server_type_options.find {|it| it['code'] == network_type_code }
|
99
|
+
if selected_type.nil?
|
100
|
+
raise_command_error "Network Server Type not found by name or code '#{params['type']}'"
|
101
|
+
end
|
102
|
+
network_type_id = selected_type['id']
|
103
|
+
end
|
104
|
+
params['type'] = network_type_code
|
105
|
+
|
106
|
+
# prompt options by type
|
107
|
+
network_server_type = @network_server_types_interface.get(network_type_id.to_i)['networkServerType']
|
108
|
+
# params['type'] = network_server_type['code']
|
109
|
+
option_result = Morpheus::Cli::OptionTypes.prompt(network_server_type['optionTypes'], params.merge({:context_map => {'networkServer' => ''}}), @api_client, {}, options[:no_prompt], true)
|
110
|
+
params.deep_merge!(option_result)
|
111
|
+
payload = {'networkServer' => params}
|
112
|
+
end
|
113
|
+
@network_servers_interface.setopts(options)
|
114
|
+
if options[:dry_run]
|
115
|
+
print_dry_run @network_servers_interface.dry.create(payload)
|
116
|
+
return
|
117
|
+
end
|
118
|
+
json_response = @network_servers_interface.create(payload)
|
119
|
+
render_response(json_response, options, 'networkServer') do
|
120
|
+
network_server = json_response['networkServer']
|
121
|
+
print_green_success "Added network server #{network_server['name']}"
|
122
|
+
_get(network_server['id'], {}, options)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def update(args)
|
127
|
+
options = {}
|
128
|
+
params = {}
|
129
|
+
ip_range_list = nil
|
130
|
+
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
131
|
+
opts.banner = subcommand_usage("[network server] [options]")
|
132
|
+
opts.on('--name VALUE', String, "Name for this network server") do |val|
|
133
|
+
params['name'] = val
|
134
|
+
end
|
135
|
+
# opts.on('--enabled [on|off]', String, "Can be used to enable or disable the network server") do |val|
|
136
|
+
# params['enabled'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s.empty?
|
137
|
+
# end
|
138
|
+
# ['name', 'serviceUsername', 'servicePassword', 'servicePort', 'serviceHost', 'serviceUrl', 'serviceMode', 'networkFilter', 'tenantMatch']
|
139
|
+
build_standard_update_options(opts, options)
|
140
|
+
opts.footer = <<-EOT
|
141
|
+
Update a network server.
|
142
|
+
[network server] is required. This is the name or id of a network server.
|
143
|
+
Configuration options vary by network server type.
|
144
|
+
EOT
|
145
|
+
end
|
146
|
+
optparse.parse!(args)
|
147
|
+
verify_args!(args:args, optparse:optparse, count: 1)
|
148
|
+
connect(options)
|
149
|
+
# find network server to be updated
|
150
|
+
network_server = find_network_server_by_name_or_id(args[0])
|
151
|
+
return 1 if network_server.nil?
|
152
|
+
|
153
|
+
# merge -O options into normally parsed options
|
154
|
+
params.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
|
155
|
+
|
156
|
+
# construct payload
|
157
|
+
payload = nil
|
158
|
+
if options[:payload]
|
159
|
+
payload = options[:payload]
|
160
|
+
else
|
161
|
+
payload = {
|
162
|
+
'networkServer' => params
|
163
|
+
}
|
164
|
+
end
|
165
|
+
@network_servers_interface.setopts(options)
|
166
|
+
if options[:dry_run]
|
167
|
+
print_dry_run @network_servers_interface.dry.update(network_server["id"], payload)
|
168
|
+
return
|
169
|
+
end
|
170
|
+
json_response = @network_servers_interface.update(network_server["id"], payload)
|
171
|
+
render_response(json_response, options, 'networkServer') do
|
172
|
+
network_server = json_response['networkServer']
|
173
|
+
print_green_success "Updated network server #{network_server['name']}"
|
174
|
+
_get(network_server['id'], {}, options)
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
def refresh(args)
|
179
|
+
options = {}
|
180
|
+
params = {}
|
181
|
+
ip_range_list = nil
|
182
|
+
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
183
|
+
opts.banner = subcommand_usage("[network server]")
|
184
|
+
# ['name', 'serviceUsername', 'servicePassword', 'servicePort', 'serviceHost', 'serviceUrl', 'serviceMode', 'networkFilter', 'tenantMatch']
|
185
|
+
build_standard_update_options(opts, options, [:query])
|
186
|
+
opts.footer = <<-EOT
|
187
|
+
Refresh a network server.
|
188
|
+
[network server] is required. This is the name or id of a network server.
|
189
|
+
EOT
|
190
|
+
end
|
191
|
+
optparse.parse!(args)
|
192
|
+
verify_args!(args:args, optparse:optparse, count: 1)
|
193
|
+
connect(options)
|
194
|
+
# find network server to be updated
|
195
|
+
network_server = find_network_server_by_name_or_id(args[0])
|
196
|
+
return 1 if network_server.nil?
|
197
|
+
# construct query parameters
|
198
|
+
params.merge!(parse_query_options(options))
|
199
|
+
# construct payload
|
200
|
+
payload = nil
|
201
|
+
if options[:payload]
|
202
|
+
payload = options[:payload]
|
203
|
+
else
|
204
|
+
payload = options[:options].reject {|k,v| k.is_a?(Symbol) }
|
205
|
+
end
|
206
|
+
@network_servers_interface.setopts(options)
|
207
|
+
if options[:dry_run]
|
208
|
+
print_dry_run @network_servers_interface.dry.refresh(network_server["id"], params, payload)
|
209
|
+
return
|
210
|
+
end
|
211
|
+
json_response = @network_servers_interface.refresh(network_server["id"], params, payload)
|
212
|
+
render_response(json_response, options, 'networkServer') do
|
213
|
+
#network_server = json_response['networkServer']
|
214
|
+
print_green_success "Refreshing network server #{network_server['name']}"
|
215
|
+
#_get(network_server['id'], {}, options)
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
private
|
220
|
+
|
221
|
+
# def render_response_for_get(json_response, options)
|
222
|
+
# # load the type and show fields dynamically based on optionTypes
|
223
|
+
# render_response(json_response, options, rest_object_key) do
|
224
|
+
# type_record = rest_type_find_by_name_or_id(json_response[rest_object_key]['type']['id']) rescue nil
|
225
|
+
# type_option_types = type_record ? (type_record['optionTypes'] || []) : []
|
226
|
+
# record = json_response[rest_object_key]
|
227
|
+
# print_h1 rest_label, [], options
|
228
|
+
# print cyan
|
229
|
+
# columns = rest_column_definitions(options)
|
230
|
+
# if record['credential'] && record['credential']['type'] != 'local'
|
231
|
+
# columns.delete("Username")
|
232
|
+
# columns.delete("Password")
|
233
|
+
# end
|
234
|
+
# columns.delete("Throttle Rate") unless type_option_types.find {|it| it['fieldName'] == 'serviceThrottleRate' }
|
235
|
+
# columns.delete("Disable SSL SNI") unless type_option_types.find {|it| it['fieldName'] == 'ignoreSsl' }
|
236
|
+
# columns.delete("Network Filter") unless type_option_types.find {|it| it['fieldName'] == 'networkFilter' }
|
237
|
+
# columns.delete("Zone Filter") unless type_option_types.find {|it| it['fieldName'] == 'zoneFilter' }
|
238
|
+
# columns.delete("Tenant Match") unless type_option_types.find {|it| it['fieldName'] == 'tenantMatch' }
|
239
|
+
# columns.delete("IP Mode") unless type_option_types.find {|it| it['fieldName'] == 'serviceMode' }
|
240
|
+
# columns.delete("Extra Attributes") unless type_option_types.find {|it| it['fieldName'] == 'extraAttributes' }
|
241
|
+
# columns.delete("App ID") unless type_option_types.find {|it| it['fieldName'] == 'appId' }
|
242
|
+
# columns.delete("Inventory Existing") unless type_option_types.find {|it| it['fieldName'] == 'inventoryExisting' }
|
243
|
+
# columns.delete("Enabled") if record['enabled'].nil? # was not always returned, so don't show false if not present..
|
244
|
+
# print_description_list(columns, record, options)
|
245
|
+
# print reset,"\n"
|
246
|
+
# end
|
247
|
+
# end
|
248
|
+
|
249
|
+
def find_network_server_by_name_or_id(val)
|
250
|
+
if val.to_s =~ /\A\d{1,}\Z/
|
251
|
+
return find_network_server_by_id(val)
|
252
|
+
else
|
253
|
+
return find_network_server_by_name(val)
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
def find_network_server_by_id(id)
|
258
|
+
begin
|
259
|
+
json_response = @network_servers_interface.get(id.to_i)
|
260
|
+
return json_response['networkServer']
|
261
|
+
rescue RestClient::Exception => e
|
262
|
+
if e.response && e.response.code == 404
|
263
|
+
print_red_alert "Network Server not found by id #{id}"
|
264
|
+
return nil
|
265
|
+
else
|
266
|
+
raise e
|
267
|
+
end
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
def find_network_server_by_name(name)
|
272
|
+
json_response = @network_servers_interface.list({name: name.to_s})
|
273
|
+
network_servers = json_response['networkServers']
|
274
|
+
if network_servers.empty?
|
275
|
+
print_red_alert "Network Server not found by name #{name}"
|
276
|
+
return nil
|
277
|
+
elsif network_servers.size > 1
|
278
|
+
print_red_alert "#{network_servers.size} network servers found by name #{name}"
|
279
|
+
# print_networks_table(networks, {color: red})
|
280
|
+
rows = network_servers.collect do |it|
|
281
|
+
{id: it['id'], name: it['name']}
|
282
|
+
end
|
283
|
+
puts as_pretty_table(rows, [:id, :name], {color:red})
|
284
|
+
return nil
|
285
|
+
else
|
286
|
+
return network_servers[0]
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
290
|
+
def add_network_server_option_types()
|
291
|
+
[
|
292
|
+
{'shorthand' => '-t', 'fieldName' => 'type', 'fieldLabel' => 'Network Server Type', 'type' => 'select', 'optionSource' => lambda {|api_client, api_params|
|
293
|
+
api_client.network_server_types.list({max:10000})['networkServerTypes'].collect { |it| {"name" => it["name"], "value" => it["code"]} }
|
294
|
+
}, 'required' => true},
|
295
|
+
{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true},
|
296
|
+
{'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text', 'required' => false},
|
297
|
+
{'fieldName' => 'enabled', 'fieldLabel' => 'Enabled', 'type' => 'checkbox', 'required' => false, 'defaultValue' => true},
|
298
|
+
]
|
299
|
+
end
|
300
|
+
|
301
|
+
def add_network_server_advanced_option_types()
|
302
|
+
[]
|
303
|
+
end
|
304
|
+
|
305
|
+
def update_network_server_option_types()
|
306
|
+
[
|
307
|
+
{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text'},
|
308
|
+
{'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text'},
|
309
|
+
{'fieldName' => 'enabled', 'fieldLabel' => 'Enabled', 'type' => 'checkbox'},
|
310
|
+
]
|
311
|
+
end
|
312
|
+
|
313
|
+
def update_network_server_advanced_option_types()
|
314
|
+
[]
|
315
|
+
end
|
316
|
+
|
317
|
+
def network_server_list_column_definitions(options)
|
318
|
+
{
|
319
|
+
"ID" => 'id',
|
320
|
+
"Name" => lambda {|it| it['name'] },
|
321
|
+
"Type" => lambda {|it| it['type'] ? it['type']['name'] : '' },
|
322
|
+
"URL" => lambda {|it| it['serviceUrl'] },
|
323
|
+
# "Enabled" => lambda {|it| format_boolean(it['enabled']) },
|
324
|
+
"Status" => lambda {|it| format_network_server_status(it) },
|
325
|
+
"Date Created" => lambda {|it| format_local_dt(it['dateCreated']) },
|
326
|
+
"Last Updated" => lambda {|it| format_local_dt(it['lastUpdated']) },
|
327
|
+
}
|
328
|
+
end
|
329
|
+
|
330
|
+
def network_server_column_definitions(options)
|
331
|
+
{
|
332
|
+
"ID" => 'id',
|
333
|
+
"Name" => lambda {|it| it['name'] },
|
334
|
+
"Type" => lambda {|it| it['type'] ? it['type']['name'] : '' },
|
335
|
+
"URL" => lambda {|it| it['serviceUrl'] },
|
336
|
+
#todo: support credentials
|
337
|
+
#"Credentials" => lambda {|it| it['credential'] ? (it['credential']['type'] == 'local' ? '(Local)' : it['credential']['name']) : nil },
|
338
|
+
"Username" => lambda {|it| it['serviceUsername'] },
|
339
|
+
"Password" => lambda {|it| it['servicePassword'] },
|
340
|
+
"Service Mode" => lambda {|it| it['serviceMode'] },
|
341
|
+
"Service Path" => lambda {|it| it['servicePath'] },
|
342
|
+
"Network Filter" => lambda {|it| it['networkFilter'] },
|
343
|
+
"Tenant Match" => lambda {|it| it['tenantMatch'] },
|
344
|
+
#"Enabled" => lambda {|it| format_boolean(it['enabled']) },
|
345
|
+
"Status" => lambda {|it| format_network_server_status(it) },
|
346
|
+
"Date Created" => lambda {|it| format_local_dt(it['dateCreated']) },
|
347
|
+
"Last Updated" => lambda {|it| format_local_dt(it['lastUpdated']) },
|
348
|
+
}
|
349
|
+
end
|
350
|
+
|
351
|
+
def format_network_server_status(network_server, return_color=cyan)
|
352
|
+
out = ""
|
353
|
+
status_string = network_server['status']
|
354
|
+
if status_string.nil? || status_string.empty? || status_string == "unknown"
|
355
|
+
out << "#{white}UNKNOWN#{network_server['statusMessage'] ? "#{return_color} - #{network_server['statusMessage']}" : ''}#{return_color}"
|
356
|
+
# elsif network_server['enabled'] == false
|
357
|
+
# out << "#{red}DISABLED#{network_server['statusMessage'] ? "#{return_color} - #{network_server['statusMessage']}" : ''}#{return_color}"
|
358
|
+
elsif status_string == 'ok'
|
359
|
+
out << "#{green}#{status_string.upcase}#{return_color}"
|
360
|
+
elsif status_string == 'error' || status_string == 'offline'
|
361
|
+
out << "#{red}#{status_string ? status_string.upcase : 'N/A'}#{network_server['statusMessage'] ? "#{return_color} - #{network_server['statusMessage']}" : ''}#{return_color}"
|
362
|
+
else
|
363
|
+
out << "#{yellow}#{status_string.upcase}#{return_color}"
|
364
|
+
end
|
365
|
+
out
|
366
|
+
end
|
367
|
+
|
368
|
+
end
|
@@ -2,6 +2,7 @@ require 'morpheus/cli/cli_command'
|
|
2
2
|
|
3
3
|
class Morpheus::Cli::NetworkTransportZonesCommand
|
4
4
|
include Morpheus::Cli::CliCommand
|
5
|
+
include Morpheus::Cli::NetworksHelper
|
5
6
|
include Morpheus::Cli::ProvisioningHelper
|
6
7
|
include Morpheus::Cli::WhoamiHelper
|
7
8
|
|
@@ -359,47 +360,6 @@ class Morpheus::Cli::NetworkTransportZonesCommand
|
|
359
360
|
end
|
360
361
|
end
|
361
362
|
|
362
|
-
def find_network_server(val)
|
363
|
-
if val.to_s =~ /\A\d{1,}\Z/
|
364
|
-
return find_network_server_by_id(val)
|
365
|
-
else
|
366
|
-
if server = find_network_server_by_name(val)
|
367
|
-
return find_network_server_by_id(server['id'])
|
368
|
-
end
|
369
|
-
end
|
370
|
-
end
|
371
|
-
|
372
|
-
def find_network_server_by_id(id)
|
373
|
-
begin
|
374
|
-
json_response = @network_servers_interface.get(id.to_i)
|
375
|
-
return json_response['networkServer']
|
376
|
-
rescue RestClient::Exception => e
|
377
|
-
if e.response && e.response.code == 404
|
378
|
-
print_red_alert "Network Server not found by id #{id}"
|
379
|
-
return nil
|
380
|
-
else
|
381
|
-
raise e
|
382
|
-
end
|
383
|
-
end
|
384
|
-
end
|
385
|
-
|
386
|
-
def find_network_server_by_name(name)
|
387
|
-
servers = search_network_servers(name)
|
388
|
-
if servers.empty?
|
389
|
-
print_red_alert "Network Server not found by name #{name}"
|
390
|
-
return nil
|
391
|
-
elsif servers.size > 1
|
392
|
-
print_red_alert "#{servers.size} network servers found by name #{name}"
|
393
|
-
rows = servers.collect do |it|
|
394
|
-
{id: it['id'], name: it['name']}
|
395
|
-
end
|
396
|
-
puts as_pretty_table(rows, [:id, :name], {color:red})
|
397
|
-
return nil
|
398
|
-
else
|
399
|
-
return servers[0]
|
400
|
-
end
|
401
|
-
end
|
402
|
-
|
403
363
|
def search_network_servers(phrase = nil)
|
404
364
|
@network_servers_interface.list(phrase ? {phrase: phrase.to_s} : {})['networkServers']
|
405
365
|
end
|
@@ -1542,7 +1542,7 @@ class Morpheus::Cli::NetworksCommand
|
|
1542
1542
|
description_cols = {
|
1543
1543
|
"ID" => 'id',
|
1544
1544
|
"Name" => 'name',
|
1545
|
-
"Code" => '
|
1545
|
+
"Code" => 'code',
|
1546
1546
|
"Description" => 'description',
|
1547
1547
|
# lots more here
|
1548
1548
|
"Createable" => lambda {|it| format_boolean(it['creatable']) },
|