morpheus-cli 5.2.4.1 → 5.3.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/cli/activity_command.rb +7 -4
- data/lib/morpheus/cli/dashboard_command.rb +3 -3
- data/lib/morpheus/cli/execution_request_command.rb +15 -5
- data/lib/morpheus/cli/invoices_command.rb +23 -46
- data/lib/morpheus/cli/mixins/print_helper.rb +3 -0
- data/lib/morpheus/cli/remote.rb +2 -1
- data/lib/morpheus/cli/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4c04cf89b798df6d8dba342efe64eec23b5f97bbeef368072d56829c8b517707
|
4
|
+
data.tar.gz: 50a9448b2a167439efbd3f3bcd2f0ea91870681986108d975b058a40b5e14d69
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58613849cca0d5994cc866d6de770f0657b65ccbd3961e352ac934f21600f0888be755c70f54cc964a317fa12201a78800eb59447a664ec28df7eb00799cdc1f
|
7
|
+
data.tar.gz: 01307e6f8b6c91813a948d79b5dedc0914d5731b026d6152ddf1ea59d8ab9a830bca5305a28087623d088787464dc76ee3667673759467a2910723b06645a3b7
|
data/Dockerfile
CHANGED
@@ -22,6 +22,9 @@ class Morpheus::Cli::ActivityCommand
|
|
22
22
|
params, options = {}, {}
|
23
23
|
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
24
24
|
opts.banner = subcommand_usage()
|
25
|
+
opts.on('-a', '--details', "Display more details object id, full date and time, etc." ) do
|
26
|
+
options[:details] = true
|
27
|
+
end
|
25
28
|
opts.on('-t','--type TYPE', "Activity Type eg. Provisioning, Admin") do |val|
|
26
29
|
options[:type] ||= []
|
27
30
|
options[:type] << val
|
@@ -115,20 +118,20 @@ EOT
|
|
115
118
|
# {"SEVERITY" => lambda {|record| format_activity_severity(record['severity']) } },
|
116
119
|
{"TYPE" => lambda {|record| record['activityType'] } },
|
117
120
|
{"NAME" => lambda {|record| record['name'] } },
|
118
|
-
{"RESOURCE" => lambda {|record| "#{record['objectType']} #{record['objectId']}" } },
|
121
|
+
options[:details] ? {"RESOURCE" => lambda {|record| "#{record['objectType']} #{record['objectId']}" } } : nil,
|
119
122
|
{"MESSAGE" => lambda {|record| record['message'] || '' } },
|
120
123
|
{"USER" => lambda {|record| record['user'] ? record['user']['username'] : record['userName'] } },
|
121
124
|
#{"DATE" => lambda {|record| "#{format_duration_ago(record['ts'] || record['timestamp'])}" } },
|
122
125
|
{"DATE" => lambda {|record|
|
123
|
-
# show full time if searching for custom timerange, otherwise the default is to show relative time
|
124
|
-
if params['start'] || params['end'] || params['timeframe']
|
126
|
+
# show full time if searching for custom timerange or --details, otherwise the default is to show relative time
|
127
|
+
if params['start'] || params['end'] || params['timeframe'] || options[:details]
|
125
128
|
"#{format_local_dt(record['ts'] || record['timestamp'])}"
|
126
129
|
else
|
127
130
|
"#{format_duration_ago(record['ts'] || record['timestamp'])}"
|
128
131
|
end
|
129
132
|
|
130
133
|
} },
|
131
|
-
]
|
134
|
+
].compact
|
132
135
|
print as_pretty_table(activity, columns, options)
|
133
136
|
print_results_pagination(json_response)
|
134
137
|
end
|
@@ -272,20 +272,20 @@ This includes instance and backup counts, favorite instances, monitoring and rec
|
|
272
272
|
# {"SEVERITY" => lambda {|record| format_activity_severity(record['severity']) } },
|
273
273
|
{"TYPE" => lambda {|record| record['activityType'] } },
|
274
274
|
{"NAME" => lambda {|record| record['name'] } },
|
275
|
-
{"RESOURCE" => lambda {|record| "#{record['objectType']} #{record['objectId']}" } },
|
275
|
+
options[:details] ? {"RESOURCE" => lambda {|record| "#{record['objectType']} #{record['objectId']}" } } : nil,
|
276
276
|
{"MESSAGE" => lambda {|record| record['message'] || '' } },
|
277
277
|
{"USER" => lambda {|record| record['user'] ? record['user']['username'] : record['userName'] } },
|
278
278
|
#{"DATE" => lambda {|record| "#{format_duration_ago(record['ts'] || record['timestamp'])}" } },
|
279
279
|
{"DATE" => lambda {|record|
|
280
280
|
# show full time if searching for custom timerange, otherwise the default is to show relative time
|
281
|
-
if params['start'] || params['end'] || params['timeframe']
|
281
|
+
if params['start'] || params['end'] || params['timeframe'] || options[:details]
|
282
282
|
"#{format_local_dt(record['ts'] || record['timestamp'])}"
|
283
283
|
else
|
284
284
|
"#{format_duration_ago(record['ts'] || record['timestamp'])}"
|
285
285
|
end
|
286
286
|
|
287
287
|
} },
|
288
|
-
]
|
288
|
+
].compact
|
289
289
|
print as_pretty_table(activity, columns, options)
|
290
290
|
# print_results_pagination(json_response)
|
291
291
|
# print reset,"\n"
|
@@ -31,6 +31,10 @@ class Morpheus::Cli::ExecutionRequestCommand
|
|
31
31
|
handle_subcommand(args)
|
32
32
|
end
|
33
33
|
|
34
|
+
def default_refresh_interval
|
35
|
+
5
|
36
|
+
end
|
37
|
+
|
34
38
|
def get(args)
|
35
39
|
raw_args = args
|
36
40
|
options = {}
|
@@ -134,7 +138,7 @@ class Morpheus::Cli::ExecutionRequestCommand
|
|
134
138
|
options = {}
|
135
139
|
params = {}
|
136
140
|
script_content = nil
|
137
|
-
|
141
|
+
options[:refresh_until_finished] = true
|
138
142
|
optparse = Morpheus::Cli::OptionParser.new do|opts|
|
139
143
|
opts.banner = subcommand_usage("[options]")
|
140
144
|
opts.on('--server ID', String, "Server ID") do |val|
|
@@ -161,8 +165,14 @@ class Morpheus::Cli::ExecutionRequestCommand
|
|
161
165
|
exit 1
|
162
166
|
end
|
163
167
|
end
|
164
|
-
opts.on(
|
165
|
-
|
168
|
+
opts.on('--refresh [SECONDS]', String, "Refresh until execution is finished. Default interval is #{default_refresh_interval} seconds.") do |val|
|
169
|
+
options[:refresh_until_finished] = true
|
170
|
+
if !val.to_s.empty?
|
171
|
+
options[:refresh_interval] = val.to_f
|
172
|
+
end
|
173
|
+
end
|
174
|
+
opts.on(nil, '--no-refresh', "Do not refresh. The default behavior is to refresh until finished." ) do
|
175
|
+
options[:refresh_until_finished] = false
|
166
176
|
end
|
167
177
|
#build_option_type_options(opts, options, add_user_source_option_types())
|
168
178
|
build_common_options(opts, options, [:options, :payload, :json, :dry_run, :quiet, :remote])
|
@@ -212,8 +222,8 @@ class Morpheus::Cli::ExecutionRequestCommand
|
|
212
222
|
end
|
213
223
|
execution_request = json_response['executionRequest']
|
214
224
|
print_green_success "Executing request #{execution_request['uniqueId']}"
|
215
|
-
if
|
216
|
-
get([execution_request['uniqueId'], "--refresh"] + (options[:remote] ? ["-r",options[:remote]] : []))
|
225
|
+
if options[:refresh_until_finished]
|
226
|
+
get([execution_request['uniqueId'], "--refresh", options[:refresh_interval] ? options[:refresh_interval].to_s : nil].compact + (options[:remote] ? ["-r",options[:remote]] : []))
|
217
227
|
else
|
218
228
|
get([execution_request['uniqueId']] + (options[:remote] ? ["-r",options[:remote]] : []))
|
219
229
|
end
|
@@ -140,32 +140,32 @@ class Morpheus::Cli::InvoicesCommand
|
|
140
140
|
# construct params
|
141
141
|
params.merge!(parse_list_options(options))
|
142
142
|
if options[:clouds]
|
143
|
-
cloud_ids = parse_cloud_id_list(options[:clouds])
|
143
|
+
cloud_ids = parse_cloud_id_list(options[:clouds], {}, false, true)
|
144
144
|
return 1, "clouds not found for #{options[:clouds]}" if cloud_ids.nil?
|
145
145
|
params['zoneId'] = cloud_ids
|
146
146
|
end
|
147
147
|
if options[:groups]
|
148
|
-
group_ids = parse_group_id_list(options[:groups])
|
148
|
+
group_ids = parse_group_id_list(options[:groups], {}, false, true)
|
149
149
|
return 1, "groups not found for #{options[:groups]}" if group_ids.nil?
|
150
150
|
params['siteId'] = group_ids
|
151
151
|
end
|
152
152
|
if options[:instances]
|
153
|
-
instance_ids = parse_instance_id_list(options[:instances])
|
153
|
+
instance_ids = parse_instance_id_list(options[:instances], {}, false, true)
|
154
154
|
return 1, "instances not found for #{options[:instances]}" if instance_ids.nil?
|
155
155
|
params['instanceId'] = instance_ids
|
156
156
|
end
|
157
157
|
if options[:servers]
|
158
|
-
server_ids = parse_server_id_list(options[:servers])
|
158
|
+
server_ids = parse_server_id_list(options[:servers], {}, false, true)
|
159
159
|
return 1, "servers not found for #{options[:servers]}" if server_ids.nil?
|
160
160
|
params['serverId'] = server_ids
|
161
161
|
end
|
162
162
|
if options[:users]
|
163
|
-
user_ids = parse_user_id_list(options[:users])
|
163
|
+
user_ids = parse_user_id_list(options[:users], {}, false, true)
|
164
164
|
return 1, "users not found for #{options[:users]}" if user_ids.nil?
|
165
165
|
params['userId'] = user_ids
|
166
166
|
end
|
167
167
|
if options[:projects]
|
168
|
-
project_ids = parse_project_id_list(options[:projects])
|
168
|
+
project_ids = parse_project_id_list(options[:projects], {}, false, true)
|
169
169
|
return 1, "projects not found for #{options[:projects]}" if project_ids.nil?
|
170
170
|
params['projectId'] = project_ids
|
171
171
|
end
|
@@ -636,37 +636,20 @@ Update an invoice.
|
|
636
636
|
params = {}
|
637
637
|
payload = {}
|
638
638
|
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
639
|
-
opts.banner = subcommand_usage("[
|
640
|
-
opts.on( '--
|
641
|
-
payload[:daily] = true
|
642
|
-
end
|
643
|
-
opts.on( '--costing', "Refresh Costing Data" ) do
|
644
|
-
payload[:costing] = true
|
645
|
-
end
|
646
|
-
opts.on( '--current', "Collect the most up to date costing data." ) do
|
647
|
-
payload[:current] = true
|
648
|
-
end
|
649
|
-
opts.on( '--date DATE', String, "Date to collect costing for. By default the cost data is collected for the end of the previous period." ) do |val|
|
650
|
-
payload[:date] = val.to_s
|
651
|
-
end
|
652
|
-
opts.on( '-c', '--cloud CLOUD', "Specify cloud(s) to refresh costing for." ) do |val|
|
639
|
+
opts.banner = subcommand_usage("[-c CLOUD]")
|
640
|
+
opts.on( '-c', '--clouds CLOUD', "Specify clouds to refresh costing for." ) do |val|
|
653
641
|
payload[:clouds] ||= []
|
654
642
|
payload[:clouds] << val
|
655
643
|
end
|
656
|
-
opts.on( '--all', "Refresh costing for all clouds." ) do
|
644
|
+
opts.on( '--all', "Refresh costing for all clouds. This can be used instead of --clouds" ) do
|
657
645
|
payload[:all] = true
|
658
646
|
end
|
659
|
-
|
660
|
-
|
661
|
-
|
647
|
+
opts.on( '--date DATE', String, "Date to collect costing for. By default the cost data is collected for the end of the previous job interval (hour or day)." ) do |val|
|
648
|
+
payload[:date] = val.to_s
|
649
|
+
end
|
662
650
|
build_standard_update_options(opts, options, [:query, :auto_confirm])
|
663
651
|
opts.footer = <<-EOT
|
664
|
-
Refresh
|
665
|
-
By default, nothing is changed.
|
666
|
-
Include --daily to regenerate invoice records.
|
667
|
-
Include --costing to refresh actual costing data.
|
668
|
-
Include --current to refresh costing data for the actual current time.
|
669
|
-
To get the latest invoice costing data, include --daily --costing --current --all
|
652
|
+
Refresh invoice costing data for the specified clouds.
|
670
653
|
EOT
|
671
654
|
end
|
672
655
|
optparse.parse!(args)
|
@@ -677,17 +660,11 @@ EOT
|
|
677
660
|
payload = options[:payload]
|
678
661
|
end
|
679
662
|
payload.deep_merge!(parse_passed_options(options))
|
680
|
-
# --clouds
|
663
|
+
# --clouds lookup ID for name
|
681
664
|
if payload[:clouds]
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
else
|
686
|
-
cloud = find_cloud_option(cloud_id)
|
687
|
-
return 1 if cloud.nil?
|
688
|
-
cloud['id']
|
689
|
-
end
|
690
|
-
}
|
665
|
+
cloud_ids = parse_cloud_id_list(payload[:clouds], {}, false, true)
|
666
|
+
return 1, "clouds not found for #{payload[:clouds]}" if cloud_ids.nil?
|
667
|
+
payload[:clouds] = cloud_ids
|
691
668
|
end
|
692
669
|
# are you sure?
|
693
670
|
unless options[:yes] || Morpheus::Cli::OptionTypes.confirm("Are you sure you want to refresh invoices?")
|
@@ -831,32 +808,32 @@ EOT
|
|
831
808
|
# construct params
|
832
809
|
params.merge!(parse_list_options(options))
|
833
810
|
if options[:clouds]
|
834
|
-
cloud_ids = parse_cloud_id_list(options[:clouds])
|
811
|
+
cloud_ids = parse_cloud_id_list(options[:clouds], {}, false, true)
|
835
812
|
return 1, "clouds not found for #{options[:clouds]}" if cloud_ids.nil?
|
836
813
|
params['zoneId'] = cloud_ids
|
837
814
|
end
|
838
815
|
if options[:groups]
|
839
|
-
group_ids = parse_group_id_list(options[:groups])
|
816
|
+
group_ids = parse_group_id_list(options[:groups], {}, false, true)
|
840
817
|
return 1, "groups not found for #{options[:groups]}" if group_ids.nil?
|
841
818
|
params['siteId'] = group_ids
|
842
819
|
end
|
843
820
|
if options[:instances]
|
844
|
-
instance_ids = parse_instance_id_list(options[:instances])
|
821
|
+
instance_ids = parse_instance_id_list(options[:instances], {}, false, true)
|
845
822
|
return 1, "instances not found for #{options[:instances]}" if instance_ids.nil?
|
846
823
|
params['instanceId'] = instance_ids
|
847
824
|
end
|
848
825
|
if options[:servers]
|
849
|
-
server_ids = parse_server_id_list(options[:servers])
|
826
|
+
server_ids = parse_server_id_list(options[:servers], {}, false, true)
|
850
827
|
return 1, "servers not found for #{options[:servers]}" if server_ids.nil?
|
851
828
|
params['serverId'] = server_ids
|
852
829
|
end
|
853
830
|
if options[:users]
|
854
|
-
user_ids = parse_user_id_list(options[:users])
|
831
|
+
user_ids = parse_user_id_list(options[:users], {}, false, true)
|
855
832
|
return 1, "users not found for #{options[:users]}" if user_ids.nil?
|
856
833
|
params['userId'] = user_ids
|
857
834
|
end
|
858
835
|
if options[:projects]
|
859
|
-
project_ids = parse_project_id_list(options[:projects])
|
836
|
+
project_ids = parse_project_id_list(options[:projects], {}, false, true)
|
860
837
|
return 1, "projects not found for #{options[:projects]}" if project_ids.nil?
|
861
838
|
params['projectId'] = project_ids
|
862
839
|
end
|
@@ -720,6 +720,7 @@ module Morpheus::Cli::PrintHelper
|
|
720
720
|
columns.each do |column_def|
|
721
721
|
# r << column_def.display_method.respond_to?(:call) ? column_def.display_method.call(row_data) : get_object_value(row_data, column_def.display_method)
|
722
722
|
value = column_def.display_method.call(row_data)
|
723
|
+
value = JSON.fast_generate(value) if value.is_a?(Hash) || value.is_a?(Array)
|
723
724
|
row << value
|
724
725
|
end
|
725
726
|
rows << row
|
@@ -802,6 +803,7 @@ module Morpheus::Cli::PrintHelper
|
|
802
803
|
columns.each do |column_def|
|
803
804
|
# r << column_def.display_method.respond_to?(:call) ? column_def.display_method.call(row_data) : get_object_value(row_data, column_def.display_method)
|
804
805
|
value = column_def.display_method.call(row_data)
|
806
|
+
value = JSON.fast_generate(value) if value.is_a?(Hash) || value.is_a?(Array)
|
805
807
|
row << value
|
806
808
|
end
|
807
809
|
rows << row
|
@@ -879,6 +881,7 @@ module Morpheus::Cli::PrintHelper
|
|
879
881
|
label = label.upcase if ALL_LABELS_UPCASE
|
880
882
|
# value = get_object_value(obj, column_def.display_method)
|
881
883
|
value = column_def.display_method.call(obj)
|
884
|
+
value = JSON.fast_generate(value) if value.is_a?(Hash) || value.is_a?(Array)
|
882
885
|
if label.size > max_label_width
|
883
886
|
max_label_width = label.size
|
884
887
|
end
|
data/lib/morpheus/cli/remote.rb
CHANGED
@@ -1276,7 +1276,8 @@ EOT
|
|
1276
1276
|
|
1277
1277
|
def format_remote_details(appliance, options={})
|
1278
1278
|
columns = {
|
1279
|
-
"Name" => :name,
|
1279
|
+
#"Name" => :name,
|
1280
|
+
"Name" => lambda {|it| it[:name].to_s },
|
1280
1281
|
#"Name" => lambda {|it| it[:active] ? "#{it[:name]} #{bold}(current)#{reset}#{cyan}" : it[:name] },
|
1281
1282
|
"URL" => lambda {|it| it[:url] || it[:host] },
|
1282
1283
|
#"Status" => lambda {|it| format_appliance_status(it, cyan) },
|
data/lib/morpheus/cli/version.rb
CHANGED
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: 5.
|
4
|
+
version: 5.3.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: 2021-02-
|
14
|
+
date: 2021-02-25 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: bundler
|