morpheus-cli 2.12.5 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/Dockerfile +5 -0
  3. data/lib/morpheus/api/api_client.rb +15 -30
  4. data/lib/morpheus/api/app_templates_interface.rb +34 -7
  5. data/lib/morpheus/api/apps_interface.rb +20 -1
  6. data/lib/morpheus/api/archive_buckets_interface.rb +124 -0
  7. data/lib/morpheus/api/archive_files_interface.rb +182 -0
  8. data/lib/morpheus/api/{network_pools_interface.rb → image_builder_boot_scripts_interface.rb} +6 -6
  9. data/lib/morpheus/api/{policies_interface.rb → image_builder_image_builds_interface.rb} +20 -15
  10. data/lib/morpheus/api/image_builder_interface.rb +26 -0
  11. data/lib/morpheus/api/{network_proxies_interface.rb → image_builder_preseed_scripts_interface.rb} +6 -6
  12. data/lib/morpheus/cli.rb +10 -9
  13. data/lib/morpheus/cli/alias_command.rb +10 -9
  14. data/lib/morpheus/cli/app_templates.rb +1566 -457
  15. data/lib/morpheus/cli/apps.rb +284 -108
  16. data/lib/morpheus/cli/archives_command.rb +2184 -0
  17. data/lib/morpheus/cli/boot_scripts_command.rb +382 -0
  18. data/lib/morpheus/cli/cli_command.rb +9 -35
  19. data/lib/morpheus/cli/error_handler.rb +2 -0
  20. data/lib/morpheus/cli/hosts.rb +15 -3
  21. data/lib/morpheus/cli/image_builder_command.rb +1208 -0
  22. data/lib/morpheus/cli/instances.rb +118 -47
  23. data/lib/morpheus/cli/man_command.rb +27 -24
  24. data/lib/morpheus/cli/mixins/print_helper.rb +19 -5
  25. data/lib/morpheus/cli/mixins/provisioning_helper.rb +20 -20
  26. data/lib/morpheus/cli/option_types.rb +45 -14
  27. data/lib/morpheus/cli/preseed_scripts_command.rb +381 -0
  28. data/lib/morpheus/cli/remote.rb +1 -0
  29. data/lib/morpheus/cli/roles.rb +2 -2
  30. data/lib/morpheus/cli/shell.rb +3 -2
  31. data/lib/morpheus/cli/version.rb +1 -1
  32. data/lib/morpheus/ext/hash.rb +22 -0
  33. data/lib/morpheus/formatters.rb +33 -0
  34. data/lib/morpheus/terminal.rb +1 -1
  35. metadata +13 -21
  36. data/lib/morpheus/api/cloud_policies_interface.rb +0 -47
  37. data/lib/morpheus/api/group_policies_interface.rb +0 -47
  38. data/lib/morpheus/api/network_domains_interface.rb +0 -47
  39. data/lib/morpheus/api/network_groups_interface.rb +0 -47
  40. data/lib/morpheus/api/network_pool_servers_interface.rb +0 -47
  41. data/lib/morpheus/api/network_services_interface.rb +0 -47
  42. data/lib/morpheus/api/networks_interface.rb +0 -54
  43. data/lib/morpheus/cli/network_domains_command.rb +0 -571
  44. data/lib/morpheus/cli/network_groups_command.rb +0 -602
  45. data/lib/morpheus/cli/network_pool_servers_command.rb +0 -430
  46. data/lib/morpheus/cli/network_pools_command.rb +0 -495
  47. data/lib/morpheus/cli/network_proxies_command.rb +0 -594
  48. data/lib/morpheus/cli/network_services_command.rb +0 -148
  49. data/lib/morpheus/cli/networks_command.rb +0 -855
  50. data/lib/morpheus/cli/policies_command.rb +0 -847
  51. data/scripts/generate_morpheus_commands_help.morpheus +0 -1313
@@ -1,594 +0,0 @@
1
- require 'rest_client'
2
- require 'optparse'
3
- require 'filesize'
4
- require 'table_print'
5
- require 'morpheus/cli/cli_command'
6
- require 'morpheus/cli/mixins/infrastructure_helper'
7
-
8
- class Morpheus::Cli::NetworkProxiesCommand
9
- include Morpheus::Cli::CliCommand
10
- include Morpheus::Cli::InfrastructureHelper
11
-
12
- set_command_name :'network-proxies'
13
-
14
- register_subcommands :list, :get, :add, :update, :remove #, :generate_proxy
15
-
16
- # set_default_subcommand :list
17
-
18
- def initialize()
19
- # @appliance_name, @appliance_url = Morpheus::Cli::Remote.active_appliance
20
- end
21
-
22
- def connect(opts)
23
- @api_client = establish_remote_appliance_connection(opts)
24
- @network_proxies_interface = @api_client.network_proxies
25
- @clouds_interface = @api_client.clouds
26
- @options_interface = @api_client.options
27
- end
28
-
29
- def handle(args)
30
- handle_subcommand(args)
31
- end
32
-
33
- def list(args)
34
- options = {}
35
- params = {}
36
- optparse = Morpheus::Cli::OptionParser.new do |opts|
37
- opts.banner = subcommand_usage()
38
- build_common_options(opts, options, [:list, :json, :yaml, :csv, :fields, :json, :dry_run, :remote])
39
- opts.footer = "List network proxies."
40
- end
41
- optparse.parse!(args)
42
- connect(options)
43
- begin
44
- [:phrase, :offset, :max, :sort, :direction].each do |k|
45
- params[k] = options[k] unless options[k].nil?
46
- end
47
- if options[:dry_run]
48
- print_dry_run @network_proxies_interface.dry.list(params)
49
- return
50
- end
51
- json_response = @network_proxies_interface.list(params)
52
- network_proxies = json_response["networkProxies"]
53
- if options[:include_fields]
54
- json_response = {"networkProxies" => filter_data(network_proxies, options[:include_fields]) }
55
- end
56
- if options[:json]
57
- puts as_json(json_response, options)
58
- return 0
59
- elsif options[:yaml]
60
- puts as_yaml(json_response, options)
61
- return 0
62
- elsif options[:csv]
63
- puts records_as_csv(network_proxies, options)
64
- return 0
65
- end
66
- title = "Morpheus Network Proxies"
67
- subtitles = []
68
- if params[:phrase]
69
- subtitles << "Search: #{params[:phrase]}".strip
70
- end
71
- print_h1 title, subtitles
72
- if network_proxies.empty?
73
- print cyan,"No network proxies found.",reset,"\n"
74
- else
75
- rows = network_proxies.collect {|network_proxy|
76
- row = {
77
- id: network_proxy['id'],
78
- name: network_proxy['name'],
79
- host: network_proxy['proxyHost'],
80
- port: network_proxy['proxyPort'],
81
- visibility: network_proxy['visibility'].to_s.capitalize,
82
- tenant: network_proxy['account'] ? network_proxy['account']['name'] : '',
83
- owner: network_proxy['owner'] ? network_proxy['owner']['name'] : '',
84
- }
85
- row
86
- }
87
- columns = [:id, :name, :host, :port, :visibility, :tenant]
88
- if options[:include_fields]
89
- columns = options[:include_fields]
90
- end
91
- print cyan
92
- print as_pretty_table(rows, columns, options)
93
- print reset
94
- print_results_pagination(json_response, {:label => "network proxy", :n_label => "network proxies"})
95
- end
96
- print reset,"\n"
97
- return 0
98
- rescue RestClient::Exception => e
99
- print_rest_exception(e, options)
100
- exit 1
101
- end
102
- end
103
-
104
- def get(args)
105
- options = {}
106
- optparse = Morpheus::Cli::OptionParser.new do |opts|
107
- opts.banner = subcommand_usage("[network-proxy]")
108
- build_common_options(opts, options, [:json, :yaml, :csv, :fields, :dry_run, :remote])
109
- opts.footer = "Get details about a network proxy." + "\n" +
110
- "[network-proxy] is required. This is the name or id of a network proxy."
111
- end
112
- optparse.parse!(args)
113
- if args.count != 1
114
- print_error Morpheus::Terminal.angry_prompt
115
- puts_error "#{command_name} missing argument: [network-proxy]\n#{optparse}"
116
- return 1
117
- end
118
- connect(options)
119
- begin
120
- if options[:dry_run]
121
- if args[0].to_s =~ /\A\d{1,}\Z/
122
- print_dry_run @network_proxies_interface.dry.get(args[0].to_i)
123
- else
124
- print_dry_run @network_proxies_interface.dry.list({name:args[0]})
125
- end
126
- return
127
- end
128
- network_proxy = find_network_proxy_by_name_or_id(args[0])
129
- return 1 if network_proxy.nil?
130
- json_response = {'networkProxy' => network_proxy} # skip redundant request
131
- # json_response = @network_proxies_interface.get(network_proxy['id'])
132
- network_proxy = json_response['networkProxy']
133
- if options[:include_fields]
134
- json_response = {'networkProxy' => filter_data(network_proxy, options[:include_fields]) }
135
- end
136
- if options[:json]
137
- puts as_json(json_response, options)
138
- return 0
139
- elsif options[:yaml]
140
- puts as_yaml(json_response, options)
141
- return 0
142
- elsif options[:csv]
143
- puts records_as_csv([network_proxy], options)
144
- return 0
145
- end
146
- print_h1 "Network Proxy Details"
147
- print cyan
148
- description_cols = {
149
- "ID" => 'id',
150
- "Name" => lambda {|it| it['name'] },
151
- "Proxy Host" => lambda {|it| it['proxyHost'] },
152
- "Proxy Port" => lambda {|it| it['proxyPort'] },
153
- "Proxy Username" => lambda {|it| it['proxyUser'] },
154
- "Proxy Password" => lambda {|it| it['proxyPassword'] }, # masked
155
- "Proxy Domain" => lambda {|it| it['proxyDomain'] },
156
- "Proxy Workstation" => lambda {|it| it['proxyWorkstation'] },
157
- "Proxy Host" => lambda {|it| it['proxyHost'] },
158
- "Proxy Host" => lambda {|it| it['proxyHost'] },
159
- "Visibility" => lambda {|it| it['visibility'].to_s.capitalize },
160
- "Tenant" => lambda {|it| it['account'] ? it['account']['name'] : '' },
161
- }
162
- print_description_list(description_cols, network_proxy)
163
- print reset,"\n"
164
- return 0
165
- rescue RestClient::Exception => e
166
- print_rest_exception(e, options)
167
- return 1
168
- end
169
- end
170
-
171
- def add(args)
172
- options = {}
173
- ip_range_list = nil
174
- optparse = Morpheus::Cli::OptionParser.new do |opts|
175
- opts.banner = subcommand_usage()
176
- opts.on('--name VALUE', String, "Name for this network proxy") do |val|
177
- options['name'] = val
178
- end
179
- opts.on('--proxy-host VALUE', String, "Proxy Host") do |val|
180
- options['proxyHost'] = val
181
- end
182
- opts.on('--proxy-port VALUE', String, "Proxy Port") do |val|
183
- options['proxyPort'] = val
184
- end
185
- opts.on('--proxy-user VALUE', String, "Proxy User") do |val|
186
- options['proxyUser'] = val
187
- end
188
- opts.on('--proxy-password VALUE', String, "Proxy Password") do |val|
189
- options['proxyPassword'] = val
190
- end
191
- opts.on('--proxy-domain VALUE', String, "Proxy Domain") do |val|
192
- options['proxyDomain'] = val
193
- end
194
- opts.on('--proxy-workstation VALUE', String, "Proxy Workstation") do |val|
195
- options['proxyWorkstation'] = val
196
- end
197
- opts.on('--visibility [private|public]', String, "Visibility") do |val|
198
- options['visibility'] = val
199
- end
200
- opts.on('--tenant ID', String, "Tenant Account ID") do |val|
201
- options['tenant'] = val
202
- end
203
- build_common_options(opts, options, [:options, :payload, :json, :dry_run, :quiet, :remote])
204
- opts.footer = "Create a new network proxy." + "\n" +
205
- "[name] is required and can be passed as --name instead."
206
- end
207
- optparse.parse!(args)
208
- if args.count > 1
209
- print_error Morpheus::Terminal.angry_prompt
210
- puts_error "wrong number of arguments, expected 0-1 and got #{args.count}\n#{optparse}"
211
- return 1
212
- end
213
- connect(options)
214
- begin
215
- # merge -O options into normally parsed options
216
- options.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
217
-
218
- # support [name] as first argument
219
- if args[0]
220
- options['name'] = args[0]
221
- end
222
-
223
- # construct payload
224
- payload = nil
225
- if options[:payload]
226
- payload = options[:payload]
227
- else
228
- # prompt for network options
229
- payload = {
230
- 'networkProxy' => {
231
- # 'config' => {}
232
- }
233
- }
234
-
235
- # allow arbitrary -O options
236
- payload['networkProxy'].deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
237
-
238
- # Name
239
- if options['name']
240
- payload['networkProxy']['name'] = options['name']
241
- else
242
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'description' => 'Name for this network proxy.'}], options)
243
- payload['networkProxy']['name'] = v_prompt['name']
244
- end
245
-
246
- # Proxy Host
247
- if options['proxyHost'] != nil
248
- payload['networkProxy']['proxyHost'] = options['proxyHost']
249
- else
250
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'proxyHost', 'fieldLabel' => 'Proxy Host', 'type' => 'text', 'required' => false, 'description' => ''}], options)
251
- payload['networkProxy']['proxyHost'] = v_prompt['proxyHost'] unless v_prompt['proxyHost'].nil?
252
- end
253
-
254
- # Proxy Port
255
- if options['proxyPort'] != nil
256
- payload['networkProxy']['proxyPort'] = options['proxyPort']
257
- else
258
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'proxyPort', 'fieldLabel' => 'Proxy Port', 'type' => 'text', 'required' => false, 'description' => ''}], options)
259
- payload['networkProxy']['proxyPort'] = v_prompt['proxyPort'] unless v_prompt['proxyPort'].nil?
260
- end
261
-
262
- # Proxy Username
263
- if options['proxyUser'] != nil
264
- payload['networkProxy']['proxyUser'] = options['proxyUser']
265
- else
266
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'proxyUser', 'fieldLabel' => 'Proxy Username', 'type' => 'text', 'required' => false, 'description' => ''}], options)
267
- payload['networkProxy']['proxyUser'] = v_prompt['proxyUser'] unless v_prompt['proxyUser'].nil?
268
- end
269
-
270
- # Proxy Password
271
- if options['proxyPassword'] != nil
272
- payload['networkProxy']['proxyPassword'] = options['proxyPassword']
273
- else
274
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'proxyPassword', 'fieldLabel' => 'Proxy Password', 'type' => 'password', 'required' => false, 'description' => ''}], options)
275
- payload['networkProxy']['proxyPassword'] = v_prompt['proxyPassword'] unless v_prompt['proxyPassword'].nil?
276
- end
277
-
278
- # Proxy Domain
279
- if options['proxyDomain'] != nil
280
- payload['networkProxy']['proxyDomain'] = options['proxyDomain']
281
- else
282
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'proxyDomain', 'fieldLabel' => 'Proxy Domain', 'type' => 'text', 'required' => false, 'description' => ''}], options)
283
- payload['networkProxy']['proxyDomain'] = v_prompt['proxyDomain'] unless v_prompt['proxyDomain'].nil?
284
- end
285
-
286
- # Proxy Workstation
287
- if options['proxyWorkstation'] != nil
288
- payload['networkProxy']['proxyWorkstation'] = options['proxyWorkstation']
289
- else
290
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'proxyWorkstation', 'fieldLabel' => 'Proxy Workstation', 'type' => 'text', 'required' => false, 'description' => ''}], options)
291
- payload['networkProxy']['proxyWorkstation'] = v_prompt['proxyWorkstation'] unless v_prompt['proxyWorkstation'].nil?
292
- end
293
-
294
- # Visibility
295
- if options['visibility']
296
- payload['networkProxy']['visibility'] = options['visibility'].to_s.downcase
297
- else
298
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'visibility', 'fieldLabel' => 'Visibility', 'type' => 'select', 'selectOptions' => [{'name' => 'Private', 'value' => 'private'},{'name' => 'Public', 'value' => 'public'}], 'required' => false, 'description' => 'Visibility', 'defaultValue' => 'private'}], options)
299
- payload['networkProxy']['visibility'] = v_prompt['visibility'].to_s.downcase
300
- end
301
-
302
- # Tenant
303
- if options['tenant']
304
- payload['networkProxy']['account'] = {'id' => options['tenant'].to_i}
305
- else
306
- begin
307
- available_accounts = @api_client.accounts.list({max:10000})['accounts'].collect {|it| {'name' => it['name'], 'value' => it['id'], 'id' => it['id']}}
308
- account_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'tenant', 'fieldLabel' => 'Tenant', 'type' => 'select', 'selectOptions' => available_accounts, 'required' => false, 'description' => 'Tenant'}], options)
309
- if account_prompt['tenant']
310
- payload['networkProxy']['account'] = {'id' => account_prompt['tenant']}
311
- end
312
- rescue
313
- puts "failed to load list of available tenants: #{ex.message}"
314
- end
315
- end
316
-
317
- end
318
-
319
-
320
- if options[:dry_run]
321
- print_dry_run @network_proxies_interface.dry.create(payload)
322
- return
323
- end
324
- json_response = @network_proxies_interface.create(payload)
325
- if options[:json]
326
- print JSON.pretty_generate(json_response)
327
- print "\n"
328
- elsif !options[:quiet]
329
- network_proxy = json_response['networkProxy']
330
- print_green_success "Added network proxy #{network_proxy['name']}"
331
- get([network_proxy['id']])
332
- end
333
- return 0
334
- rescue RestClient::Exception => e
335
- print_rest_exception(e, options)
336
- exit 1
337
- end
338
- end
339
-
340
- def update(args)
341
- options = {}
342
- ip_range_list = nil
343
- optparse = Morpheus::Cli::OptionParser.new do |opts|
344
- opts.banner = subcommand_usage("[network-proxy] [options]")
345
- opts.on('--name VALUE', String, "Name for this network proxy") do |val|
346
- options['name'] = val
347
- end
348
- opts.on('--proxy-host VALUE', String, "Proxy Host") do |val|
349
- options['proxyHost'] = val
350
- end
351
- opts.on('--proxy-port VALUE', String, "Proxy Port") do |val|
352
- options['proxyPort'] = val
353
- end
354
- opts.on('--proxy-user VALUE', String, "Proxy User") do |val|
355
- options['proxyUser'] = val
356
- end
357
- opts.on('--proxy-password VALUE', String, "Proxy Password") do |val|
358
- options['proxyPassword'] = val
359
- end
360
- opts.on('--proxy-domain VALUE', String, "Proxy Domain") do |val|
361
- options['proxyDomain'] = val
362
- end
363
- opts.on('--proxy-workstation VALUE', String, "Proxy Workstation") do |val|
364
- options['proxyWorkstation'] = val
365
- end
366
- opts.on('--visibility [private|public]', String, "Visibility") do |val|
367
- options['visibility'] = val
368
- end
369
- opts.on('--tenant ID', String, "Tenant Account ID") do |val|
370
- options['tenant'] = val
371
- end
372
- build_common_options(opts, options, [:options, :payload, :json, :dry_run, :remote])
373
- opts.footer = "Update a network proxy." + "\n" +
374
- "[network-proxy] is required. This is the id of a network proxy."
375
- end
376
- optparse.parse!(args)
377
- if args.count != 1
378
- print_error Morpheus::Terminal.angry_prompt
379
- puts_error "wrong number of arguments, expected 1 and got #{args.count}\n#{optparse}"
380
- return 1
381
- end
382
- connect(options)
383
-
384
- begin
385
- network_proxy = find_network_proxy_by_name_or_id(args[0])
386
- return 1 if network_proxy.nil?
387
-
388
- # merge -O options into normally parsed options
389
- options.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
390
-
391
- # construct payload
392
- payload = nil
393
- if options[:payload]
394
- payload = options[:payload]
395
- else
396
- # prompt for network options
397
- payload = {
398
- 'networkProxy' => {
399
- }
400
- }
401
-
402
- # allow arbitrary -O options
403
- payload['networkProxy'].deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
404
-
405
- # Name
406
- if options['name']
407
- payload['networkProxy']['name'] = options['name']
408
- else
409
- # v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'description' => 'Name for this network proxy.'}], options)
410
- # payload['networkProxy']['name'] = v_prompt['name']
411
- end
412
-
413
- # Proxy Host
414
- if options['proxyHost'] != nil
415
- payload['networkProxy']['proxyHost'] = options['proxyHost']
416
- else
417
- # v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'proxyHost', 'fieldLabel' => 'Proxy Host', 'type' => 'text', 'required' => false, 'description' => ''}], options)
418
- # payload['networkProxy']['proxyHost'] = v_prompt['proxyHost'] unless v_prompt['proxyHost'].nil?
419
- end
420
-
421
- # Proxy Port
422
- if options['proxyPort'] != nil
423
- payload['networkProxy']['proxyPort'] = options['proxyPort']
424
- else
425
- # v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'proxyPort', 'fieldLabel' => 'Proxy Port', 'type' => 'text', 'required' => false, 'description' => ''}], options)
426
- # payload['networkProxy']['proxyPort'] = v_prompt['proxyPort'] unless v_prompt['proxyPort'].nil?
427
- end
428
-
429
- # Proxy Username
430
- if options['proxyUser'] != nil
431
- payload['networkProxy']['proxyUser'] = options['proxyUser']
432
- else
433
- # v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'proxyUser', 'fieldLabel' => 'Proxy Username', 'type' => 'text', 'required' => false, 'description' => ''}], options)
434
- # payload['networkProxy']['proxyUser'] = v_prompt['proxyUser'] unless v_prompt['proxyUser'].nil?
435
- end
436
-
437
- # Proxy Password
438
- if options['proxyPassword'] != nil
439
- payload['networkProxy']['proxyPassword'] = options['proxyPassword']
440
- else
441
- # v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'proxyPassword', 'fieldLabel' => 'Proxy Password', 'type' => 'password', 'required' => false, 'description' => ''}], options)
442
- # payload['networkProxy']['proxyPassword'] = v_prompt['proxyPassword'] unless v_prompt['proxyPassword'].nil?
443
- end
444
-
445
- # Proxy Domain
446
- if options['proxyDomain'] != nil
447
- payload['networkProxy']['proxyDomain'] = options['proxyDomain']
448
- else
449
- # v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'proxyDomain', 'fieldLabel' => 'Proxy Domain', 'type' => 'text', 'required' => false, 'description' => ''}], options)
450
- # payload['networkProxy']['proxyDomain'] = v_prompt['proxyDomain'] unless v_prompt['proxyDomain'].nil?
451
- end
452
-
453
- # Proxy Workstation
454
- if options['proxyWorkstation'] != nil
455
- payload['networkProxy']['proxyWorkstation'] = options['proxyWorkstation']
456
- else
457
- # v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'proxyWorkstation', 'fieldLabel' => 'Proxy Workstation', 'type' => 'text', 'required' => false, 'description' => ''}], options)
458
- # payload['networkProxy']['proxyWorkstation'] = v_prompt['proxyWorkstation'] unless v_prompt['proxyWorkstation'].nil?
459
- end
460
-
461
- # Visibility
462
- if options['visibility']
463
- payload['networkProxy']['visibility'] = options['visibility'].to_s.downcase
464
- else
465
- # v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'visibility', 'fieldLabel' => 'Visibility', 'type' => 'select', 'selectOptions' => [{'name' => 'Private', 'value' => 'private'},{'name' => 'Public', 'value' => 'public'}], 'required' => false, 'description' => 'Visibility', 'defaultValue' => 'private'}], options)
466
- # payload['networkProxy']['visibility'] = v_prompt['visibility'].to_s.downcase
467
- end
468
-
469
- # Tenant
470
- if options['tenant']
471
- payload['networkProxy']['account'] = {'id' => options['tenant'].to_i}
472
- else
473
- # begin
474
- # available_accounts = @api_client.accounts.list({max:10000})['accounts'].collect {|it| {'name' => it['name'], 'value' => it['id'], 'id' => it['id']}}
475
- # account_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'tenant', 'fieldLabel' => 'Tenant', 'type' => 'select', 'selectOptions' => available_accounts, 'required' => false, 'description' => 'Tenant'}], options)
476
- # if account_prompt['tenant']
477
- # payload['networkProxy']['account'] = {'id' => account_prompt['tenant']}
478
- # end
479
- # rescue
480
- # puts "failed to load list of available tenants: #{ex.message}"
481
- # end
482
- end
483
-
484
- end
485
-
486
- if options[:dry_run]
487
- print_dry_run @network_proxies_interface.dry.update(network_proxy["id"], payload)
488
- return
489
- end
490
- json_response = @network_proxies_interface.update(network_proxy["id"], payload)
491
- if options[:json]
492
- puts as_json(json_response)
493
- else
494
- network_proxy = json_response['networkProxy']
495
- print_green_success "Updated network proxy #{network_proxy['name']}"
496
- get([network_proxy['id']])
497
- end
498
- return 0
499
- rescue RestClient::Exception => e
500
- print_rest_exception(e, options)
501
- return 1
502
- end
503
- end
504
-
505
- def remove(args)
506
- options = {}
507
- optparse = Morpheus::Cli::OptionParser.new do |opts|
508
- opts.banner = subcommand_usage("[network-proxy]")
509
- build_common_options(opts, options, [:account, :auto_confirm, :json, :dry_run, :remote])
510
- opts.footer = "Delete a network proxy." + "\n" +
511
- "[network-proxy] is required. This is the name or id of a network proxy."
512
- end
513
- optparse.parse!(args)
514
-
515
- if args.count < 1
516
- print_error Morpheus::Terminal.angry_prompt
517
- puts_error "#{command_name} missing argument: [network-proxy]\n#{optparse}"
518
- return 1
519
- end
520
-
521
- connect(options)
522
- begin
523
- network_proxy = find_network_proxy_by_name_or_id(args[0])
524
- return 1 if network_proxy.nil?
525
-
526
- unless options[:yes] || Morpheus::Cli::OptionTypes.confirm("Are you sure you want to delete the network proxy: #{network_proxy['name']}?")
527
- return 9, "aborted command"
528
- end
529
- if options[:dry_run]
530
- print_dry_run @network_proxies_interface.dry.destroy(network_proxy['id'])
531
- return 0
532
- end
533
- json_response = @network_proxies_interface.destroy(network_proxy['id'])
534
- if options[:json]
535
- print JSON.pretty_generate(json_response)
536
- print "\n"
537
- else
538
- print_green_success "Removed network proxy #{network_proxy['name']}"
539
- # list([])
540
- end
541
- return 0
542
- rescue RestClient::Exception => e
543
- print_rest_exception(e, options)
544
- return 1
545
- end
546
- end
547
-
548
- private
549
-
550
-
551
- def find_network_proxy_by_name_or_id(val)
552
- if val.to_s =~ /\A\d{1,}\Z/
553
- return find_network_proxy_by_id(val)
554
- else
555
- return find_network_proxy_by_name(val)
556
- end
557
- end
558
-
559
- def find_network_proxy_by_id(id)
560
- begin
561
- json_response = @network_proxies_interface.get(id.to_i)
562
- return json_response['networkProxy']
563
- rescue RestClient::Exception => e
564
- if e.response && e.response.code == 404
565
- print_red_alert "Network Proxy not found by id #{id}"
566
- return nil
567
- else
568
- raise e
569
- end
570
- end
571
- end
572
-
573
- def find_network_proxy_by_name(name)
574
- json_response = @network_proxies_interface.list({name: name.to_s})
575
- network_proxies = json_response['networkProxies']
576
- if network_proxies.empty?
577
- print_red_alert "Network Proxy not found by name #{name}"
578
- return nil
579
- elsif network_proxies.size > 1
580
- print_red_alert "#{network_proxies.size} network proxies found by name #{name}"
581
- # print_networks_table(networks, {color: red})
582
- rows = network_proxies.collect do |network_proxy|
583
- {id: it['id'], name: it['name']}
584
- end
585
- print red
586
- tp rows, [:id, :name]
587
- print reset,"\n"
588
- return nil
589
- else
590
- return network_proxies[0]
591
- end
592
- end
593
-
594
- end