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.
- checksums.yaml +4 -4
- data/Dockerfile +1 -1
- data/lib/morpheus/api/api_client.rb +26 -0
- data/lib/morpheus/api/billing_interface.rb +34 -0
- data/lib/morpheus/api/catalog_item_types_interface.rb +9 -0
- data/lib/morpheus/api/deploy_interface.rb +1 -1
- data/lib/morpheus/api/deployments_interface.rb +20 -1
- data/lib/morpheus/api/forgot_password_interface.rb +17 -0
- data/lib/morpheus/api/instances_interface.rb +7 -0
- data/lib/morpheus/api/rest_interface.rb +0 -6
- data/lib/morpheus/api/roles_interface.rb +14 -0
- data/lib/morpheus/api/search_interface.rb +13 -0
- data/lib/morpheus/api/servers_interface.rb +7 -0
- data/lib/morpheus/api/usage_interface.rb +18 -0
- data/lib/morpheus/cli.rb +6 -3
- data/lib/morpheus/cli/apps.rb +3 -4
- data/lib/morpheus/cli/backup_jobs_command.rb +3 -0
- data/lib/morpheus/cli/backups_command.rb +3 -0
- data/lib/morpheus/cli/budgets_command.rb +4 -4
- data/lib/morpheus/cli/catalog_command.rb +507 -0
- data/lib/morpheus/cli/cli_command.rb +45 -20
- data/lib/morpheus/cli/commands/standard/curl_command.rb +26 -12
- data/lib/morpheus/cli/commands/standard/history_command.rb +3 -1
- data/lib/morpheus/cli/commands/standard/man_command.rb +74 -40
- data/lib/morpheus/cli/commands/standard/source_command.rb +1 -1
- data/lib/morpheus/cli/commands/standard/update_command.rb +76 -0
- data/lib/morpheus/cli/containers_command.rb +14 -0
- data/lib/morpheus/cli/deploy.rb +199 -90
- data/lib/morpheus/cli/deployments.rb +342 -29
- data/lib/morpheus/cli/deploys.rb +206 -41
- data/lib/morpheus/cli/error_handler.rb +7 -0
- data/lib/morpheus/cli/forgot_password.rb +133 -0
- data/lib/morpheus/cli/groups.rb +1 -1
- data/lib/morpheus/cli/health_command.rb +2 -2
- data/lib/morpheus/cli/hosts.rb +181 -26
- data/lib/morpheus/cli/instances.rb +102 -33
- data/lib/morpheus/cli/invoices_command.rb +33 -16
- data/lib/morpheus/cli/jobs_command.rb +28 -6
- data/lib/morpheus/cli/library_option_lists_command.rb +14 -6
- data/lib/morpheus/cli/logs_command.rb +9 -6
- data/lib/morpheus/cli/mixins/accounts_helper.rb +7 -6
- data/lib/morpheus/cli/mixins/backups_helper.rb +2 -4
- data/lib/morpheus/cli/mixins/catalog_helper.rb +66 -0
- data/lib/morpheus/cli/mixins/deployments_helper.rb +31 -3
- data/lib/morpheus/cli/mixins/option_source_helper.rb +1 -1
- data/lib/morpheus/cli/mixins/print_helper.rb +46 -21
- data/lib/morpheus/cli/mixins/provisioning_helper.rb +24 -4
- data/lib/morpheus/cli/network_pools_command.rb +14 -6
- data/lib/morpheus/cli/option_types.rb +266 -17
- data/lib/morpheus/cli/ping.rb +0 -1
- data/lib/morpheus/cli/provisioning_licenses_command.rb +2 -2
- data/lib/morpheus/cli/remote.rb +35 -12
- data/lib/morpheus/cli/reports_command.rb +99 -30
- data/lib/morpheus/cli/roles.rb +305 -3
- data/lib/morpheus/cli/search_command.rb +182 -0
- data/lib/morpheus/cli/service_plans_command.rb +2 -2
- data/lib/morpheus/cli/setup.rb +1 -1
- data/lib/morpheus/cli/shell.rb +33 -11
- data/lib/morpheus/cli/storage_providers_command.rb +40 -56
- data/lib/morpheus/cli/tasks.rb +20 -21
- data/lib/morpheus/cli/tenants_command.rb +1 -1
- data/lib/morpheus/cli/usage_command.rb +203 -0
- data/lib/morpheus/cli/user_settings_command.rb +1 -0
- data/lib/morpheus/cli/users.rb +12 -1
- data/lib/morpheus/cli/version.rb +1 -1
- data/lib/morpheus/cli/virtual_images.rb +280 -199
- data/lib/morpheus/cli/whoami.rb +6 -6
- data/lib/morpheus/cli/workflows.rb +34 -41
- data/lib/morpheus/formatters.rb +48 -5
- data/lib/morpheus/terminal.rb +6 -2
- metadata +13 -2
data/lib/morpheus/cli/whoami.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
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
|
-
|
70
|
-
|
71
|
-
|
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
|
-
|
87
|
-
|
88
|
-
|
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
|
-
#
|
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|
|
data/lib/morpheus/formatters.rb
CHANGED
@@ -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
|
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
|
-
|
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
|
data/lib/morpheus/terminal.rb
CHANGED
@@ -277,8 +277,12 @@ module Morpheus
|
|
277
277
|
end
|
278
278
|
end
|
279
279
|
out << "Commands:\n"
|
280
|
-
Morpheus::Cli::CliRegistry.all.
|
281
|
-
|
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
|
+
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-
|
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
|