morpheus-cli 4.2.21 → 5.2.0
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 +30 -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 +16 -2
- 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 +14 -0
- data/lib/morpheus/api/service_catalog_interface.rb +89 -0
- data/lib/morpheus/api/usage_interface.rb +18 -0
- data/lib/morpheus/cli.rb +7 -3
- data/lib/morpheus/cli/apps.rb +6 -27
- data/lib/morpheus/cli/backup_jobs_command.rb +3 -0
- data/lib/morpheus/cli/backups_command.rb +3 -0
- data/lib/morpheus/cli/catalog_item_types_command.rb +622 -0
- data/lib/morpheus/cli/cli_command.rb +70 -21
- 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 -24
- data/lib/morpheus/cli/cypher_command.rb +6 -2
- data/lib/morpheus/cli/deploy.rb +199 -90
- data/lib/morpheus/cli/deployments.rb +341 -28
- 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 +59 -2
- data/lib/morpheus/cli/hosts.rb +265 -34
- data/lib/morpheus/cli/instances.rb +186 -100
- 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 +15 -7
- data/lib/morpheus/cli/library_option_types_command.rb +5 -2
- data/lib/morpheus/cli/logs_command.rb +9 -6
- data/lib/morpheus/cli/mixins/accounts_helper.rb +12 -7
- data/lib/morpheus/cli/mixins/backups_helper.rb +2 -4
- 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 +100 -4
- data/lib/morpheus/cli/network_pools_command.rb +14 -6
- data/lib/morpheus/cli/option_types.rb +271 -22
- data/lib/morpheus/cli/ping.rb +0 -1
- data/lib/morpheus/cli/remote.rb +35 -12
- data/lib/morpheus/cli/reports_command.rb +99 -30
- data/lib/morpheus/cli/roles.rb +453 -113
- data/lib/morpheus/cli/search_command.rb +182 -0
- data/lib/morpheus/cli/service_catalog_command.rb +1474 -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 +29 -32
- 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 +429 -254
- data/lib/morpheus/cli/whoami.rb +6 -6
- data/lib/morpheus/cli/workflows.rb +34 -41
- data/lib/morpheus/formatters.rb +75 -7
- data/lib/morpheus/terminal.rb +6 -2
- metadata +14 -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
@@ -352,7 +352,7 @@ def format_number(n, opts={})
|
|
352
352
|
delim = opts[:delimiter] || ','
|
353
353
|
out = ""
|
354
354
|
parts = n.to_s.split(".")
|
355
|
-
whole_number = parts[0]
|
355
|
+
whole_number = parts[0].to_s
|
356
356
|
decimal = parts[1] ? parts[1..-1].join('.') : nil
|
357
357
|
i = 0
|
358
358
|
whole_number.reverse.each_char do |c|
|
@@ -365,17 +365,42 @@ def format_number(n, opts={})
|
|
365
365
|
return out
|
366
366
|
end
|
367
367
|
|
368
|
-
def format_sig_dig(n, sigdig=3)
|
369
|
-
|
368
|
+
def format_sig_dig(n, sigdig=3, min_sigdig=nil, pad_zeros=false)
|
369
|
+
v = ""
|
370
|
+
if sigdig && sigdig > 0
|
371
|
+
# v = n.to_i.round(sigdig).to_s
|
372
|
+
v = sprintf("%.#{sigdig}f", n)
|
373
|
+
else
|
374
|
+
v = n.to_i.round().to_s
|
375
|
+
end
|
376
|
+
# if pad_zeros != true
|
377
|
+
# v = v.to_f.to_s
|
378
|
+
# end
|
379
|
+
if min_sigdig
|
380
|
+
v_parts = v.split(".")
|
381
|
+
decimal_str = v_parts[1]
|
382
|
+
if decimal_str == nil
|
383
|
+
v = v + "." + ('0' * min_sigdig)
|
384
|
+
elsif decimal_str.size < min_sigdig
|
385
|
+
v = v + ('0' * (min_sigdig - decimal_str.size))
|
386
|
+
end
|
387
|
+
end
|
388
|
+
v
|
370
389
|
end
|
371
390
|
|
372
391
|
def currency_sym(currency)
|
373
|
-
Money::Currency.new((currency || '
|
392
|
+
Money::Currency.new((currency || 'USD').to_sym).symbol
|
374
393
|
end
|
375
394
|
|
376
395
|
# returns currency amount formatted like "$4,5123.00". 0.00 is formatted as "$0"
|
377
396
|
# this is not ideal
|
378
|
-
def
|
397
|
+
def format_currency(amount, currency='USD', opts={})
|
398
|
+
# currency '' should probably error, like money gem does
|
399
|
+
if currency.to_s.empty?
|
400
|
+
currency = 'USD'
|
401
|
+
end
|
402
|
+
currency = currency.to_s.upcase
|
403
|
+
|
379
404
|
amount = amount.to_f
|
380
405
|
if amount == 0
|
381
406
|
return currency_sym(currency).to_s + "0"
|
@@ -383,8 +408,11 @@ def format_money(amount, currency='usd', opts={})
|
|
383
408
|
# # return exponent notation like 3.4e-09
|
384
409
|
# return currency_sym(currency).to_s + "#{amount}"
|
385
410
|
else
|
386
|
-
sigdig = opts[:sigdig] ? opts[:sigdig].to_i : 2
|
387
|
-
|
411
|
+
sigdig = opts[:sigdig] ? opts[:sigdig].to_i : 2 # max decimal digits
|
412
|
+
min_sigdig = opts[:min_sigdig] ? opts[:min_sigdig].to_i : (sigdig || 2) # min decimal digits
|
413
|
+
display_value = format_sig_dig(amount, sigdig, min_sigdig, opts[:pad_zeros])
|
414
|
+
display_value = format_number(display_value) # commas
|
415
|
+
rtn = currency_sym(currency).to_s + display_value
|
388
416
|
if amount.to_i < 0
|
389
417
|
rtn = "(#{rtn})"
|
390
418
|
if opts[:minus_color]
|
@@ -394,3 +422,43 @@ def format_money(amount, currency='usd', opts={})
|
|
394
422
|
rtn
|
395
423
|
end
|
396
424
|
end
|
425
|
+
|
426
|
+
alias :format_money :format_currency
|
427
|
+
|
428
|
+
# def format_money(amount, currency='usd', opts={})
|
429
|
+
# format_currency(amount, currency, opts)
|
430
|
+
# end
|
431
|
+
|
432
|
+
def format_list(items, conjunction="", limit=nil)
|
433
|
+
items = items ? items.clone : []
|
434
|
+
num_items = items.size
|
435
|
+
if limit
|
436
|
+
items = items.first(limit)
|
437
|
+
end
|
438
|
+
last_item = items.pop
|
439
|
+
if items.empty?
|
440
|
+
return "#{last_item}"
|
441
|
+
else
|
442
|
+
if limit && limit < num_items
|
443
|
+
items << last_item
|
444
|
+
last_item = "(#{num_items - items.size} more)"
|
445
|
+
end
|
446
|
+
return items.join(", ") + (conjunction.to_s.empty? ? ", " : " #{conjunction} ") + "#{last_item}"
|
447
|
+
end
|
448
|
+
end
|
449
|
+
|
450
|
+
def anded_list(items, limit=nil)
|
451
|
+
format_list(items, "and", limit)
|
452
|
+
end
|
453
|
+
|
454
|
+
def ored_list(items, limit=nil)
|
455
|
+
format_list(items, "or", limit)
|
456
|
+
end
|
457
|
+
|
458
|
+
def format_name_values(obj)
|
459
|
+
if obj.is_a?(Hash)
|
460
|
+
obj.collect {|k,v| "#{k}: #{v}"}.join(", ")
|
461
|
+
else
|
462
|
+
""
|
463
|
+
end
|
464
|
+
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.2.0
|
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-11-10 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,10 +274,12 @@ 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
|
277
281
|
- lib/morpheus/api/servers_interface.rb
|
282
|
+
- lib/morpheus/api/service_catalog_interface.rb
|
278
283
|
- lib/morpheus/api/service_plans_interface.rb
|
279
284
|
- lib/morpheus/api/setup_interface.rb
|
280
285
|
- lib/morpheus/api/storage_providers_interface.rb
|
@@ -282,6 +287,7 @@ files:
|
|
282
287
|
- lib/morpheus/api/subnets_interface.rb
|
283
288
|
- lib/morpheus/api/task_sets_interface.rb
|
284
289
|
- lib/morpheus/api/tasks_interface.rb
|
290
|
+
- lib/morpheus/api/usage_interface.rb
|
285
291
|
- lib/morpheus/api/user_groups_interface.rb
|
286
292
|
- lib/morpheus/api/user_settings_interface.rb
|
287
293
|
- lib/morpheus/api/user_sources_interface.rb
|
@@ -305,6 +311,7 @@ files:
|
|
305
311
|
- lib/morpheus/cli/blueprints_command.rb
|
306
312
|
- lib/morpheus/cli/boot_scripts_command.rb
|
307
313
|
- lib/morpheus/cli/budgets_command.rb
|
314
|
+
- lib/morpheus/cli/catalog_item_types_command.rb
|
308
315
|
- lib/morpheus/cli/change_password_command.rb
|
309
316
|
- lib/morpheus/cli/cli_command.rb
|
310
317
|
- lib/morpheus/cli/cli_registry.rb
|
@@ -333,6 +340,7 @@ files:
|
|
333
340
|
- lib/morpheus/cli/commands/standard/source_command.rb
|
334
341
|
- lib/morpheus/cli/commands/standard/ssl_verification_command.rb
|
335
342
|
- lib/morpheus/cli/commands/standard/tee_command.rb
|
343
|
+
- lib/morpheus/cli/commands/standard/update_command.rb
|
336
344
|
- lib/morpheus/cli/commands/standard/version_command.rb
|
337
345
|
- lib/morpheus/cli/containers_command.rb
|
338
346
|
- lib/morpheus/cli/credentials.rb
|
@@ -350,6 +358,7 @@ files:
|
|
350
358
|
- lib/morpheus/cli/execution_request_command.rb
|
351
359
|
- lib/morpheus/cli/expression_parser.rb
|
352
360
|
- lib/morpheus/cli/file_copy_request_command.rb
|
361
|
+
- lib/morpheus/cli/forgot_password.rb
|
353
362
|
- lib/morpheus/cli/groups.rb
|
354
363
|
- lib/morpheus/cli/guidance_command.rb
|
355
364
|
- lib/morpheus/cli/health_command.rb
|
@@ -423,8 +432,10 @@ 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
|
438
|
+
- lib/morpheus/cli/service_catalog_command.rb
|
428
439
|
- lib/morpheus/cli/service_plans_command.rb
|
429
440
|
- lib/morpheus/cli/setup.rb
|
430
441
|
- lib/morpheus/cli/shell.rb
|
@@ -432,6 +443,7 @@ files:
|
|
432
443
|
- lib/morpheus/cli/subnets_command.rb
|
433
444
|
- lib/morpheus/cli/tasks.rb
|
434
445
|
- lib/morpheus/cli/tenants_command.rb
|
446
|
+
- lib/morpheus/cli/usage_command.rb
|
435
447
|
- lib/morpheus/cli/user_groups_command.rb
|
436
448
|
- lib/morpheus/cli/user_settings_command.rb
|
437
449
|
- lib/morpheus/cli/user_sources_command.rb
|