morpheus-cli 4.2.20 → 5.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|