def update(args)
options = {}
params = {}
optparse = Morpheus::Cli::OptionParser.new do |opts|
opts.banner = opts.banner = subcommand_usage()
opts.on('-a', '--active [on|off]', String, "Can be used to enable / disable the scheduled backups. Default is on") do |val|
params['backupsEnabled'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == '1' || val.to_s == ''
end
opts.on("--create-backups [on|off]", String, "Can be used to enable / disable create backups. Default is on") do |val|
params['createBackups'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == '1' || val.to_s == ''
end
opts.on("--backup-appliance [on|off]", ['on','off'], "Can be use to enable / disable backup appliance. Default is on") do |val|
params['backupAppliance'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == '1' || val.to_s == ''
end
opts.on("-b", "--bucket BUCKET", String, "Default storage bucket name or ID") do |val|
options[:storageBucket] = val
end
opts.on("--clear-bucket", "Use this flag to clear default backup bucket") do |val|
params['clearDefaultStorageBucket'] = true
end
opts.on("-u", "--update-existing", "Use this flag to update existing backups with new settings") do |val|
params['updateExisting'] = true
end
opts.on("-s", "--backup-schedule ID", String, "Backup schedule type ID") do |val|
options[:backupSchedule] = val
end
opts.on("--clear-schedule", "Use this flag to clear default backup schedule") do |val|
params['clearDefaultSchedule'] = true
end
opts.on("-R", "--retention NUMBER", Integer, "Maximum number of successful backups to retain") do |val|
params['retentionCount'] = val.to_i
end
build_common_options(opts, options, [:json, :payload, :dry_run, :quiet, :remote])
opts.footer = "Update your backup settings."
end
optparse.parse!(args)
connect(options)
if args.count != 0
raise_command_error "wrong number of arguments, expected 0 and got (#{args.count}) #{args}\n#{optparse}"
return 1
end
begin
payload = parse_payload(options)
if !payload
payload = {'backupSettings' => params}
if !options[:backupSchedule].nil?
backup_schedule = @options_interface.options_for_source('executeSchedules', {})['data'].find do |it|
it['name'] == options[:backupSchedule] || it['value'] == options[:backupSchedule].to_i
end
if backup_schedule.nil?
print_red_alert "Backup schedule type not found for #{options[:backupSchedule]}"
return 1
end
payload['backupSettings']['defaultSchedule'] = {'id' => backup_schedule['value'].to_i}
end
if !options[:storageBucket].nil?
storage_bucket = find_storage_bucket_by_name_or_id(options[:storageBucket])
if storage_bucket.nil?
print_red_alert "Storage bucket not found for #{options[:storageBucket]}"
return 1
end
payload['backupSettings']['defaultStorageBucket'] = {'id' => storage_bucket['id']}
end
end
if payload['backupSettings'].empty?
print_green_success "Nothing to update"
exit 1
end
@backup_settings_interface.setopts(options)
if options[:dry_run]
print_dry_run @backup_settings_interface.dry.update(payload)
return
end
json_response = @backup_settings_interface.update(payload)
if options[:json]
puts as_json(json_response, options)
elsif !options[:quiet]
if json_response['success']
print_green_success "Updated log settings"
get([] + (options[:remote] ? ["-r",options[:remote]] : []))
else
print_red_alert "Error updating log settings: #{json_response['msg'] || json_response['errors']}"
end
end
return 0
rescue RestClient::Exception => e
print_rest_exception(e, options)
exit 1
end
end