morpheus-cli 6.1.2 → 6.2.1
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 +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/api/monitoring_settings_interface.rb +0 -4
 - data/lib/morpheus/cli/cli_command.rb +176 -46
 - 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 +78 -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 +215 -93
 - data/lib/morpheus/cli/commands/hosts.rb +15 -2
 - data/lib/morpheus/cli/commands/instances.rb +18 -3
 - data/lib/morpheus/cli/commands/monitoring_settings.rb +0 -16
 - data/lib/morpheus/cli/commands/plugins.rb +2 -1
 - data/lib/morpheus/cli/commands/roles.rb +9 -9
 - data/lib/morpheus/cli/commands/service_catalog_command.rb +50 -83
 - data/lib/morpheus/cli/commands/user_sources_command.rb +36 -8
 - 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,64 @@ 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']}"
         
     | 
| 
      
 242 
     | 
    
         
            +
                end
         
     | 
| 
      
 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
         
     | 
| 
       223 
256 
     | 
    
         
             
                end
         
     | 
| 
       224 
     | 
    
         
            -
                 
     | 
| 
       225 
     | 
    
         
            -
             
     | 
| 
      
 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) do |payload|
         
     | 
| 
       226 
263 
     | 
    
         
             
                end
         
     | 
| 
       227 
     | 
    
         
            -
                 
     | 
| 
       228 
     | 
    
         
            -
             
     | 
| 
       229 
     | 
    
         
            -
                   
     | 
| 
      
 264 
     | 
    
         
            +
                execute_api(@backup_jobs_interface, :execute_job, [backup_job['id']], options, 'job') do |json_response|
         
     | 
| 
      
 265 
     | 
    
         
            +
                  print_green_success "Executing backup job #{backup_job['name']}"
         
     | 
| 
      
 266 
     | 
    
         
            +
                  # should get the result maybe, or could even support refreshing until it is complete...
         
     | 
| 
      
 267 
     | 
    
         
            +
                  # return _get(backup_job["id"], {}, options)
         
     | 
| 
       230 
268 
     | 
    
         
             
                end
         
     | 
| 
       231 
     | 
    
         
            -
                return 0, nil
         
     | 
| 
       232 
269 
     | 
    
         
             
              end
         
     | 
| 
       233 
270 
     | 
    
         | 
| 
       234 
271 
     | 
    
         
             
              private
         
     | 
| 
       235 
272 
     | 
    
         | 
| 
       236 
273 
     | 
    
         
             
              def backup_job_column_definitions()
         
     | 
| 
      
 274 
     | 
    
         
            +
                {
         
     | 
| 
      
 275 
     | 
    
         
            +
                  "ID" => 'id',
         
     | 
| 
      
 276 
     | 
    
         
            +
                  "Name" => 'name',
         
     | 
| 
      
 277 
     | 
    
         
            +
                  "Code" => 'code',
         
     | 
| 
      
 278 
     | 
    
         
            +
                  "Schedule" => lambda {|it| it['schedule']['name'] rescue '' },
         
     | 
| 
      
 279 
     | 
    
         
            +
                  "Next" => lambda {|it| format_local_dt(it['nextFire']) },
         
     | 
| 
      
 280 
     | 
    
         
            +
                  "Retention Count" => lambda {|it| it['retentionCount'] rescue '' },
         
     | 
| 
      
 281 
     | 
    
         
            +
                  "Provider" => lambda {|it| it['backupProvider']['name'] rescue '' },
         
     | 
| 
      
 282 
     | 
    
         
            +
                  "Repository" => lambda {|it| it['backupRepository']['name'] rescue '' },
         
     | 
| 
      
 283 
     | 
    
         
            +
                  "Source" => lambda {|it| it['source'] },
         
     | 
| 
      
 284 
     | 
    
         
            +
                  "Created" => lambda {|it| format_local_dt(it['dateCreated']) },
         
     | 
| 
      
 285 
     | 
    
         
            +
                  "Updated" => lambda {|it| format_local_dt(it['lastUpdated']) },
         
     | 
| 
      
 286 
     | 
    
         
            +
                }
         
     | 
| 
      
 287 
     | 
    
         
            +
              end
         
     | 
| 
      
 288 
     | 
    
         
            +
             
     | 
| 
      
 289 
     | 
    
         
            +
              def backup_job_list_column_definitions()
         
     | 
| 
       237 
290 
     | 
    
         
             
                {
         
     | 
| 
       238 
291 
     | 
    
         
             
                  "ID" => 'id',
         
     | 
| 
       239 
292 
     | 
    
         
             
                  "Name" => 'name',
         
     | 
| 
       240 
293 
     | 
    
         
             
                  "Schedule" => lambda {|it| it['schedule']['name'] rescue '' },
         
     | 
| 
      
 294 
     | 
    
         
            +
                  "Next" => lambda {|it| format_local_dt(it['nextFire']) },
         
     | 
| 
      
 295 
     | 
    
         
            +
                  "Retention Count" => lambda {|it| it['retentionCount'] rescue '' },
         
     | 
| 
       241 
296 
     | 
    
         
             
                  "Created" => lambda {|it| format_local_dt(it['dateCreated']) },
         
     | 
| 
       242 
297 
     | 
    
         
             
                  "Updated" => lambda {|it| format_local_dt(it['lastUpdated']) },
         
     | 
| 
       243 
298 
     | 
    
         
             
                }
         
     | 
| 
         @@ -246,9 +301,12 @@ EOT 
     | 
|
| 
       246 
301 
     | 
    
         
             
              def add_backup_job_option_types
         
     | 
| 
       247 
302 
     | 
    
         
             
                [
         
     | 
| 
       248 
303 
     | 
    
         
             
                  {'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'displayOrder' => 1},
         
     | 
| 
       249 
     | 
    
         
            -
                   
     | 
| 
      
 304 
     | 
    
         
            +
                  {'fieldName' => 'code', 'fieldLabel' => 'Code', 'type' => 'text', 'required' => false, 'displayOrder' => 2},
         
     | 
| 
       250 
305 
     | 
    
         
             
                  {'fieldName' => 'retentionCount', 'fieldLabel' => 'Retention Count', 'type' => 'number', 'displayOrder' => 3},
         
     | 
| 
       251 
     | 
    
         
            -
                  {'fieldName' => 'scheduleId', 'fieldLabel' => 'Schedule', 'type' => 'select', 'optionSource' =>  
     | 
| 
      
 306 
     | 
    
         
            +
                  {'fieldName' => 'scheduleId', 'fieldLabel' => 'Schedule', 'type' => 'select', 'optionSource' => lambda { |api_client, api_params| 
         
     | 
| 
      
 307 
     | 
    
         
            +
                    schedules = api_client.options.options_for_source('executeSchedules',{})['data']
         
     | 
| 
      
 308 
     | 
    
         
            +
                    [{"name" => "Manual", "value" => "manual"}] + schedules
         
     | 
| 
      
 309 
     | 
    
         
            +
                  }, 'displayOrder' => 4},
         
     | 
| 
       252 
310 
     | 
    
         
             
                ]
         
     | 
| 
       253 
311 
     | 
    
         
             
              end
         
     | 
| 
       254 
312 
     | 
    
         | 
| 
         @@ -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
         
     |