morpheus-cli 5.3.1.1 → 5.3.2

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: a64f6250b5cad8827e2d0e11349e21fbb6fedc974503a79fa9a2b1defb7d381a
4
- data.tar.gz: 6ab1fb279210a5b7a5dce73e19061b82dec7872463e38b5848fb7fe49a6891d3
3
+ metadata.gz: e776b0e0602c4de27079e0796d270009b0d3a592d571a41721ac936c7537b94e
4
+ data.tar.gz: 10f231de3b75dc6a16d5433af35a1cbde2931d1871bf2106040ee49a0812091c
5
5
  SHA512:
6
- metadata.gz: 98e1a3b24ad173eb9d8077ae0e0a9a7602beecf42e370e1bc6be5e82a9a52385f2e749c035273c3057f3b3377dbbf4cd9eee1086131fdda55fe46e296d7d7c86
7
- data.tar.gz: 03c1b3f5059084a7c57e68ed6888174aaca554eea319f85d043ed79752470c1487d0ea946b0e9d10244e894e03061e2266036d40a0d3d86692d0ce0c607c6dfb
6
+ metadata.gz: 893fd73648238a2a360273fef6a44654b0011075401743f6be61ba5f32c487f8bc5c5936f440cbcbb6be99ce05888ef99e453545e7f435e834a54ade3062851a
7
+ data.tar.gz: c558b3e31997546f382b44339183431e6d855be77b82e6c85be623c32dcf3333ae0a34c725b19fb317e308d8ec3ca2963de9f51ceba5b3bd658c7ad013ae9d67
data/Dockerfile CHANGED
@@ -1,5 +1,5 @@
1
1
  FROM ruby:2.5.1
2
2
 
3
- RUN gem install morpheus-cli -v 5.3.1.1
3
+ RUN gem install morpheus-cli -v 5.3.2
4
4
 
5
5
  ENTRYPOINT ["morpheus"]
@@ -2,38 +2,50 @@ require 'morpheus/api/api_client'
2
2
 
3
3
  class Morpheus::OptionTypeListsInterface < Morpheus::APIClient
4
4
 
5
- def get(id)
5
+ def base_path
6
+ "/api/library/option-type-lists"
7
+ end
8
+
9
+ def get(id, params={})
6
10
  raise "#{self.class}.get() passed a blank id!" if id.to_s == ''
7
- url = "#{@base_url}/api/library/option-type-lists/#{id}"
8
- headers = { params: {}, authorization: "Bearer #{@access_token}" }
11
+ url = "#{base_path}/#{id}"
12
+ headers = { params: params, authorization: "Bearer #{@access_token}" }
9
13
  opts = {method: :get, url: url, headers: headers}
10
14
  execute(opts)
11
15
  end
12
16
 
13
17
  def list(params={})
14
- url = "#{@base_url}/api/library/option-type-lists"
18
+ url = "#{base_path}"
15
19
  headers = { params: {}, authorization: "Bearer #{@access_token}" }
16
20
  headers[:params].merge!(params)
17
21
  opts = {method: :get, url: url, headers: headers}
18
22
  execute(opts)
19
23
  end
20
24
 
25
+ def list_items(id, params={})
26
+ raise "#{self.class}.get() passed a blank id!" if id.to_s == ''
27
+ url = "#{base_path}/#{id}/items"
28
+ headers = { params: params, authorization: "Bearer #{@access_token}" }
29
+ opts = {method: :get, url: url, headers: headers}
30
+ execute(opts)
31
+ end
32
+
21
33
  def create(payload)
22
- url = "#{@base_url}/api/library/option-type-lists"
34
+ url = "#{base_path}"
23
35
  headers = { :params => {}, :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
24
36
  opts = {method: :post, url: url, headers: headers, payload: payload.to_json}
25
37
  execute(opts)
26
38
  end
27
39
 
28
40
  def update(id, payload)
29
- url = "#{@base_url}/api/library/option-type-lists/#{id}"
41
+ url = "#{base_path}/#{id}"
30
42
  headers = { :params => {}, :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
31
43
  opts = {method: :put, url: url, headers: headers, payload: payload.to_json}
32
44
  execute(opts)
33
45
  end
34
46
 
35
47
  def destroy(id)
36
- url = "#{@base_url}/api/library/option-type-lists/#{id}"
48
+ url = "#{base_path}/#{id}"
37
49
  headers = { :params => {}, :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
38
50
  opts = {method: :delete, url: url, headers: headers}
39
51
  execute(opts)
@@ -41,10 +41,9 @@ class Morpheus::Cli::LibraryClusterLayoutsCommand
41
41
  opts.footer = "List cluster layouts."
42
42
  end
43
43
  optparse.parse!(args)
44
+ # verify_args!(args:args, optparse:optparse, count:0)
44
45
  if args.count > 0
45
- print_error Morpheus::Terminal.angry_prompt
46
- puts_error "wrong number of arguments, expected 0 and got (#{args.count}) #{args.inspect}\n#{optparse}"
47
- return 1
46
+ options[:phrase] = args.join(" ")
48
47
  end
49
48
  connect(options)
50
49
  begin
@@ -25,12 +25,11 @@ class Morpheus::Cli::LibraryContainerScriptsCommand
25
25
  opts.footer = "List container scripts."
26
26
  end
27
27
  optparse.parse!(args)
28
- connect(options)
28
+ # verify_args!(args:args, optparse:optparse, count:0)
29
29
  if args.count > 0
30
- print_error Morpheus::Terminal.angry_prompt
31
- puts_error "wrong number of arguments, expected 0 and got (#{args.count}) #{args.join(', ')}\n#{optparse}"
32
- return 1
30
+ options[:phrase] = args.join(" ")
33
31
  end
32
+ connect(options)
34
33
  begin
35
34
  # construct payload
36
35
  params.merge!(parse_list_options(options))
@@ -26,6 +26,10 @@ class Morpheus::Cli::LibraryContainerTemplatesCommand
26
26
  build_common_options(opts, options, [:list, :json, :yaml, :csv, :fields, :dry_run, :remote])
27
27
  end
28
28
  optparse.parse!(args)
29
+ # verify_args!(args:args, optparse:optparse, count:0)
30
+ if args.count > 0
31
+ options[:phrase] = args.join(" ")
32
+ end
29
33
  connect(options)
30
34
  begin
31
35
  [:phrase, :offset, :max, :sort, :direction, :lastUpdated].each do |k|
@@ -49,10 +49,9 @@ class Morpheus::Cli::LibraryContainerTypesCommand
49
49
  opts.footer = "List node types."
50
50
  end
51
51
  optparse.parse!(args)
52
+ # verify_args!(args:args, optparse:optparse, count:0)
52
53
  if args.count > 0
53
- print_error Morpheus::Terminal.angry_prompt
54
- puts_error "wrong number of arguments, expected 0 and got (#{args.count}) #{args.inspect}\n#{optparse}"
55
- return 1
54
+ options[:phrase] = args.join(" ")
56
55
  end
57
56
  connect(options)
58
57
  begin
@@ -47,10 +47,9 @@ class Morpheus::Cli::LibraryInstanceTypesCommand
47
47
  opts.footer = "List instance types."
48
48
  end
49
49
  optparse.parse!(args)
50
+ # verify_args!(args:args, optparse:optparse, count:0)
50
51
  if args.count > 0
51
- print_error Morpheus::Terminal.angry_prompt
52
- puts_error "wrong number of arguments, expected 0 and got (#{args.count}) #{args.inspect}\n#{optparse}"
53
- return 1
52
+ options[:phrase] = args.join(" ")
54
53
  end
55
54
  connect(options)
56
55
  begin
@@ -59,6 +59,10 @@ class Morpheus::Cli::LibraryLayoutsCommand
59
59
  opts.footer = "List layouts."
60
60
  end
61
61
  optparse.parse!(args)
62
+ # verify_args!(args:args, optparse:optparse, count:0)
63
+ if args.count > 0
64
+ options[:phrase] = args.join(" ")
65
+ end
62
66
  connect(options)
63
67
  begin
64
68
  # construct payload
@@ -9,7 +9,7 @@ class Morpheus::Cli::LibraryOptionListsCommand
9
9
  include Morpheus::Cli::LibraryHelper
10
10
 
11
11
  set_command_name :'library-option-lists'
12
- register_subcommands :list, :get, :add, :update, :remove
12
+ register_subcommands :list, :get, :list_items, :add, :update, :remove
13
13
 
14
14
  def initialize()
15
15
  # @appliance_name, @appliance_url = Morpheus::Cli::Remote.active_appliance
@@ -35,6 +35,10 @@ class Morpheus::Cli::LibraryOptionListsCommand
35
35
  opts.footer = "List option lists."
36
36
  end
37
37
  optparse.parse!(args)
38
+ # verify_args!(args:args, optparse:optparse, count:0)
39
+ if args.count > 0
40
+ options[:phrase] = args.join(" ")
41
+ end
38
42
  connect(options)
39
43
  begin
40
44
  params = {}
@@ -61,16 +65,14 @@ class Morpheus::Cli::LibraryOptionListsCommand
61
65
  id: option_type_list['id'],
62
66
  name: option_type_list['name'],
63
67
  description: option_type_list['description'],
64
- type: option_type_list['type'],
65
- size: option_type_list['listItems'] ? option_type_list['listItems'].size : ''
68
+ type: ((option_type_list['type'] == 'api') ? "#{option_type_list['type']} (#{option_type_list['apiType']})" : option_type_list['type'])
66
69
  }
67
70
  end
68
71
  columns = [
69
72
  :id,
70
73
  :name,
71
74
  :description,
72
- :type,
73
- :size
75
+ :type
74
76
  ]
75
77
  print cyan
76
78
  print as_pretty_table(rows, columns, options)
@@ -90,8 +92,8 @@ class Morpheus::Cli::LibraryOptionListsCommand
90
92
  optparse = Morpheus::Cli::OptionParser.new do |opts|
91
93
  opts.banner = subcommand_usage("[name]")
92
94
  build_standard_get_options(opts, options)
93
- opts.on(nil,'--no-items', "Do not display List Items") do |val|
94
- options[:no_list_items] = true
95
+ opts.on(nil,'--items', "Load and display option list items") do |val|
96
+ options[:list_items] = true
95
97
  end
96
98
  opts.footer = "Get details about an option list.\n" +
97
99
  "[name] is required. This is the name or id of an option list. Supports 1-N [name] arguments."
@@ -108,20 +110,31 @@ class Morpheus::Cli::LibraryOptionListsCommand
108
110
  end
109
111
 
110
112
  def _get(id, options)
111
-
113
+ params = {}
114
+ params.merge!(parse_query_options(options))
112
115
  begin
113
116
  @option_type_lists_interface.setopts(options)
114
117
  if options[:dry_run]
115
118
  if id.to_s =~ /\A\d{1,}\Z/
116
- print_dry_run @option_type_lists_interface.dry.get(id.to_i)
119
+ print_dry_run @option_type_lists_interface.dry.get(id.to_i, params)
117
120
  else
118
- print_dry_run @option_type_lists_interface.dry.list({name: id})
121
+ print_dry_run @option_type_lists_interface.dry.list(params.merge({name: id}))
119
122
  end
120
123
  return
121
124
  end
122
125
  option_type_list = find_option_type_list_by_name_or_id(id)
123
126
  return 1 if option_type_list.nil?
124
-
127
+ list_items = nil
128
+ if options[:list_items]
129
+ list_items = option_type_list['listItems']
130
+ if list_items.nil?
131
+ begin
132
+ list_items = @option_type_lists_interface.list_items(option_type_list['id'])['listItems']
133
+ rescue => e
134
+ puts_error "Failed to load option list items: #{e.message}"
135
+ end
136
+ end
137
+ end
125
138
  json_response = {'optionTypeList' => option_type_list}
126
139
  render_result = render_with_format(json_response, options, 'optionTypeList')
127
140
  return 0 if render_result
@@ -142,12 +155,14 @@ class Morpheus::Cli::LibraryOptionListsCommand
142
155
  "ID" => 'id',
143
156
  "Name" => 'name',
144
157
  "Description" => 'description',
145
- "Type" => lambda {|it| it['type'].to_s.capitalize },
158
+ "Type" => lambda {|it| it['type'] },
159
+ "API Type" => lambda {|it| it['apiType'] },
146
160
  "Source URL" => 'sourceUrl',
147
161
  "Real Time" => lambda {|it| format_boolean it['realTime'] },
148
162
  "Ignore SSL Errors" => lambda {|it| format_boolean it['ignoreSSLErrors'] },
149
163
  "Source Method" => lambda {|it| it['sourceMethod'].to_s.upcase }
150
164
  }
165
+ option_list_columns.delete("API Type") if option_type_list['type'] != 'api'
151
166
  source_headers = []
152
167
  if option_type_list['config'] && option_type_list['config']['sourceHeaders']
153
168
  source_headers = option_type_list['config']['sourceHeaders'].collect do |header|
@@ -174,12 +189,13 @@ class Morpheus::Cli::LibraryOptionListsCommand
174
189
  print reset,"#{option_type_list['requestScript']}","\n",reset
175
190
  end
176
191
  end
177
- if options[:no_list_items] != true
178
- list_items = option_type_list['listItems']
192
+ if options[:list_items]
193
+ print_h2 "List Items"
179
194
  if list_items && list_items.size > 0
180
- print_h2 "List Items"
181
195
  print as_pretty_table(list_items, [:name, :value], options)
182
196
  print_results_pagination({size: list_items.size, total: list_items.size})
197
+ else
198
+ print cyan,"No list items found.",reset,"\n"
183
199
  end
184
200
  end
185
201
  print reset,"\n"
@@ -189,6 +205,42 @@ class Morpheus::Cli::LibraryOptionListsCommand
189
205
  end
190
206
  end
191
207
 
208
+ def list_items(args)
209
+ params = {}
210
+ options = {}
211
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
212
+ opts.banner = subcommand_usage("[name]")
213
+ build_standard_get_options(opts, options)
214
+ opts.footer = "List items for an option list.\n" +
215
+ "[name] is required. This is the name or id of an option list."
216
+ end
217
+ optparse.parse!(args)
218
+ verify_args!(args:args, optparse:optparse, count:1)
219
+ connect(options)
220
+ option_type_list = find_option_type_list_by_name_or_id(args[0])
221
+ return 1 if option_type_list.nil?
222
+
223
+ params.merge!(parse_list_options(options))
224
+ @option_type_lists_interface.setopts(options)
225
+ if options[:dry_run]
226
+ print_dry_run @option_type_lists_interface.dry.list_items(option_type_list['id'], params)
227
+ return
228
+ end
229
+ json_response = @option_type_lists_interface.list_items(option_type_list['id'], params)
230
+ list_items = json_response['listItems']
231
+ render_response(json_response, options, "listItems") do
232
+ print_h2 "List Items"
233
+ if list_items && list_items.size > 0
234
+ print as_pretty_table(list_items, [:name, :value], options)
235
+ print_results_pagination({size: list_items.size, total: list_items.size})
236
+ else
237
+ print cyan,"No list items found.",reset,"\n"
238
+ end
239
+ print reset,"\n"
240
+ end
241
+ return 0, nil
242
+ end
243
+
192
244
  def add(args)
193
245
  options = {}
194
246
  my_option_types = nil
@@ -373,7 +425,7 @@ class Morpheus::Cli::LibraryOptionListsCommand
373
425
  {'dependsOnCode' => 'optionTypeList.type:rest', 'fieldName' => 'realTime', 'fieldLabel' => 'Real Time', 'type' => 'checkbox', 'defaultValue' => false, 'displayOrder' => 7},
374
426
  {'dependsOnCode' => 'optionTypeList.type:rest', 'fieldName' => 'sourceMethod', 'fieldLabel' => 'Source Method', 'type' => 'select', 'selectOptions' => [{'name' => 'GET', 'value' => 'GET'}, {'name' => 'POST', 'value' => 'POST'}], 'defaultValue' => 'GET', 'required' => true, 'displayOrder' => 8},
375
427
  # sourceHeaders component (is done afterwards manually)
376
- {'dependsOnCode' => 'optionTypeList.type:api', 'fieldName' => 'apiType', 'fieldLabel' => 'Option List', 'type' => 'select', 'optionSource' => 'apiOptionLists', 'required' => true, 'description' => 'The code of the api list to use, eg. clouds, servers, etc.', 'displayOrder' => 9},
428
+ {'dependsOnCode' => 'optionTypeList.type:api', 'fieldName' => 'apiType', 'fieldLabel' => 'Option List', 'type' => 'select', 'optionSource' => 'apiOptionLists', 'required' => true, 'description' => 'The code of the api option list to use, eg. clouds, environments, groups, instances, instance-wiki, networks, servicePlans, resourcePools, securityGroups, servers, server-wiki', 'displayOrder' => 9},
377
429
  {'dependsOnCode' => 'optionTypeList.type:ldap', 'fieldName' => 'sourceUsername', 'fieldLabel' => 'Source Username', 'type' => 'text', 'description' => "An LDAP Username for use when type is 'ldap'.", 'displayOrder' => 10},
378
430
  {'dependsOnCode' => 'optionTypeList.type:ldap', 'fieldName' => 'sourcePassword', 'fieldLabel' => 'Source Username', 'type' => 'text', 'description' => "An LDAP Password for use when type is 'ldap'.", 'displayOrder' => 11},
379
431
  {'dependsOnCode' => 'optionTypeList.type:ldap', 'fieldName' => 'ldapQuery', 'fieldLabel' => 'LDAP Query', 'type' => 'text', 'description' => "LDAP Queries are standard LDAP formatted queries where different objects can be searched. Dependent parameters can be loaded into the query using the <%=phrase%> syntax.", 'displayOrder' => 12},
@@ -35,6 +35,10 @@ class Morpheus::Cli::LibraryOptionTypesCommand
35
35
  opts.footer = "List option types."
36
36
  end
37
37
  optparse.parse!(args)
38
+ # verify_args!(args:args, optparse:optparse, count:0)
39
+ if args.count > 0
40
+ options[:phrase] = args.join(" ")
41
+ end
38
42
  connect(options)
39
43
  begin
40
44
  params = {}
@@ -26,12 +26,11 @@ class Morpheus::Cli::LibrarySpecTemplatesCommand
26
26
  opts.footer = "List spec templates."
27
27
  end
28
28
  optparse.parse!(args)
29
- connect(options)
29
+ # verify_args!(args:args, optparse:optparse, count:0)
30
30
  if args.count > 0
31
- print_error Morpheus::Terminal.angry_prompt
32
- puts_error "wrong number of arguments, expected 0 and got (#{args.count}) #{args.inspect}\n#{optparse}"
33
- return 1
31
+ options[:phrase] = args.join(" ")
34
32
  end
33
+ connect(options)
35
34
  begin
36
35
  # construct payload
37
36
  params.merge!(parse_list_options(options))
@@ -1,6 +1,6 @@
1
1
 
2
2
  module Morpheus
3
3
  module Cli
4
- VERSION = "5.3.1.1"
4
+ VERSION = "5.3.2"
5
5
  end
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: morpheus-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.3.1.1
4
+ version: 5.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Estes
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2021-06-21 00:00:00.000000000 Z
14
+ date: 2021-07-12 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler