morpheus-cli 6.3.3 → 7.0.0
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 +8 -0
- data/lib/morpheus/api/backup_restores_interface.rb +4 -0
- data/lib/morpheus/api/backup_types_interface.rb +9 -0
- data/lib/morpheus/api/catalog_item_types_interface.rb +1 -2
- data/lib/morpheus/api/hub_interface.rb +25 -0
- data/lib/morpheus/cli/cli_command.rb +3 -0
- data/lib/morpheus/cli/commands/backup_types_command.rb +53 -0
- data/lib/morpheus/cli/commands/backups_command.rb +100 -21
- data/lib/morpheus/cli/commands/catalog_item_types_command.rb +3 -31
- data/lib/morpheus/cli/commands/clouds.rb +22 -4
- data/lib/morpheus/cli/commands/curl_command.rb +1 -1
- data/lib/morpheus/cli/commands/groups.rb +50 -7
- data/lib/morpheus/cli/commands/hub.rb +215 -0
- data/lib/morpheus/cli/commands/jobs_command.rb +10 -6
- data/lib/morpheus/cli/commands/library_forms_command.rb +1 -1
- data/lib/morpheus/cli/commands/library_option_lists_command.rb +1 -1
- data/lib/morpheus/cli/commands/library_option_types_command.rb +1 -1
- data/lib/morpheus/cli/commands/license.rb +151 -86
- data/lib/morpheus/cli/commands/networks_command.rb +1 -1
- data/lib/morpheus/cli/commands/security_packages.rb +1 -1
- data/lib/morpheus/cli/commands/setup.rb +1 -1
- data/lib/morpheus/cli/commands/tasks.rb +2 -2
- data/lib/morpheus/cli/commands/user_settings_command.rb +10 -1
- data/lib/morpheus/cli/mixins/backups_helper.rb +4 -3
- data/lib/morpheus/cli/mixins/jobs_helper.rb +3 -0
- data/lib/morpheus/cli/mixins/print_helper.rb +80 -2
- data/lib/morpheus/cli/option_types.rb +9 -2
- data/lib/morpheus/cli/version.rb +1 -1
- data/lib/morpheus/routes.rb +2 -1
- metadata +6 -2
@@ -119,10 +119,10 @@ module Morpheus::Cli::BackupsHelper
|
|
119
119
|
"Backup" => lambda {|it| it['backup']['name'] rescue '' },
|
120
120
|
"Status" => lambda {|it| format_backup_result_status(it) },
|
121
121
|
#"Duration" => lambda {|it| format_duration(it['startDate'], it['endDate']) },
|
122
|
-
"Duration" => lambda {|it| format_duration_milliseconds(it['durationMillis']) },
|
122
|
+
"Duration" => lambda {|it| format_duration_milliseconds(it['durationMillis']) if it['durationMillis'].to_i > 0 },
|
123
123
|
"Start Date" => lambda {|it| format_local_dt(it['startDate']) },
|
124
124
|
"End Date" => lambda {|it| format_local_dt(it['endDate']) },
|
125
|
-
"Size" => lambda {|it| format_bytes(it['sizeInMb'], 'MB') },
|
125
|
+
"Size" => lambda {|it| it['sizeInMb'].to_i != 0 ? format_bytes(it['sizeInMb'], 'MB') : '' },
|
126
126
|
}
|
127
127
|
end
|
128
128
|
|
@@ -155,7 +155,7 @@ module Morpheus::Cli::BackupsHelper
|
|
155
155
|
"Target" => lambda {|it| it['instance']['name'] rescue '' },
|
156
156
|
"Status" => lambda {|it| format_backup_result_status(it) },
|
157
157
|
#"Duration" => lambda {|it| format_duration(it['startDate'], it['endDate']) },
|
158
|
-
"Duration" => lambda {|it| format_duration_milliseconds(it['durationMillis']) },
|
158
|
+
"Duration" => lambda {|it| format_duration_milliseconds(it['durationMillis']) if it['durationMillis'].to_i > 0 },
|
159
159
|
"Start Date" => lambda {|it| format_local_dt(it['startDate']) },
|
160
160
|
"End Date" => lambda {|it| format_local_dt(it['endDate']) },
|
161
161
|
}
|
@@ -168,4 +168,5 @@ module Morpheus::Cli::BackupsHelper
|
|
168
168
|
def format_backup_restore_status(backup_restore, return_color=cyan)
|
169
169
|
format_backup_result_status(backup_restore, return_color)
|
170
170
|
end
|
171
|
+
|
171
172
|
end
|
@@ -84,6 +84,7 @@ module Morpheus::Cli::JobsHelper
|
|
84
84
|
end
|
85
85
|
if process_data[:error] && process_data[:error].strip.length > 0
|
86
86
|
print_h2 "Error"
|
87
|
+
print red
|
87
88
|
print (process['message'] || process['error']).to_s.strip
|
88
89
|
print reset,"\n"
|
89
90
|
end
|
@@ -129,6 +130,8 @@ module Morpheus::Cli::JobsHelper
|
|
129
130
|
out << "#{green}#{status_string.upcase}"
|
130
131
|
elsif ['error', 'offline', 'failed', 'failure'].include?(status_string)
|
131
132
|
out << "#{red}#{status_string.upcase}"
|
133
|
+
elsif ['running'].include?(status_string)
|
134
|
+
out << "#{cyan}#{status_string.upcase}"
|
132
135
|
else
|
133
136
|
out << "#{yellow}#{status_string.upcase}"
|
134
137
|
end
|
@@ -514,7 +514,8 @@ module Morpheus::Cli::PrintHelper
|
|
514
514
|
else
|
515
515
|
percent = ((used_value.to_f / max_value.to_f) * 100)
|
516
516
|
end
|
517
|
-
|
517
|
+
unlimited_label = opts[:unlimited_label] || "n/a"
|
518
|
+
percent_label = ((used_value.nil? || max_value.to_f == 0.0) ? unlimited_label : "#{percent.round(percent_sigdig)}%").rjust(6, ' ')
|
518
519
|
bar_display = ""
|
519
520
|
if percent > 100
|
520
521
|
max_bars.times { bars << "|" }
|
@@ -1000,6 +1001,83 @@ module Morpheus::Cli::PrintHelper
|
|
1000
1001
|
print as_description_list(obj, columns, opts)
|
1001
1002
|
end
|
1002
1003
|
|
1004
|
+
def print_pretty_details(obj, opts={})
|
1005
|
+
print as_pretty_details(obj, opts)
|
1006
|
+
end
|
1007
|
+
|
1008
|
+
def as_pretty_details(obj, opts={})
|
1009
|
+
print as_pretty_details(obj, opts.merge({pretty: true}))
|
1010
|
+
end
|
1011
|
+
|
1012
|
+
def print_details(obj, opts={})
|
1013
|
+
print as_details(obj, opts)
|
1014
|
+
end
|
1015
|
+
|
1016
|
+
def as_details(obj, opts={})
|
1017
|
+
#return "" if obj.nil?
|
1018
|
+
columns = {}
|
1019
|
+
keys = obj.keys
|
1020
|
+
if opts[:sort]
|
1021
|
+
keys.sort!
|
1022
|
+
end
|
1023
|
+
keys.each do |key|
|
1024
|
+
display_proc = nil
|
1025
|
+
if opts[:column_format] && opts[:column_format].key?(key.to_sym)
|
1026
|
+
display_proc = opts[:column_format][key.to_sym]
|
1027
|
+
else
|
1028
|
+
display_proc = lambda {|it| format_detail_value(it[key]) }
|
1029
|
+
end
|
1030
|
+
label = opts[:pretty] ? key.to_s.titleize : key.to_s
|
1031
|
+
columns[label] = display_proc
|
1032
|
+
end
|
1033
|
+
as_description_list(obj, columns, opts)
|
1034
|
+
end
|
1035
|
+
|
1036
|
+
def format_detail_value(value)
|
1037
|
+
rtn = value
|
1038
|
+
if value.is_a?(Array)
|
1039
|
+
# show the first three objects
|
1040
|
+
rtn = value.first(3).collect { |row| format_abbreviated_value(row) }.join(", ")
|
1041
|
+
elsif value.is_a?(Hash)
|
1042
|
+
# show the first three properties
|
1043
|
+
keys = values.keys.select { |key| value[key].is_a?(Numeric) || value[key].is_a?(String) }.first(3)
|
1044
|
+
rtn = keys.collect { |key|
|
1045
|
+
"#{key.to_s.titleize}: #{format_abbreviated_value(value[key])}"
|
1046
|
+
}.join(", ")
|
1047
|
+
elsif value.is_a?(TrueClass) || value.is_a?(FalseClass)
|
1048
|
+
rtn = format_boolean(value)
|
1049
|
+
else
|
1050
|
+
rtn = value.to_s
|
1051
|
+
end
|
1052
|
+
return rtn
|
1053
|
+
end
|
1054
|
+
|
1055
|
+
def format_abbreviated_value(value)
|
1056
|
+
if value.is_a?(Hash)
|
1057
|
+
if value.keys.size == 0
|
1058
|
+
"{}"
|
1059
|
+
else
|
1060
|
+
# show the first three properties
|
1061
|
+
keys = value.keys.select { |key| value[key].is_a?(Numeric) || value[key].is_a?(String) }.first(3)
|
1062
|
+
keys.collect { |key|
|
1063
|
+
"#{key.to_s.titleize}: #{value[key]}"
|
1064
|
+
}.join(", ")
|
1065
|
+
end
|
1066
|
+
elsif value.is_a?(Array)
|
1067
|
+
if value.size == 0
|
1068
|
+
return "[]"
|
1069
|
+
elsif obj.size == 1
|
1070
|
+
"[(#{obj.size})]"
|
1071
|
+
else
|
1072
|
+
"[(#{obj.size})]"
|
1073
|
+
end
|
1074
|
+
elsif value.is_a?(TrueClass) || value.is_a?(FalseClass)
|
1075
|
+
format_boolean(value)
|
1076
|
+
else
|
1077
|
+
value.to_s
|
1078
|
+
end
|
1079
|
+
end
|
1080
|
+
|
1003
1081
|
# build_column_definitions constructs an Array of column definitions (OpenStruct)
|
1004
1082
|
# Each column is defined by a label (String), and a display_method (Proc)
|
1005
1083
|
#
|
@@ -1059,7 +1137,7 @@ module Morpheus::Cli::PrintHelper
|
|
1059
1137
|
column_def.display_method = lambda {|data| get_object_value(data, v) }
|
1060
1138
|
elsif v.is_a?(Proc)
|
1061
1139
|
column_def.display_method = v
|
1062
|
-
elsif v.is_a?(Hash) || v.is_a?(
|
1140
|
+
elsif v.is_a?(Hash) || v.is_a?(OpenStruct)
|
1063
1141
|
if v[:display_name] || v[:label]
|
1064
1142
|
column_def.label = v[:display_name] || v[:label]
|
1065
1143
|
end
|
@@ -1113,8 +1113,15 @@ module Morpheus
|
|
1113
1113
|
value_found = false
|
1114
1114
|
value = nil
|
1115
1115
|
while !value_found do
|
1116
|
-
print "#{option_type['fieldLabel']}#{option_type['fieldAddOn'] ? (' (' + option_type['fieldAddOn'] + ') ') : '' }#{!option_type['required'] ? ' (optional)' : ''}#{!option_type['defaultValue'].to_s.empty? ? ' ['+option_type['defaultValue'].to_s+']' : ''}: "
|
1117
|
-
input = $stdin.gets.chomp!
|
1116
|
+
# print "#{option_type['fieldLabel']}#{option_type['fieldAddOn'] ? (' (' + option_type['fieldAddOn'] + ') ') : '' }#{!option_type['required'] ? ' (optional)' : ''}#{!option_type['defaultValue'].to_s.empty? ? ' ['+option_type['defaultValue'].to_s+']' : ''}: "
|
1117
|
+
# input = $stdin.gets.chomp!
|
1118
|
+
Readline.completion_append_character = ""
|
1119
|
+
Readline.basic_word_break_characters = ''
|
1120
|
+
Readline.completion_proc = nil
|
1121
|
+
prompt_label = "#{option_type['fieldLabel']}#{option_type['fieldAddOn'] ? (' (' + option_type['fieldAddOn'] + ') ') : '' }#{!option_type['required'] ? ' (optional)' : ''}#{!option_type['defaultValue'].to_s.empty? ? ' ['+option_type['defaultValue'].to_s+']' : ''}: "
|
1122
|
+
input = Readline.readline(prompt_label, false).to_s
|
1123
|
+
input = input.chomp #.strip
|
1124
|
+
|
1118
1125
|
value = input.empty? ? option_type['defaultValue'] : input
|
1119
1126
|
if input == '?'
|
1120
1127
|
help_prompt(option_type)
|
data/lib/morpheus/cli/version.rb
CHANGED
data/lib/morpheus/routes.rb
CHANGED
@@ -223,9 +223,10 @@ module Morpheus::Routes
|
|
223
223
|
path = "/admin/settings/environments"
|
224
224
|
when "software-licenses"
|
225
225
|
path = "/admin/settings/software-licenses"
|
226
|
-
when "license"
|
226
|
+
when "license","licenses"
|
227
227
|
path = "/admin/settings/#!license"
|
228
228
|
end
|
229
|
+
# todo: this is weird, fix it so "view license matches license before software-licenses without needing the above alias..
|
229
230
|
# dasherize path and attempt to match the plural first
|
230
231
|
plural_path = path.pluralize
|
231
232
|
paths = [path.dasherize]
|
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: 7.0.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: 2024-
|
14
|
+
date: 2024-03-21 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: bundler
|
@@ -204,6 +204,7 @@ files:
|
|
204
204
|
- lib/morpheus/api/backup_service_types_interface.rb
|
205
205
|
- lib/morpheus/api/backup_services_interface.rb
|
206
206
|
- lib/morpheus/api/backup_settings_interface.rb
|
207
|
+
- lib/morpheus/api/backup_types_interface.rb
|
207
208
|
- lib/morpheus/api/backups_interface.rb
|
208
209
|
- lib/morpheus/api/billing_interface.rb
|
209
210
|
- lib/morpheus/api/blueprints_interface.rb
|
@@ -238,6 +239,7 @@ files:
|
|
238
239
|
- lib/morpheus/api/guidance_interface.rb
|
239
240
|
- lib/morpheus/api/guidance_settings_interface.rb
|
240
241
|
- lib/morpheus/api/health_interface.rb
|
242
|
+
- lib/morpheus/api/hub_interface.rb
|
241
243
|
- lib/morpheus/api/image_builder_boot_scripts_interface.rb
|
242
244
|
- lib/morpheus/api/image_builder_image_builds_interface.rb
|
243
245
|
- lib/morpheus/api/image_builder_interface.rb
|
@@ -381,6 +383,7 @@ files:
|
|
381
383
|
- lib/morpheus/cli/commands/backup_results_command.rb
|
382
384
|
- lib/morpheus/cli/commands/backup_services_command.rb
|
383
385
|
- lib/morpheus/cli/commands/backup_settings_command.rb
|
386
|
+
- lib/morpheus/cli/commands/backup_types_command.rb
|
384
387
|
- lib/morpheus/cli/commands/backups_command.rb
|
385
388
|
- lib/morpheus/cli/commands/benchmark_command.rb
|
386
389
|
- lib/morpheus/cli/commands/blueprints_command.rb
|
@@ -424,6 +427,7 @@ files:
|
|
424
427
|
- lib/morpheus/cli/commands/health_command.rb
|
425
428
|
- lib/morpheus/cli/commands/history_command.rb
|
426
429
|
- lib/morpheus/cli/commands/hosts.rb
|
430
|
+
- lib/morpheus/cli/commands/hub.rb
|
427
431
|
- lib/morpheus/cli/commands/image_builder_command.rb
|
428
432
|
- lib/morpheus/cli/commands/instance_types.rb
|
429
433
|
- lib/morpheus/cli/commands/instances.rb
|