morpheus-cli 4.2.20 → 5.0.2

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.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/Dockerfile +1 -1
  3. data/lib/morpheus/api/api_client.rb +26 -0
  4. data/lib/morpheus/api/billing_interface.rb +34 -0
  5. data/lib/morpheus/api/catalog_item_types_interface.rb +9 -0
  6. data/lib/morpheus/api/deploy_interface.rb +1 -1
  7. data/lib/morpheus/api/deployments_interface.rb +20 -1
  8. data/lib/morpheus/api/forgot_password_interface.rb +17 -0
  9. data/lib/morpheus/api/instances_interface.rb +7 -0
  10. data/lib/morpheus/api/rest_interface.rb +0 -6
  11. data/lib/morpheus/api/roles_interface.rb +14 -0
  12. data/lib/morpheus/api/search_interface.rb +13 -0
  13. data/lib/morpheus/api/servers_interface.rb +7 -0
  14. data/lib/morpheus/api/usage_interface.rb +18 -0
  15. data/lib/morpheus/cli.rb +6 -3
  16. data/lib/morpheus/cli/apps.rb +3 -4
  17. data/lib/morpheus/cli/backup_jobs_command.rb +3 -0
  18. data/lib/morpheus/cli/backups_command.rb +3 -0
  19. data/lib/morpheus/cli/budgets_command.rb +4 -4
  20. data/lib/morpheus/cli/catalog_command.rb +507 -0
  21. data/lib/morpheus/cli/cli_command.rb +45 -20
  22. data/lib/morpheus/cli/commands/standard/curl_command.rb +26 -12
  23. data/lib/morpheus/cli/commands/standard/history_command.rb +3 -1
  24. data/lib/morpheus/cli/commands/standard/man_command.rb +74 -40
  25. data/lib/morpheus/cli/commands/standard/source_command.rb +1 -1
  26. data/lib/morpheus/cli/commands/standard/update_command.rb +76 -0
  27. data/lib/morpheus/cli/containers_command.rb +14 -0
  28. data/lib/morpheus/cli/deploy.rb +199 -90
  29. data/lib/morpheus/cli/deployments.rb +342 -29
  30. data/lib/morpheus/cli/deploys.rb +206 -41
  31. data/lib/morpheus/cli/error_handler.rb +7 -0
  32. data/lib/morpheus/cli/forgot_password.rb +133 -0
  33. data/lib/morpheus/cli/groups.rb +1 -1
  34. data/lib/morpheus/cli/health_command.rb +2 -2
  35. data/lib/morpheus/cli/hosts.rb +181 -26
  36. data/lib/morpheus/cli/instances.rb +102 -33
  37. data/lib/morpheus/cli/invoices_command.rb +33 -16
  38. data/lib/morpheus/cli/jobs_command.rb +28 -6
  39. data/lib/morpheus/cli/library_option_lists_command.rb +14 -6
  40. data/lib/morpheus/cli/logs_command.rb +9 -6
  41. data/lib/morpheus/cli/mixins/accounts_helper.rb +7 -6
  42. data/lib/morpheus/cli/mixins/backups_helper.rb +2 -4
  43. data/lib/morpheus/cli/mixins/catalog_helper.rb +66 -0
  44. data/lib/morpheus/cli/mixins/deployments_helper.rb +31 -3
  45. data/lib/morpheus/cli/mixins/option_source_helper.rb +1 -1
  46. data/lib/morpheus/cli/mixins/print_helper.rb +46 -21
  47. data/lib/morpheus/cli/mixins/provisioning_helper.rb +24 -4
  48. data/lib/morpheus/cli/network_pools_command.rb +14 -6
  49. data/lib/morpheus/cli/option_types.rb +266 -17
  50. data/lib/morpheus/cli/ping.rb +0 -1
  51. data/lib/morpheus/cli/provisioning_licenses_command.rb +2 -2
  52. data/lib/morpheus/cli/remote.rb +35 -12
  53. data/lib/morpheus/cli/reports_command.rb +99 -30
  54. data/lib/morpheus/cli/roles.rb +305 -3
  55. data/lib/morpheus/cli/search_command.rb +182 -0
  56. data/lib/morpheus/cli/service_plans_command.rb +2 -2
  57. data/lib/morpheus/cli/setup.rb +1 -1
  58. data/lib/morpheus/cli/shell.rb +33 -11
  59. data/lib/morpheus/cli/storage_providers_command.rb +40 -56
  60. data/lib/morpheus/cli/tasks.rb +20 -21
  61. data/lib/morpheus/cli/tenants_command.rb +1 -1
  62. data/lib/morpheus/cli/usage_command.rb +203 -0
  63. data/lib/morpheus/cli/user_settings_command.rb +1 -0
  64. data/lib/morpheus/cli/users.rb +12 -1
  65. data/lib/morpheus/cli/version.rb +1 -1
  66. data/lib/morpheus/cli/virtual_images.rb +280 -199
  67. data/lib/morpheus/cli/whoami.rb +6 -6
  68. data/lib/morpheus/cli/workflows.rb +34 -41
  69. data/lib/morpheus/formatters.rb +48 -5
  70. data/lib/morpheus/terminal.rb +6 -2
  71. metadata +13 -2
@@ -160,15 +160,15 @@ EOT
160
160
  print cyan
161
161
  print_description_list({
162
162
  "ID" => 'id',
163
- "Tenant" => lambda {|it| (it['account'] ? it['account']['name'] : '') + (@is_master_account ? " (Master Tenant)" : '') },
164
- "First Name" => 'firstName',
165
- "Last Name" => 'lastName',
166
- # "Name" => 'displayName',
167
- #"Name" => lambda {|it| it['firstName'] ? it['displayName'] : '' },
168
163
  "Username" => 'username',
164
+ # "First Name" => 'firstName',
165
+ # "Last Name" => 'lastName',
166
+ # "Name" => 'displayName',
167
+ "Name" => lambda {|it| "#{it['firstName']} #{it['lastName']}".strip },
169
168
  "Email" => 'email',
169
+ "Tenant" => lambda {|it| (it['account'] ? it['account']['name'] : '') + (@is_master_account ? " (Master Tenant)" : '') },
170
170
  "Role" => lambda {|it| format_user_role_names(it) },
171
- #"Remote" => lambda {|it| display_appliance(@appliance_name, @appliance_url) },
171
+ "Remote" => lambda {|it| display_appliance(@appliance_name, @appliance_url) },
172
172
  }, @current_user)
173
173
  print cyan
174
174
 
@@ -32,7 +32,7 @@ class Morpheus::Cli::Workflows
32
32
  params = {}
33
33
  options = {}
34
34
  optparse = Morpheus::Cli::OptionParser.new do |opts|
35
- opts.banner = subcommand_usage()
35
+ opts.banner = subcommand_usage("[search]")
36
36
  opts.on("-t", "--type TYPE", "Type of workflow. i.e. provision or operation. Default is provision.") do |val|
37
37
  workflow_type = val.to_s.downcase
38
38
  if workflow_type.include?('provision')
@@ -42,50 +42,43 @@ class Morpheus::Cli::Workflows
42
42
  end
43
43
  params['type'] = workflow_type
44
44
  end
45
- build_common_options(opts, options, [:list, :query, :json, :yaml, :csv, :fields, :dry_run, :remote])
45
+ build_standard_list_options(opts, options)
46
+ opts.footer = "List workflows."
46
47
  end
47
48
  optparse.parse!(args)
48
49
  connect(options)
49
- begin
50
- params.merge!(parse_list_options(options))
51
- @task_sets_interface.setopts(options)
52
- if options[:dry_run]
53
- print_dry_run @task_sets_interface.dry.get(params)
54
- return
55
- end
56
- json_response = @task_sets_interface.get(params)
57
- task_sets = json_response['taskSets']
58
- # print result and return output
59
- if options[:json]
60
- puts as_json(json_response, options, "taskSets")
61
- return 0
62
- elsif options[:csv]
63
- puts records_as_csv(json_response['taskSets'], options)
64
- return 0
65
- elsif options[:yaml]
66
- puts as_yaml(json_response, options, "taskSets")
67
- return 0
50
+ if args.count > 0
51
+ options[:phrase] = args.join(" ")
52
+ end
53
+ params.merge!(parse_list_options(options))
54
+ @task_sets_interface.setopts(options)
55
+ if options[:dry_run]
56
+ print_dry_run @task_sets_interface.dry.get(params)
57
+ return
58
+ end
59
+ json_response = @task_sets_interface.get(params)
60
+ task_sets = json_response['taskSets']
61
+ render_response(json_response, options, 'taskSets') do
62
+ title = "Morpheus Workflows"
63
+ subtitles = []
64
+ subtitles += parse_list_subtitles(options)
65
+ if params['type']
66
+ subtitles << "Type: #{params['type']}"
67
+ end
68
+ print_h1 title, subtitles
69
+ if task_sets.empty?
70
+ print cyan,"No workflows found.",reset,"\n"
68
71
  else
69
- task_sets = json_response['taskSets']
70
- title = "Morpheus Workflows"
71
- subtitles = []
72
- subtitles += parse_list_subtitles(options)
73
- if params['type']
74
- subtitles << "Type: #{params['type']}"
75
- end
76
- print_h1 title, subtitles
77
- if task_sets.empty?
78
- print cyan,"No workflows found.",reset,"\n"
79
- else
80
- print cyan
81
- print_workflows_table(task_sets)
82
- print_results_pagination(json_response)
83
- end
84
- print reset,"\n"
72
+ print cyan
73
+ print_workflows_table(task_sets)
74
+ print_results_pagination(json_response)
85
75
  end
86
- rescue RestClient::Exception => e
87
- print_rest_exception(e, options)
88
- exit 1
76
+ print reset,"\n"
77
+ end
78
+ if task_sets.empty?
79
+ return 1, "no workflows found"
80
+ else
81
+ return 0, nil
89
82
  end
90
83
  end
91
84
 
@@ -623,7 +616,7 @@ class Morpheus::Cli::Workflows
623
616
  #raise_command_error "missing required option: --instance, --host or --appliance\n#{optparse}"
624
617
  end
625
618
 
626
- # todo: prompt to workflow optionTypes for customOptions
619
+ # prompt to workflow optionTypes for customOptions
627
620
  custom_options = nil
628
621
  if workflow['optionTypes'] && workflow['optionTypes'].size() > 0
629
622
  custom_option_types = workflow['optionTypes'].collect {|it|
@@ -365,8 +365,21 @@ def format_number(n, opts={})
365
365
  return out
366
366
  end
367
367
 
368
- def format_sig_dig(n, sigdig=3)
369
- sprintf("%.#{sigdig}f", n)
368
+ def format_sig_dig(n, sigdig=3, min_sigdig=nil, pad_zeros=false)
369
+ v = sprintf("%.#{sigdig}f", n)
370
+ if pad_zeros != true
371
+ v = v.to_f.to_s
372
+ end
373
+ if min_sigdig
374
+ v_parts = v.split(".")
375
+ decimal_str = v_parts[1]
376
+ if decimal_str == nil
377
+ v = v + "." + ('0' * min_sigdig)
378
+ elsif decimal_str.size < min_sigdig
379
+ v = v + ('0' * (min_sigdig - decimal_str.size))
380
+ end
381
+ end
382
+ v
370
383
  end
371
384
 
372
385
  def currency_sym(currency)
@@ -375,7 +388,7 @@ end
375
388
 
376
389
  # returns currency amount formatted like "$4,5123.00". 0.00 is formatted as "$0"
377
390
  # this is not ideal
378
- def format_money(amount, currency='usd', opts={})
391
+ def format_currency(amount, currency='usd', opts={})
379
392
  amount = amount.to_f
380
393
  if amount == 0
381
394
  return currency_sym(currency).to_s + "0"
@@ -383,8 +396,11 @@ def format_money(amount, currency='usd', opts={})
383
396
  # # return exponent notation like 3.4e-09
384
397
  # return currency_sym(currency).to_s + "#{amount}"
385
398
  else
386
- sigdig = opts[:sigdig] ? opts[:sigdig].to_i : 2
387
- rtn = currency_sym(currency).to_s + format_number(sprintf("%.#{sigdig}f", amount))
399
+ sigdig = opts[:sigdig] ? opts[:sigdig].to_i : 2 # max decimal digits
400
+ min_sigdig = opts[:min_sigdig] ? opts[:min_sigdig].to_i : 2 # min decimal digits
401
+ display_value = format_sig_dig(amount, sigdig, min_sigdig, opts[:pad_zeros])
402
+ display_value = format_number(display_value) # commas
403
+ rtn = currency_sym(currency).to_s + display_value
388
404
  if amount.to_i < 0
389
405
  rtn = "(#{rtn})"
390
406
  if opts[:minus_color]
@@ -394,3 +410,30 @@ def format_money(amount, currency='usd', opts={})
394
410
  rtn
395
411
  end
396
412
  end
413
+
414
+ alias :format_money :format_currency
415
+
416
+ # def format_money(amount, currency='usd', opts={})
417
+ # format_currency(amount, currency, opts)
418
+ # end
419
+
420
+ def format_list(items, conjunction="and", limit=nil)
421
+ items = items ? items.clone : []
422
+ if limit
423
+ items = items.first(limit)
424
+ end
425
+ last_item = items.pop
426
+ if items.empty?
427
+ return "#{last_item}"
428
+ else
429
+ return items.join(", ") + (conjunction.to_s.empty? ? ", " : " #{conjunction} ") + "#{last_item}" + ((limit && limit < (items.size+1)) ? " ..." : "")
430
+ end
431
+ end
432
+
433
+ def anded_list(items, limit=nil)
434
+ format_list(items, "and", limit)
435
+ end
436
+
437
+ def ored_list(items, limit=nil)
438
+ format_list(items, "or", limit)
439
+ end
@@ -277,8 +277,12 @@ module Morpheus
277
277
  end
278
278
  end
279
279
  out << "Commands:\n"
280
- Morpheus::Cli::CliRegistry.all.keys.sort.each {|cmd|
281
- out << "\t#{cmd.to_s}\n"
280
+ sorted_commands = Morpheus::Cli::CliRegistry.all.values.sort { |x,y| x.command_name.to_s <=> y.command_name.to_s }
281
+ sorted_commands.each {|cmd|
282
+ # JD: not ready to show description yet, gotta finish filling in every command first
283
+ # maybe change 'View and manage' to something more concise like 'Manage'
284
+ # out << "\t#{cmd.command_name.to_s.ljust(28, ' ')} #{cmd.command_description}\n"
285
+ out << "\t#{cmd.command_name.to_s}\n"
282
286
  }
283
287
  # out << "Options:\n"
284
288
  out << optparse.to_s
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: 4.2.20
4
+ version: 5.0.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: 2020-09-09 00:00:00.000000000 Z
14
+ date: 2020-10-23 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler
@@ -185,8 +185,10 @@ files:
185
185
  - lib/morpheus/api/backup_jobs_interface.rb
186
186
  - lib/morpheus/api/backup_settings_interface.rb
187
187
  - lib/morpheus/api/backups_interface.rb
188
+ - lib/morpheus/api/billing_interface.rb
188
189
  - lib/morpheus/api/blueprints_interface.rb
189
190
  - lib/morpheus/api/budgets_interface.rb
191
+ - lib/morpheus/api/catalog_item_types_interface.rb
190
192
  - lib/morpheus/api/cloud_datastores_interface.rb
191
193
  - lib/morpheus/api/cloud_folders_interface.rb
192
194
  - lib/morpheus/api/cloud_policies_interface.rb
@@ -205,6 +207,7 @@ files:
205
207
  - lib/morpheus/api/execute_schedules_interface.rb
206
208
  - lib/morpheus/api/execution_request_interface.rb
207
209
  - lib/morpheus/api/file_copy_request_interface.rb
210
+ - lib/morpheus/api/forgot_password_interface.rb
208
211
  - lib/morpheus/api/group_policies_interface.rb
209
212
  - lib/morpheus/api/groups_interface.rb
210
213
  - lib/morpheus/api/guidance_interface.rb
@@ -271,6 +274,7 @@ files:
271
274
  - lib/morpheus/api/reports_interface.rb
272
275
  - lib/morpheus/api/rest_interface.rb
273
276
  - lib/morpheus/api/roles_interface.rb
277
+ - lib/morpheus/api/search_interface.rb
274
278
  - lib/morpheus/api/security_group_rules_interface.rb
275
279
  - lib/morpheus/api/security_groups_interface.rb
276
280
  - lib/morpheus/api/server_types_interface.rb
@@ -282,6 +286,7 @@ files:
282
286
  - lib/morpheus/api/subnets_interface.rb
283
287
  - lib/morpheus/api/task_sets_interface.rb
284
288
  - lib/morpheus/api/tasks_interface.rb
289
+ - lib/morpheus/api/usage_interface.rb
285
290
  - lib/morpheus/api/user_groups_interface.rb
286
291
  - lib/morpheus/api/user_settings_interface.rb
287
292
  - lib/morpheus/api/user_sources_interface.rb
@@ -305,6 +310,7 @@ files:
305
310
  - lib/morpheus/cli/blueprints_command.rb
306
311
  - lib/morpheus/cli/boot_scripts_command.rb
307
312
  - lib/morpheus/cli/budgets_command.rb
313
+ - lib/morpheus/cli/catalog_command.rb
308
314
  - lib/morpheus/cli/change_password_command.rb
309
315
  - lib/morpheus/cli/cli_command.rb
310
316
  - lib/morpheus/cli/cli_registry.rb
@@ -333,6 +339,7 @@ files:
333
339
  - lib/morpheus/cli/commands/standard/source_command.rb
334
340
  - lib/morpheus/cli/commands/standard/ssl_verification_command.rb
335
341
  - lib/morpheus/cli/commands/standard/tee_command.rb
342
+ - lib/morpheus/cli/commands/standard/update_command.rb
336
343
  - lib/morpheus/cli/commands/standard/version_command.rb
337
344
  - lib/morpheus/cli/containers_command.rb
338
345
  - lib/morpheus/cli/credentials.rb
@@ -350,6 +357,7 @@ files:
350
357
  - lib/morpheus/cli/execution_request_command.rb
351
358
  - lib/morpheus/cli/expression_parser.rb
352
359
  - lib/morpheus/cli/file_copy_request_command.rb
360
+ - lib/morpheus/cli/forgot_password.rb
353
361
  - lib/morpheus/cli/groups.rb
354
362
  - lib/morpheus/cli/guidance_command.rb
355
363
  - lib/morpheus/cli/health_command.rb
@@ -380,6 +388,7 @@ files:
380
388
  - lib/morpheus/cli/logs_command.rb
381
389
  - lib/morpheus/cli/mixins/accounts_helper.rb
382
390
  - lib/morpheus/cli/mixins/backups_helper.rb
391
+ - lib/morpheus/cli/mixins/catalog_helper.rb
383
392
  - lib/morpheus/cli/mixins/deployments_helper.rb
384
393
  - lib/morpheus/cli/mixins/infrastructure_helper.rb
385
394
  - lib/morpheus/cli/mixins/library_helper.rb
@@ -423,6 +432,7 @@ files:
423
432
  - lib/morpheus/cli/remote.rb
424
433
  - lib/morpheus/cli/reports_command.rb
425
434
  - lib/morpheus/cli/roles.rb
435
+ - lib/morpheus/cli/search_command.rb
426
436
  - lib/morpheus/cli/security_group_rules.rb
427
437
  - lib/morpheus/cli/security_groups.rb
428
438
  - lib/morpheus/cli/service_plans_command.rb
@@ -432,6 +442,7 @@ files:
432
442
  - lib/morpheus/cli/subnets_command.rb
433
443
  - lib/morpheus/cli/tasks.rb
434
444
  - lib/morpheus/cli/tenants_command.rb
445
+ - lib/morpheus/cli/usage_command.rb
435
446
  - lib/morpheus/cli/user_groups_command.rb
436
447
  - lib/morpheus/cli/user_settings_command.rb
437
448
  - lib/morpheus/cli/user_sources_command.rb