morpheus-cli 6.1.2 → 6.2.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_jobs_interface.rb +4 -0
- data/lib/morpheus/api/backup_restores_interface.rb +23 -0
- data/lib/morpheus/api/backup_results_interface.rb +28 -0
- data/lib/morpheus/api/backups_interface.rb +5 -4
- data/lib/morpheus/cli/cli_command.rb +172 -45
- data/lib/morpheus/cli/commands/appliance_settings_command.rb +7 -19
- data/lib/morpheus/cli/commands/apps.rb +1 -1
- data/lib/morpheus/cli/commands/backup_jobs_command.rb +77 -20
- data/lib/morpheus/cli/commands/backup_restores_command.rb +144 -0
- data/lib/morpheus/cli/commands/backup_results_command.rb +149 -0
- data/lib/morpheus/cli/commands/backups_command.rb +214 -93
- data/lib/morpheus/cli/commands/hosts.rb +15 -2
- data/lib/morpheus/cli/commands/instances.rb +18 -3
- data/lib/morpheus/cli/commands/service_catalog_command.rb +50 -83
- data/lib/morpheus/cli/commands/view.rb +20 -20
- data/lib/morpheus/cli/mixins/backups_helper.rb +58 -0
- data/lib/morpheus/cli/mixins/print_helper.rb +27 -4
- data/lib/morpheus/cli/option_types.rb +10 -7
- data/lib/morpheus/cli/version.rb +1 -1
- data/lib/morpheus/formatters.rb +1 -1
- data/lib/morpheus/routes.rb +18 -3
- metadata +6 -2
@@ -10,7 +10,7 @@ class Morpheus::Cli::BackupJobsCommand
|
|
10
10
|
|
11
11
|
set_command_name :'backup-jobs'
|
12
12
|
|
13
|
-
register_subcommands :list, :get, :add, :update, :remove, :
|
13
|
+
register_subcommands :list, :get, :add, :update, :remove, :execute
|
14
14
|
|
15
15
|
def connect(opts)
|
16
16
|
@api_client = establish_remote_appliance_connection(opts)
|
@@ -27,7 +27,7 @@ class Morpheus::Cli::BackupJobsCommand
|
|
27
27
|
params = {}
|
28
28
|
ref_ids = []
|
29
29
|
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
30
|
-
opts.banner =
|
30
|
+
opts.banner = "Usage: #{prog_name} backups list-jobs [search]"
|
31
31
|
build_standard_list_options(opts, options)
|
32
32
|
opts.footer = "List backup jobs."
|
33
33
|
end
|
@@ -50,7 +50,7 @@ class Morpheus::Cli::BackupJobsCommand
|
|
50
50
|
if backup_jobs.empty?
|
51
51
|
print yellow,"No backup jobs found.",reset,"\n"
|
52
52
|
else
|
53
|
-
print as_pretty_table(backup_jobs,
|
53
|
+
print as_pretty_table(backup_jobs, backup_job_list_column_definitions.upcase_keys!, options)
|
54
54
|
print_results_pagination(json_response)
|
55
55
|
end
|
56
56
|
print reset,"\n"
|
@@ -62,7 +62,8 @@ class Morpheus::Cli::BackupJobsCommand
|
|
62
62
|
params = {}
|
63
63
|
options = {}
|
64
64
|
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
65
|
-
opts.banner = subcommand_usage("[job]")
|
65
|
+
# opts.banner = subcommand_usage("[job]")
|
66
|
+
opts.banner = "Usage: #{prog_name} backups get-job [job]"
|
66
67
|
build_standard_get_options(opts, options)
|
67
68
|
opts.footer = <<-EOT
|
68
69
|
Get details about a specific backup job.
|
@@ -99,9 +100,21 @@ EOT
|
|
99
100
|
json_response = @backup_jobs_interface.get(id, params)
|
100
101
|
backup_job = json_response['job']
|
101
102
|
render_response(json_response, options, 'job') do
|
103
|
+
backup_job = json_response['job']
|
104
|
+
backups = backup_job['backups'] || []
|
102
105
|
print_h1 "Backup Job Details", [], options
|
103
106
|
print cyan
|
104
|
-
|
107
|
+
columns = backup_job_column_definitions
|
108
|
+
columns.delete("Provider") if backup_job['backupProvider'].nil?
|
109
|
+
columns.delete("Repository") if backup_job['backupRepository'].nil?
|
110
|
+
print_description_list(columns, backup_job)
|
111
|
+
# print reset,"\n"
|
112
|
+
print_h2 "Backups", options
|
113
|
+
if backups.empty?
|
114
|
+
print yellow,"This job has no backups associated with it.",reset,"\n"
|
115
|
+
else
|
116
|
+
print as_pretty_table(backups, [:id, :name], options)
|
117
|
+
end
|
105
118
|
print reset,"\n"
|
106
119
|
end
|
107
120
|
return 0, nil
|
@@ -111,7 +124,7 @@ EOT
|
|
111
124
|
options = {}
|
112
125
|
params = {}
|
113
126
|
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
114
|
-
opts.banner =
|
127
|
+
opts.banner = "Usage: #{prog_name} backups add-job [name]"
|
115
128
|
build_option_type_options(opts, options, add_backup_job_option_types)
|
116
129
|
build_option_type_options(opts, options, add_backup_job_advanced_option_types)
|
117
130
|
build_standard_add_options(opts, options)
|
@@ -131,6 +144,9 @@ EOT
|
|
131
144
|
payload.deep_merge!({'job' => parse_passed_options(options)})
|
132
145
|
v_prompt = Morpheus::Cli::OptionTypes.prompt(add_backup_job_option_types(), options[:options], @api_client, options[:params])
|
133
146
|
params.deep_merge!(v_prompt)
|
147
|
+
if params['scheduleId'] == 'manual' || params['scheduleId'] == ''
|
148
|
+
params['scheduleId'] = nil
|
149
|
+
end
|
134
150
|
advanced_config = Morpheus::Cli::OptionTypes.no_prompt(add_backup_job_advanced_option_types, options[:options], @api_client, options[:params])
|
135
151
|
advanced_config.deep_compact!
|
136
152
|
params.deep_merge!(advanced_config)
|
@@ -155,7 +171,7 @@ EOT
|
|
155
171
|
params = {}
|
156
172
|
payload = {}
|
157
173
|
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
158
|
-
opts.banner =
|
174
|
+
opts.banner = "Usage: #{prog_name} backups update-job [job]"
|
159
175
|
build_option_type_options(opts, options, update_backup_job_option_types)
|
160
176
|
build_option_type_options(opts, options, update_backup_job_advanced_option_types)
|
161
177
|
build_standard_update_options(opts, options)
|
@@ -177,6 +193,9 @@ EOT
|
|
177
193
|
payload.deep_merge!({'job' => parse_passed_options(options)})
|
178
194
|
v_prompt = Morpheus::Cli::OptionTypes.no_prompt(update_backup_job_option_types, options[:options], @api_client, options[:params])
|
179
195
|
v_prompt.deep_compact!
|
196
|
+
if v_prompt['scheduleId'] == 'manual' || v_prompt['scheduleId'] == ''
|
197
|
+
v_prompt['scheduleId'] = nil
|
198
|
+
end
|
180
199
|
params.deep_merge!(v_prompt)
|
181
200
|
advanced_config = Morpheus::Cli::OptionTypes.no_prompt(update_backup_job_advanced_option_types, options[:options], @api_client, options[:params])
|
182
201
|
advanced_config.deep_compact!
|
@@ -204,7 +223,7 @@ EOT
|
|
204
223
|
options = {}
|
205
224
|
params = {}
|
206
225
|
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
207
|
-
opts.banner =
|
226
|
+
opts.banner = "Usage: #{prog_name} backups remove-job [job]"
|
208
227
|
build_standard_remove_options(opts, options)
|
209
228
|
opts.footer = <<-EOT
|
210
229
|
Delete a backup job.
|
@@ -216,28 +235,63 @@ EOT
|
|
216
235
|
connect(options)
|
217
236
|
backup_job = find_backup_job_by_name_or_id(args[0])
|
218
237
|
return 1 if backup_job.nil?
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
238
|
+
parse_options(options, params)
|
239
|
+
confirm!("Are you sure you want to delete the backup job #{backup_job['name']}?", options)
|
240
|
+
execute_api(@backup_jobs_interface, :destroy, [backup_job['id']], options) do |json_response|
|
241
|
+
print_green_success "Removed backup job #{backup_job['name']}"
|
223
242
|
end
|
224
|
-
|
225
|
-
|
243
|
+
end
|
244
|
+
|
245
|
+
def execute(args)
|
246
|
+
options = {}
|
247
|
+
params = {}
|
248
|
+
payload = {}
|
249
|
+
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
250
|
+
opts.banner = "Usage: #{prog_name} backups execute-job [job]"
|
251
|
+
build_standard_post_options(opts, options)
|
252
|
+
opts.footer = <<-EOT
|
253
|
+
Execute a backup job to create a new backup result for all the backups in the job.
|
254
|
+
[job] is required. This is the name or id of a backup job.
|
255
|
+
EOT
|
226
256
|
end
|
227
|
-
|
228
|
-
|
229
|
-
|
257
|
+
optparse.parse!(args)
|
258
|
+
verify_args!(args:args, optparse:optparse, count:1)
|
259
|
+
connect(options)
|
260
|
+
backup_job = find_backup_job_by_name_or_id(args[0])
|
261
|
+
return 1 if backup_job.nil?
|
262
|
+
parse_payload(options)
|
263
|
+
execute_api(@backup_jobs_interface, :execute_job, [backup_job['id']], options, 'job') do |json_response|
|
264
|
+
print_green_success "Executing backup job #{backup_job['name']}"
|
265
|
+
# should get the result maybe, or could even support refreshing until it is complete...
|
266
|
+
# return _get(backup_job["id"], {}, options)
|
230
267
|
end
|
231
|
-
return 0, nil
|
232
268
|
end
|
233
269
|
|
234
270
|
private
|
235
271
|
|
236
272
|
def backup_job_column_definitions()
|
273
|
+
{
|
274
|
+
"ID" => 'id',
|
275
|
+
"Name" => 'name',
|
276
|
+
"Code" => 'code',
|
277
|
+
"Schedule" => lambda {|it| it['schedule']['name'] rescue '' },
|
278
|
+
"Next" => lambda {|it| format_local_dt(it['nextFire']) },
|
279
|
+
"Retention Count" => lambda {|it| it['retentionCount'] rescue '' },
|
280
|
+
"Provider" => lambda {|it| it['backupProvider']['name'] rescue '' },
|
281
|
+
"Repository" => lambda {|it| it['backupRepository']['name'] rescue '' },
|
282
|
+
"Source" => lambda {|it| it['source'] },
|
283
|
+
"Created" => lambda {|it| format_local_dt(it['dateCreated']) },
|
284
|
+
"Updated" => lambda {|it| format_local_dt(it['lastUpdated']) },
|
285
|
+
}
|
286
|
+
end
|
287
|
+
|
288
|
+
def backup_job_list_column_definitions()
|
237
289
|
{
|
238
290
|
"ID" => 'id',
|
239
291
|
"Name" => 'name',
|
240
292
|
"Schedule" => lambda {|it| it['schedule']['name'] rescue '' },
|
293
|
+
"Next" => lambda {|it| format_local_dt(it['nextFire']) },
|
294
|
+
"Retention Count" => lambda {|it| it['retentionCount'] rescue '' },
|
241
295
|
"Created" => lambda {|it| format_local_dt(it['dateCreated']) },
|
242
296
|
"Updated" => lambda {|it| format_local_dt(it['lastUpdated']) },
|
243
297
|
}
|
@@ -246,9 +300,12 @@ EOT
|
|
246
300
|
def add_backup_job_option_types
|
247
301
|
[
|
248
302
|
{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'displayOrder' => 1},
|
249
|
-
|
303
|
+
{'fieldName' => 'code', 'fieldLabel' => 'Code', 'type' => 'text', 'required' => false, 'displayOrder' => 2},
|
250
304
|
{'fieldName' => 'retentionCount', 'fieldLabel' => 'Retention Count', 'type' => 'number', 'displayOrder' => 3},
|
251
|
-
{'fieldName' => 'scheduleId', 'fieldLabel' => 'Schedule', 'type' => 'select', 'optionSource' =>
|
305
|
+
{'fieldName' => 'scheduleId', 'fieldLabel' => 'Schedule', 'type' => 'select', 'optionSource' => lambda { |api_client, api_params|
|
306
|
+
schedules = api_client.options.options_for_source('executeSchedules',{})['data']
|
307
|
+
[{"name" => "Manual", "value" => "manual"}] + schedules
|
308
|
+
}, 'displayOrder' => 4},
|
252
309
|
]
|
253
310
|
end
|
254
311
|
|
@@ -0,0 +1,144 @@
|
|
1
|
+
require 'morpheus/cli/cli_command'
|
2
|
+
|
3
|
+
class Morpheus::Cli::BackupRestoresCommand
|
4
|
+
include Morpheus::Cli::CliCommand
|
5
|
+
include Morpheus::Cli::BackupsHelper
|
6
|
+
# include Morpheus::Cli::ProvisioningHelper
|
7
|
+
# include Morpheus::Cli::OptionSourceHelper
|
8
|
+
|
9
|
+
set_command_hidden # hide until ready
|
10
|
+
|
11
|
+
set_command_name :'backup-restores'
|
12
|
+
|
13
|
+
register_subcommands :list, :get, :remove
|
14
|
+
|
15
|
+
def connect(opts)
|
16
|
+
@api_client = establish_remote_appliance_connection(opts)
|
17
|
+
@backups_interface = @api_client.backups
|
18
|
+
@backup_restores_interface = @api_client.backup_restores
|
19
|
+
end
|
20
|
+
|
21
|
+
def handle(args)
|
22
|
+
handle_subcommand(args)
|
23
|
+
end
|
24
|
+
|
25
|
+
def list(args)
|
26
|
+
options = {}
|
27
|
+
params = {}
|
28
|
+
ref_ids = []
|
29
|
+
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
30
|
+
opts.banner = "Usage: #{prog_name} backups list-restores [search]"
|
31
|
+
build_standard_list_options(opts, options)
|
32
|
+
opts.footer = "List backup restores."
|
33
|
+
end
|
34
|
+
optparse.parse!(args)
|
35
|
+
connect(options)
|
36
|
+
# verify_args!(args:args, optparse:optparse, count:0)
|
37
|
+
if args.count > 0
|
38
|
+
options[:phrase] = args.join(" ")
|
39
|
+
end
|
40
|
+
params.merge!(parse_list_options(options))
|
41
|
+
@backup_restores_interface.setopts(options)
|
42
|
+
if options[:dry_run]
|
43
|
+
print_dry_run @backup_restores_interface.dry.list(params)
|
44
|
+
return
|
45
|
+
end
|
46
|
+
json_response = @backup_restores_interface.list(params)
|
47
|
+
backup_restores = json_response['restores']
|
48
|
+
render_response(json_response, options, 'restores') do
|
49
|
+
print_h1 "Morpheus Backup Restores", parse_list_subtitles(options), options
|
50
|
+
if backup_restores.empty?
|
51
|
+
print yellow,"No backup restores found.",reset,"\n"
|
52
|
+
else
|
53
|
+
print as_pretty_table(backup_restores, backup_restore_list_column_definitions.upcase_keys!, options)
|
54
|
+
print_results_pagination(json_response)
|
55
|
+
end
|
56
|
+
print reset,"\n"
|
57
|
+
end
|
58
|
+
return 0, nil
|
59
|
+
end
|
60
|
+
|
61
|
+
def get(args)
|
62
|
+
params = {}
|
63
|
+
options = {}
|
64
|
+
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
65
|
+
opts.banner = "Usage: #{prog_name} backups get-restore [restore]"
|
66
|
+
build_standard_get_options(opts, options)
|
67
|
+
opts.footer = <<-EOT
|
68
|
+
Get details about a specific backup restore.
|
69
|
+
[restore] is required. This is the id of a backup restore.
|
70
|
+
EOT
|
71
|
+
end
|
72
|
+
optparse.parse!(args)
|
73
|
+
verify_args!(args:args, optparse:optparse, min:1)
|
74
|
+
connect(options)
|
75
|
+
id_list = parse_id_list(args)
|
76
|
+
id_list = id_list.collect do |id|
|
77
|
+
if id.to_s =~ /\A\d{1,}\Z/
|
78
|
+
id
|
79
|
+
else
|
80
|
+
backup_restore = find_backup_restore_by_name(id)
|
81
|
+
if backup_restore
|
82
|
+
backup_restore['id']
|
83
|
+
else
|
84
|
+
return 1, "backup restore not found for name '#{id}'"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
return run_command_for_each_arg(id_list) do |arg|
|
89
|
+
_get(arg, params, options)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def _get(id, params, options)
|
94
|
+
@backup_restores_interface.setopts(options)
|
95
|
+
if options[:dry_run]
|
96
|
+
print_dry_run @backup_restores_interface.dry.get(id, params)
|
97
|
+
return
|
98
|
+
end
|
99
|
+
json_response = @backup_restores_interface.get(id, params)
|
100
|
+
backup_restore = json_response['restore']
|
101
|
+
render_response(json_response, options, 'restore') do
|
102
|
+
backup_restore = json_response['restore']
|
103
|
+
backups = backup_restore['backups'] || []
|
104
|
+
print_h1 "Backup Restore Details", [], options
|
105
|
+
print cyan
|
106
|
+
print_description_list(backup_restore_column_definitions, backup_restore)
|
107
|
+
if backup_restore['errorMessage']
|
108
|
+
print_h2 "Error Message", options
|
109
|
+
print red, backup_restore['errorMessage'], reset, "\n"
|
110
|
+
end
|
111
|
+
print reset,"\n"
|
112
|
+
end
|
113
|
+
return 0, nil
|
114
|
+
end
|
115
|
+
|
116
|
+
def remove(args)
|
117
|
+
options = {}
|
118
|
+
params = {}
|
119
|
+
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
120
|
+
opts.banner = "Usage: #{prog_name} backups remove-restore [restore]"
|
121
|
+
build_standard_remove_options(opts, options)
|
122
|
+
opts.footer = <<-EOT
|
123
|
+
Delete a backup restore.
|
124
|
+
[restore] is required. This is the id of a backup restore.
|
125
|
+
EOT
|
126
|
+
end
|
127
|
+
optparse.parse!(args)
|
128
|
+
verify_args!(args:args, optparse:optparse, count:1)
|
129
|
+
connect(options)
|
130
|
+
backup_restore = @backup_restores_interface.get(args[0])['restore']
|
131
|
+
#backup_restore = find_backup_restore_by_name_or_id(args[0])
|
132
|
+
#return 1 if backup_restore.nil?
|
133
|
+
parse_options(options, params)
|
134
|
+
confirm!("Are you sure you want to delete the backup restore #{backup_restore['id']}?", options)
|
135
|
+
execute_api(@backup_restores_interface, :destroy, [backup_restore['id']], options) do |json_response|
|
136
|
+
print_green_success "Removed backup restore #{backup_restore['name']}"
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
private
|
141
|
+
|
142
|
+
# helper methods are defined in BackupsHelper
|
143
|
+
|
144
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
require 'morpheus/cli/cli_command'
|
2
|
+
|
3
|
+
class Morpheus::Cli::BackupResultsCommand
|
4
|
+
include Morpheus::Cli::CliCommand
|
5
|
+
include Morpheus::Cli::BackupsHelper
|
6
|
+
# include Morpheus::Cli::ProvisioningHelper
|
7
|
+
# include Morpheus::Cli::OptionSourceHelper
|
8
|
+
|
9
|
+
set_command_hidden # hide and prefer backups list-results, get-result, etc. for now
|
10
|
+
|
11
|
+
set_command_name :'backup-results'
|
12
|
+
|
13
|
+
register_subcommands :list, :get, :remove
|
14
|
+
|
15
|
+
def connect(opts)
|
16
|
+
@api_client = establish_remote_appliance_connection(opts)
|
17
|
+
@backups_interface = @api_client.backups
|
18
|
+
@backup_results_interface = @api_client.backup_results
|
19
|
+
end
|
20
|
+
|
21
|
+
def handle(args)
|
22
|
+
handle_subcommand(args)
|
23
|
+
end
|
24
|
+
|
25
|
+
def list(args)
|
26
|
+
options = {}
|
27
|
+
params = {}
|
28
|
+
ref_ids = []
|
29
|
+
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
30
|
+
opts.banner = "Usage: #{prog_name} backups list-results [search]"
|
31
|
+
opts.on('--backup BACKUP', String, "Backup Name or ID") do |val|
|
32
|
+
options[:backup] = val
|
33
|
+
end
|
34
|
+
opts.on('--instance INSTANCE', String, "Instance Name or ID") do |val|
|
35
|
+
options[:instance] = val
|
36
|
+
end
|
37
|
+
build_standard_list_options(opts, options)
|
38
|
+
opts.footer = "List backup results."
|
39
|
+
end
|
40
|
+
optparse.parse!(args)
|
41
|
+
connect(options)
|
42
|
+
# verify_args!(args:args, optparse:optparse, max:1)
|
43
|
+
parse_list_options!(args, options, params)
|
44
|
+
execute_api(@backup_results_interface, :list, [], options, 'results') do |json_response|
|
45
|
+
backup_results = json_response['results']
|
46
|
+
subtitles = []
|
47
|
+
subtitles << "Backup: #{options[:backup]}" if options[:backup]
|
48
|
+
subtitles += parse_list_subtitles(options)
|
49
|
+
print_h1 "Morpheus Backup Results", subtitles, options
|
50
|
+
if backup_results.empty?
|
51
|
+
print yellow,"No backup results found.",reset,"\n"
|
52
|
+
else
|
53
|
+
print as_pretty_table(backup_results, backup_result_list_column_definitions.upcase_keys!, options)
|
54
|
+
print_results_pagination(json_response)
|
55
|
+
end
|
56
|
+
print reset,"\n"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def get(args)
|
61
|
+
params = {}
|
62
|
+
options = {}
|
63
|
+
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
64
|
+
opts.banner = "Usage: #{prog_name} backups get-result [result]"
|
65
|
+
build_standard_get_options(opts, options)
|
66
|
+
opts.footer = <<-EOT
|
67
|
+
Get details about a specific backup result.
|
68
|
+
[result] is required. This is the id of a backup result.
|
69
|
+
EOT
|
70
|
+
end
|
71
|
+
optparse.parse!(args)
|
72
|
+
verify_args!(args:args, optparse:optparse, min:1)
|
73
|
+
connect(options)
|
74
|
+
id_list = parse_id_list(args)
|
75
|
+
id_list = id_list.collect do |id|
|
76
|
+
if id.to_s =~ /\A\d{1,}\Z/
|
77
|
+
id
|
78
|
+
else
|
79
|
+
backup_result = find_backup_result_by_name(id)
|
80
|
+
if backup_result
|
81
|
+
backup_result['id']
|
82
|
+
else
|
83
|
+
return 1, "backup result not found for name '#{id}'"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
return run_command_for_each_arg(id_list) do |arg|
|
88
|
+
_get(arg, params, options)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def _get(id, params, options)
|
93
|
+
@backup_results_interface.setopts(options)
|
94
|
+
if options[:dry_run]
|
95
|
+
print_dry_run @backup_results_interface.dry.get(id, params)
|
96
|
+
return
|
97
|
+
end
|
98
|
+
json_response = @backup_results_interface.get(id, params)
|
99
|
+
backup_result = json_response['result']
|
100
|
+
render_response(json_response, options, 'result') do
|
101
|
+
backup_result = json_response['result']
|
102
|
+
backups = backup_result['backups'] || []
|
103
|
+
print_h1 "Backup Result Details", [], options
|
104
|
+
print cyan
|
105
|
+
print_description_list(backup_result_column_definitions, backup_result)
|
106
|
+
if backup_result['errorMessage']
|
107
|
+
print_h2 "Error Message", options
|
108
|
+
print red, backup_result['errorMessage'], reset, "\n"
|
109
|
+
end
|
110
|
+
print reset,"\n"
|
111
|
+
end
|
112
|
+
return 0, nil
|
113
|
+
end
|
114
|
+
|
115
|
+
def remove(args)
|
116
|
+
options = {}
|
117
|
+
params = {}
|
118
|
+
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
119
|
+
opts.banner = "Usage: #{prog_name} backups remove-result [result]"
|
120
|
+
build_standard_remove_options(opts, options)
|
121
|
+
opts.footer = <<-EOT
|
122
|
+
Delete a backup result.
|
123
|
+
[result] is required. This is the id of a backup result.
|
124
|
+
EOT
|
125
|
+
end
|
126
|
+
optparse.parse!(args)
|
127
|
+
verify_args!(args:args, optparse:optparse, count:1)
|
128
|
+
connect(options)
|
129
|
+
backup_result = @backup_results_interface.get(args[0])['result']
|
130
|
+
# backup_result = find_backup_result_by_name_or_id(args[0])
|
131
|
+
# return 1 if backup_result.nil?
|
132
|
+
parse_options(options, params)
|
133
|
+
confirm!("Are you sure you want to delete the backup result #{backup_result['id']}?", options)
|
134
|
+
execute_api(@backup_results_interface, :destroy, [backup_result['id']], options) do |json_response|
|
135
|
+
print_green_success "Removed backup result #{backup_result['name']}"
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
private
|
140
|
+
|
141
|
+
# helper methods are defined in BackupsHelper
|
142
|
+
|
143
|
+
def parse_list_options!(args, options, params)
|
144
|
+
parse_parameter_as_resource_id!(:backup, options, params, 'backupId')
|
145
|
+
parse_parameter_as_resource_id!(:instance, options, params, 'instanceId')
|
146
|
+
super
|
147
|
+
end
|
148
|
+
|
149
|
+
end
|