morpheus-cli 6.0.2 → 6.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Dockerfile +1 -1
- data/lib/morpheus/api/api_client.rb +8 -0
- data/lib/morpheus/api/backups_interface.rb +4 -0
- data/lib/morpheus/api/cypher_interface.rb +11 -5
- data/lib/morpheus/api/load_balancer_pool_nodes_interface.rb +8 -0
- data/lib/morpheus/api/load_balancer_pools_interface.rb +4 -4
- data/lib/morpheus/api/load_balancer_pools_secondary_interface.rb +9 -0
- data/lib/morpheus/api/roles_interface.rb +8 -8
- data/lib/morpheus/cli/cli_command.rb +115 -2
- data/lib/morpheus/cli/commands/backup_jobs_command.rb +3 -7
- data/lib/morpheus/cli/commands/backups_command.rb +133 -19
- data/lib/morpheus/cli/commands/invoices_command.rb +1 -1
- data/lib/morpheus/cli/commands/load_balancer_pool_nodes.rb +87 -0
- data/lib/morpheus/cli/commands/load_balancer_pools.rb +7 -4
- data/lib/morpheus/cli/commands/networks_command.rb +31 -0
- data/lib/morpheus/cli/commands/roles.rb +403 -586
- data/lib/morpheus/cli/commands/service_catalog_command.rb +77 -103
- data/lib/morpheus/cli/commands/users.rb +46 -2
- data/lib/morpheus/cli/mixins/backups_helper.rb +1 -1
- data/lib/morpheus/cli/mixins/provisioning_helper.rb +6 -6
- data/lib/morpheus/cli/version.rb +1 -1
- metadata +5 -2
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'morpheus/cli/cli_command'
|
2
|
+
|
3
|
+
class Morpheus::Cli::LoadBalancerPoolNodes
|
4
|
+
include Morpheus::Cli::CliCommand
|
5
|
+
include Morpheus::Cli::RestCommand
|
6
|
+
include Morpheus::Cli::SecondaryRestCommand
|
7
|
+
include Morpheus::Cli::LoadBalancersHelper
|
8
|
+
|
9
|
+
set_command_description "View and manage load balancer pool member nodes."
|
10
|
+
set_command_name :'load-balancer-pool-nodes'
|
11
|
+
|
12
|
+
set_rest_key :load_balancer_node
|
13
|
+
set_rest_parent_name :load_balancer_pools
|
14
|
+
set_rest_option_context_map({'loadBalancerNode' => ''})
|
15
|
+
|
16
|
+
register_subcommands :list, :get, :add, :update, :remove
|
17
|
+
register_interfaces :load_balancer_types, :load_balancer_pools
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
def load_balancer_node_list_column_definitions(options)
|
22
|
+
{
|
23
|
+
"ID" => 'id',
|
24
|
+
"Status" => 'status',
|
25
|
+
"Name" => 'name',
|
26
|
+
"IP Address" => 'ipAddress',
|
27
|
+
"Port" => 'port'
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def load_balancer_node_column_definitions(options)
|
32
|
+
{
|
33
|
+
"ID" => 'id',
|
34
|
+
"Name" => 'name',
|
35
|
+
"Description" => 'description',
|
36
|
+
"State" => lambda {|it| it['config']['adminState']},
|
37
|
+
"IP Address" => 'ipAddress',
|
38
|
+
"Port" => 'port',
|
39
|
+
"Weight" => 'weight',
|
40
|
+
"Backup Member" => lambda {|it| format_boolean it['config']['backupMember']},
|
41
|
+
"Max Concurrent Connections" => lambda {|it| it['config']['maxConcurrentConnections']}
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
def load_balancer_node_object_key
|
46
|
+
'loadBalancerNode'
|
47
|
+
end
|
48
|
+
|
49
|
+
def load_balancer_node_list_key
|
50
|
+
'loadBalancerNodes'
|
51
|
+
end
|
52
|
+
|
53
|
+
def load_balancer_node_label
|
54
|
+
'Load Balancer Node'
|
55
|
+
end
|
56
|
+
|
57
|
+
def load_balancer_node_label_plural
|
58
|
+
'Load Balancer Nodes'
|
59
|
+
end
|
60
|
+
|
61
|
+
def format_load_balancer_pool_status(record, return_color=cyan)
|
62
|
+
out = ""
|
63
|
+
status_string = record['status']
|
64
|
+
if status_string.nil? || status_string.empty? || status_string == "unknown"
|
65
|
+
out << "#{white}UNKNOWN#{return_color}"
|
66
|
+
elsif status_string == 'ok'
|
67
|
+
out << "#{green}#{status_string.upcase}#{return_color}"
|
68
|
+
elsif status_string == 'warning'
|
69
|
+
out << "#{yellow}#{status_string.upcase}#{return_color}"
|
70
|
+
else
|
71
|
+
out << "#{red}#{status_string ? status_string.upcase : 'N/A'}#{record['statusMessage'] ? "#{return_color} - #{record['statusMessage']}" : ''}#{return_color}"
|
72
|
+
end
|
73
|
+
out
|
74
|
+
end
|
75
|
+
|
76
|
+
def load_option_types_for_load_balancer_node(type_record, parent_record)
|
77
|
+
load_balancer_pool = parent_record
|
78
|
+
load_balancer_type = find_by_id(:load_balancer_type, load_balancer_pool['loadBalancer']['type']['id'])
|
79
|
+
load_balancer_type['nodeOptionTypes']
|
80
|
+
end
|
81
|
+
|
82
|
+
def find_load_balancer_node_by_name_or_id(parent_id, val)
|
83
|
+
(@load_balancer_pool_nodes_interface.get(parent_id, val)['loadBalancerNode']) rescue nil
|
84
|
+
end
|
85
|
+
## using CliCommand's generic find_by methods
|
86
|
+
|
87
|
+
end
|
@@ -8,12 +8,14 @@ class Morpheus::Cli::LoadBalancerPools
|
|
8
8
|
|
9
9
|
set_command_description "View and manage load balancer pools."
|
10
10
|
set_command_name :'load-balancer-pools'
|
11
|
-
register_subcommands :list, :get, :add, :update, :remove
|
12
|
-
register_interfaces :load_balancer_pools,
|
13
|
-
:load_balancers, :load_balancer_types
|
14
11
|
|
12
|
+
set_rest_interface_name :load_balancer_pools_secondary
|
15
13
|
set_rest_parent_name :load_balancers
|
16
14
|
|
15
|
+
register_subcommands :list, :get, :add, :update, :remove
|
16
|
+
register_interfaces :load_balancers, :load_balancer_types
|
17
|
+
|
18
|
+
|
17
19
|
# set_rest_interface_name :load_balancer_pools
|
18
20
|
# set_parent_rest_interface_name :load_balancers
|
19
21
|
|
@@ -30,6 +32,7 @@ class Morpheus::Cli::LoadBalancerPools
|
|
30
32
|
"Name" => 'name',
|
31
33
|
#"Load Balancer" => lambda {|it| it['loadBalancer'] ? it['loadBalancer']['name'] : '' },
|
32
34
|
"Balancer Mode" => lambda {|it| it['vipBalance'] },
|
35
|
+
"Status" => lambda {|it| format_load_balancer_pool_status(it) }
|
33
36
|
}
|
34
37
|
end
|
35
38
|
|
@@ -68,7 +71,7 @@ class Morpheus::Cli::LoadBalancerPools
|
|
68
71
|
status_string = record['status']
|
69
72
|
if status_string.nil? || status_string.empty? || status_string == "unknown"
|
70
73
|
out << "#{white}UNKNOWN#{return_color}"
|
71
|
-
elsif status_string == 'ok'
|
74
|
+
elsif status_string == 'online' || status_string == 'ok'
|
72
75
|
out << "#{green}#{status_string.upcase}#{return_color}"
|
73
76
|
elsif status_string == 'syncing'
|
74
77
|
out << "#{yellow}#{status_string.upcase}#{return_color}"
|
@@ -222,8 +222,10 @@ class Morpheus::Cli::NetworksCommand
|
|
222
222
|
"Domain" => lambda {|it| it['networkDomain'] ? it['networkDomain']['name'] : '' },
|
223
223
|
"Search Domains" => lambda {|it| it['searchDomains'] },
|
224
224
|
"Pool" => lambda {|it| it['pool'] ? it['pool']['name'] : '' },
|
225
|
+
"IPv6 Pool" => lambda {|it| it['poolIPv6'] ? it['poolIPv6']['name'] : '' },
|
225
226
|
"VPC" => lambda {|it| it['zonePool'] ? it['zonePool']['name'] : '' },
|
226
227
|
"DHCP" => lambda {|it| it['dhcpServer'] ? 'Yes' : 'No' },
|
228
|
+
"IPv6 DHCP" => lambda {|it| it['dhcpServerIPv6'] ? 'Yes' : 'No' },
|
227
229
|
"Active" => lambda {|it| format_boolean(it['active']) },
|
228
230
|
"Allow IP Override" => lambda {|it| it['allowStaticOverride'] ? 'Yes' : 'No' },
|
229
231
|
"Visibility" => lambda {|it| it['visibility'].to_s.capitalize },
|
@@ -381,6 +383,12 @@ class Morpheus::Cli::NetworksCommand
|
|
381
383
|
opts.on('--dhcp-server [on|off]', String, "DHCP Server") do |val|
|
382
384
|
options['dhcpServer'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
|
383
385
|
end
|
386
|
+
opts.on('--dhcp-serverIPv6 [on|off]', String, "IPv6 DHCP Server") do |val|
|
387
|
+
options['dhcpServerIPv6'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
|
388
|
+
end
|
389
|
+
opts.on('--dhcp-server-ipv6 [on|off]', String, "IPv6 DHCP Server") do |val|
|
390
|
+
options['dhcpServerIPv6'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
|
391
|
+
end
|
384
392
|
opts.on('--allow-ip-override [on|off]', String, "Allow IP Override") do |val|
|
385
393
|
options['allowStaticOverride'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
|
386
394
|
end
|
@@ -723,6 +731,15 @@ class Morpheus::Cli::NetworksCommand
|
|
723
731
|
v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'dnsSecondaryIPv6', 'fieldLabel' => 'IPv6 DNS Secondary', 'type' => 'text', 'required' => false, 'description' => ''}], options)
|
724
732
|
payload['network']['dnsSecondaryIPv6'] = v_prompt['dnsSecondaryIPv6']
|
725
733
|
end
|
734
|
+
end
|
735
|
+
# DHCP Server
|
736
|
+
if network_type['dhcpServerEditable'] && payload['network']['dhcpServerIPv6'].nil?
|
737
|
+
if options['dhcpServerIPv6'] != nil
|
738
|
+
payload['network']['dhcpServerIPv6'] = options['dhcpServerIPv6']
|
739
|
+
else
|
740
|
+
v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'dhcpServerIPv6', 'fieldLabel' => 'IPv6 DHCP Server', 'type' => 'checkbox', 'required' => false, 'description' => ''}], options)
|
741
|
+
payload['network']['dhcpServerIPv6'] = v_prompt['dhcpServerIPv6']
|
742
|
+
end
|
726
743
|
end
|
727
744
|
end
|
728
745
|
|
@@ -1003,6 +1020,12 @@ class Morpheus::Cli::NetworksCommand
|
|
1003
1020
|
opts.on('--dhcp-server [on|off]', String, "DHCP Server") do |val|
|
1004
1021
|
options['dhcpServer'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
|
1005
1022
|
end
|
1023
|
+
opts.on('--dhcp-serverIPv6 [on|off]', String, "IPv6 DHCP Server") do |val|
|
1024
|
+
options['dhcpServerIPv6'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
|
1025
|
+
end
|
1026
|
+
opts.on('--dhcp-server-ipv6 [on|off]', String, "IPv6 DHCP Server") do |val|
|
1027
|
+
options['dhcpServerIPv6'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
|
1028
|
+
end
|
1006
1029
|
opts.on('--allow-ip-override [on|off]', String, "Allow IP Override") do |val|
|
1007
1030
|
options['allowStaticOverride'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
|
1008
1031
|
end
|
@@ -1244,6 +1267,14 @@ class Morpheus::Cli::NetworksCommand
|
|
1244
1267
|
# payload['network']['dhcpServer'] = v_prompt['dhcpServer']
|
1245
1268
|
end
|
1246
1269
|
|
1270
|
+
# IPv6 DHCP Server
|
1271
|
+
if options['dhcpServerIPv6'] != nil
|
1272
|
+
payload['network']['dhcpServerIPv6'] = options['dhcpServerIPv6']
|
1273
|
+
else
|
1274
|
+
# v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'dhcpServerIPv6', 'fieldLabel' => 'IPv6 DHCP Server', 'type' => 'checkbox', 'required' => false, 'description' => ''}], options)
|
1275
|
+
# payload['network']['dhcpServerIPv6'] = v_prompt['dhcpServerIPv6']
|
1276
|
+
end
|
1277
|
+
|
1247
1278
|
# Allow IP Override
|
1248
1279
|
if options['allowStaticOverride'] != nil
|
1249
1280
|
payload['network']['allowStaticOverride'] = options['allowStaticOverride']
|