morpheus-cli 6.1.0 → 6.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 57fffe54fd7ee43a1bd35bb15703bb85edca71ec59758374d9556d1743338f90
4
- data.tar.gz: 3472c73b3bc3bf91b84e437eb593b367d86cf8aa32439d370eb6c15de40674fb
3
+ metadata.gz: 3cf8719e8fbab69a6e0de10b9d2920b0394bb55d4928ba4266b82c9430f53658
4
+ data.tar.gz: a518e58f7b2adc050e786ca6f29e0f7832787e5c294c495d5599960f7232aacc
5
5
  SHA512:
6
- metadata.gz: e87cbd833e3633ddf03129d7eabfdb11b12a2956f6c6f66b43a5d42fd41cbb7a209085b6f1008e89ffbcf98251b8d6fc8e0e0d1b845a952b863c0f6add10386b
7
- data.tar.gz: f51460150a7ef907e7c679d75c54830405ef18323c26aa0bcf1bb158c03ff7e05c53114b0e9df2edf4bba337ec6c843871f0fd3bd0ab9ad15ce9ceed836f2bfe
6
+ metadata.gz: 30263a5621c68dc42d8bb1093c67c21a27eab9c440bd12848a345ddee7200d45d8744531418dd9b936529405623a7c464d44b957503903ac0fc1e2bb462b431a
7
+ data.tar.gz: 2bc5e8dc185195a1dc470394d487b1c970c1c8626701803636441ae84a6f138352dcafd07481d39a151c24911a05526dfa8748882ee7b1b48f57c02bba584e54
data/Dockerfile CHANGED
@@ -1,5 +1,5 @@
1
1
  FROM ruby:2.7.5
2
2
 
3
- RUN gem install morpheus-cli -v 6.1.0
3
+ RUN gem install morpheus-cli -v 6.1.1
4
4
 
5
5
  ENTRYPOINT ["morpheus"]
@@ -492,6 +492,10 @@ class Morpheus::APIClient
492
492
  Morpheus::LoadBalancerPoolsInterface.new(common_interface_options).setopts(@options)
493
493
  end
494
494
 
495
+ def load_balancer_pools_secondary
496
+ Morpheus::LoadBalancerPoolsSecondaryInterface.new(common_interface_options).setopts(@options)
497
+ end
498
+
495
499
  def load_balancer_profiles
496
500
  Morpheus::LoadBalancerProfilesInterface.new(common_interface_options).setopts(@options)
497
501
  end
@@ -500,6 +504,10 @@ class Morpheus::APIClient
500
504
  Morpheus::LoadBalancerMonitorsInterface.new(common_interface_options).setopts(@options)
501
505
  end
502
506
 
507
+ def load_balancer_pool_nodes
508
+ Morpheus::LoadBalancerPoolNodesInterface.new(common_interface_options).setopts(@options)
509
+ end
510
+
503
511
  def tasks
504
512
  Morpheus::TasksInterface.new(common_interface_options).setopts(@options)
505
513
  end
@@ -9,7 +9,7 @@ class Morpheus::CypherInterface < Morpheus::APIClient
9
9
 
10
10
  def get(item_key, params={})
11
11
  raise "#{self.class}.get() passed a blank item_key!" if item_key.to_s == ''
12
- url = "#{@base_url}#{base_path}/#{item_key}"
12
+ url = "#{@base_url}#{base_path}/#{escape_item_key(item_key)}"
13
13
  headers = { :params => params, :authorization => "Bearer #{@access_token}" }
14
14
  execute({method: :get, url: url, headers: headers})
15
15
  end
@@ -17,29 +17,35 @@ class Morpheus::CypherInterface < Morpheus::APIClient
17
17
  # list url is the same as get but uses $itemKey/?list=true
18
18
  # method: 'LIST' would be neat though
19
19
  def list(item_key=nil, params={})
20
- url = item_key ? "#{@base_url}#{base_path}/#{item_key}" : "#{@base_url}#{base_path}"
20
+ url = item_key ? "#{@base_url}#{base_path}/#{escape_item_key(item_key)}" : "#{@base_url}#{base_path}"
21
21
  params.merge!({list:'true'}) # ditch this probably
22
22
  headers = { :params => params, :authorization => "Bearer #{@access_token}" }
23
23
  execute({method: :get, url: url, headers: headers})
24
24
  end
25
25
 
26
26
  def create(item_key, params={}, payload={})
27
- url = "#{@base_url}#{base_path}/#{item_key}"
27
+ url = "#{@base_url}#{base_path}/#{escape_item_key(item_key)}"
28
28
  headers = { :params => params, :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
29
29
  execute({method: :post, url: url, headers: headers, payload: payload.to_json})
30
30
  end
31
31
 
32
32
  # update is not even needed I don't think, same as POST
33
33
  def update(item_key, params={}, payload={})
34
- url = "#{@base_url}#{base_path}/#{item_key}"
34
+ url = "#{@base_url}#{base_path}/#{escape_item_key(item_key)}"
35
35
  headers = { :params => params, :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
36
36
  execute({method: :put, url: url, headers: headers, payload: payload.to_json})
37
37
  end
38
38
 
39
39
  def destroy(item_key, params={})
40
- url = "#{@base_url}#{base_path}/#{item_key}"
40
+ url = "#{@base_url}#{base_path}/#{escape_item_key(item_key)}"
41
41
  headers = { :params => params, :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
42
42
  execute({method: :delete, url: url, headers: headers})
43
43
  end
44
44
 
45
+ protected
46
+
47
+ def escape_item_key(item_key)
48
+ item_key.to_s.split("/").collect {|i| CGI::escape(i.to_s) }.join("/")
49
+ end
50
+
45
51
  end
@@ -0,0 +1,8 @@
1
+ require 'morpheus/api/secondary_rest_interface'
2
+
3
+ class Morpheus::LoadBalancerPoolNodesInterface < Morpheus::SecondaryRestInterface
4
+
5
+ def base_path(pool_id)
6
+ "/api/load-balancer-pools/#{pool_id}/nodes"
7
+ end
8
+ end
@@ -1,9 +1,9 @@
1
- require 'morpheus/api/secondary_rest_interface'
1
+ require 'morpheus/api/rest_interface'
2
2
 
3
- class Morpheus::LoadBalancerPoolsInterface < Morpheus::SecondaryRestInterface
3
+ class Morpheus::LoadBalancerPoolsInterface < Morpheus::RestInterface
4
4
 
5
- def base_path(load_balancer_id)
6
- "/api/load-balancers/#{load_balancer_id}/pools"
5
+ def base_path
6
+ "/api/load-balancer-pools"
7
7
  end
8
8
 
9
9
  end
@@ -0,0 +1,9 @@
1
+ require 'morpheus/api/secondary_rest_interface'
2
+
3
+ class Morpheus::LoadBalancerPoolsSecondaryInterface < Morpheus::SecondaryRestInterface
4
+
5
+ def base_path(load_balancer_id)
6
+ "/api/load-balancers/#{load_balancer_id}/pools"
7
+ end
8
+
9
+ end
@@ -2,10 +2,10 @@ require 'morpheus/api/api_client'
2
2
 
3
3
  class Morpheus::RolesInterface < Morpheus::APIClient
4
4
 
5
- def get(account_id, id)
5
+ def get(account_id, id, params={})
6
6
  raise "#{self.class}.get() passed a blank id!" if id.to_s == ''
7
7
  url = build_url(account_id, id)
8
- headers = { params: {}, authorization: "Bearer #{@access_token}" }
8
+ headers = { params: params, authorization: "Bearer #{@access_token}" }
9
9
  execute(method: :get, url: url, headers: headers)
10
10
  end
11
11
 
@@ -21,24 +21,24 @@ class Morpheus::RolesInterface < Morpheus::APIClient
21
21
  execute(method: :get, url: url, headers: headers)
22
22
  end
23
23
 
24
- def create(account_id, options)
24
+ def create(account_id, options, params={})
25
25
  url = build_url(account_id)
26
26
  headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
27
27
  payload = options
28
- execute(method: :post, url: url, headers: headers, payload: payload.to_json)
28
+ execute(method: :post, url: url, headers: headers, payload: payload.to_json, params: params)
29
29
  end
30
30
 
31
- def update(account_id, id, options)
31
+ def update(account_id, id, options, params={})
32
32
  url = build_url(account_id, id)
33
33
  headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
34
34
  payload = options
35
- execute(method: :put, url: url, headers: headers, payload: payload.to_json)
35
+ execute(method: :put, url: url, headers: headers, payload: payload.to_json, params: params)
36
36
  end
37
37
 
38
- def destroy(account_id, id)
38
+ def destroy(account_id, id, params={})
39
39
  url = build_url(account_id, id)
40
40
  headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
41
- execute(method: :delete, url: url, headers: headers)
41
+ execute(method: :delete, url: url, headers: headers, params: params)
42
42
  end
43
43
 
44
44
  def update_permission(account_id, id, options)
@@ -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}"