mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-22 18:50:08 +03:00
(cherry picked from commit b1ddfa9d71c5b349aed6cd6d3f5df8fe85549037)
This commit is contained in:
parent
6c92337419
commit
8c7de39eb1
@ -1437,25 +1437,33 @@ CommandParser::CmdParser.new(ARGV) do
|
||||
helper.perform_action(args[0], options, 'Backup') do |vm|
|
||||
vm.extend(OpenNebula::VirtualMachineExt)
|
||||
|
||||
# If logger is specified use it, if not use STDOUT
|
||||
options[:logger].nil? ? log_to = STDOUT : log_to = options[:logger]
|
||||
|
||||
# Read user options
|
||||
keep = options.key?(:keep)
|
||||
logger = Logger.new(log_to)
|
||||
format = '%Y-%m-%d %H:%M:%S'
|
||||
|
||||
logger.formatter = proc do |severity, datetime, _p, msg|
|
||||
"#{datetime.strftime(format)} #{severity.ljust(5)} : #{msg}\n"
|
||||
if options[:verbose]
|
||||
log_to = STDOUT
|
||||
elsif !options[:logger].nil?
|
||||
log_to = options[:logger]
|
||||
end
|
||||
|
||||
keep = options.key?(:keep)
|
||||
|
||||
if log_to
|
||||
logger = Logger.new(log_to)
|
||||
format = '%Y-%m-%d %H:%M:%S'
|
||||
|
||||
logger.formatter = proc do |severity, datetime, _p, msg|
|
||||
"#{datetime.strftime(format)} " \
|
||||
"#{severity.ljust(5)} : #{msg}\n"
|
||||
end
|
||||
end
|
||||
|
||||
binfo = {}
|
||||
binfo[:market] = options[:market]
|
||||
|
||||
if options.key?(:oneshot)
|
||||
binfo = {}
|
||||
binfo[:name] = "VM #{vm.id} BACKUP - " \
|
||||
"#{Time.now.strftime('%Y%m%d_%k%M')}"
|
||||
binfo[:freq] = 1
|
||||
binfo[:last] = Time.now.to_i - 100
|
||||
binfo[:market] = options[:market]
|
||||
end
|
||||
|
||||
begin
|
||||
|
@ -267,17 +267,20 @@ module OpenNebula::VirtualMachineExt
|
||||
# --------------------------------------------------------------
|
||||
# Check backup consistency
|
||||
# --------------------------------------------------------------
|
||||
unless binfo
|
||||
rc = info
|
||||
raise rc.message if OpenNebula.is_error?(rc)
|
||||
rc = info
|
||||
|
||||
binfo = backup_info
|
||||
raise rc.message if OpenNebula.is_error?(rc)
|
||||
|
||||
binfo.merge!(backup_info) do |key, old_val, new_val|
|
||||
new_val.nil? ? old_val : new_val
|
||||
end
|
||||
|
||||
raise 'No backup information' if binfo.nil?
|
||||
|
||||
raise 'No frequency defined' unless valid?(binfo[:freq])
|
||||
|
||||
raise 'No marketplace defined' unless valid?(binfo[:market])
|
||||
|
||||
return if Time.now.to_i - binfo[:last].to_i < binfo[:freq].to_i
|
||||
|
||||
# --------------------------------------------------------------
|
||||
@ -319,19 +322,12 @@ module OpenNebula::VirtualMachineExt
|
||||
# --------------------------------------------------------------
|
||||
# Cleanup
|
||||
# --------------------------------------------------------------
|
||||
logger.info "Deleting template #{tmp.id}" if logger
|
||||
|
||||
tmp.delete(true)
|
||||
|
||||
binfo[:apps].each do |id|
|
||||
logger.info "Deleting applicance #{id}" if logger
|
||||
|
||||
papp = OpenNebula::MarketPlaceApp.new_with_id(id, @client)
|
||||
|
||||
papp.delete
|
||||
end if !keep && binfo[:apps]
|
||||
backup_cleanup(keep, logger, binfo, tmp)
|
||||
rescue Error, StandardError => e
|
||||
backup_cleanup(keep, logger, binfo, tmp)
|
||||
|
||||
logger.fatal(e.inspect) if logger
|
||||
|
||||
raise
|
||||
end
|
||||
|
||||
@ -421,9 +417,9 @@ module OpenNebula::VirtualMachineExt
|
||||
|
||||
private
|
||||
|
||||
# --------------------------------------------------------------
|
||||
#-------------------------------------------------------------------
|
||||
# Check an attribute is defined and valid
|
||||
# --------------------------------------------------------------
|
||||
#-------------------------------------------------------------------
|
||||
def valid?(att)
|
||||
return false if att.nil?
|
||||
|
||||
@ -454,6 +450,9 @@ module OpenNebula::VirtualMachineExt
|
||||
binfo
|
||||
end
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
# Generate backup information string
|
||||
#-------------------------------------------------------------------
|
||||
def backup_attr(binfo, ids)
|
||||
'BACKUP=[' \
|
||||
" MARKETPLACE_APP_IDS = \"#{ids.join(',')}\"," \
|
||||
@ -462,6 +461,25 @@ module OpenNebula::VirtualMachineExt
|
||||
" MARKETPLACE_ID = \"#{binfo[:market]}\" ]"
|
||||
end
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
# Cleanup backup leftovers in case of failure
|
||||
#-------------------------------------------------------------------
|
||||
def backup_cleanup(keep, logger, binfo, template)
|
||||
if template
|
||||
logger.info "Deleting template #{template.id}" if logger
|
||||
|
||||
template.delete(true)
|
||||
end
|
||||
|
||||
binfo[:apps].each do |id|
|
||||
logger.info "Deleting applicance #{id}" if logger
|
||||
|
||||
papp = OpenNebula::MarketPlaceApp.new_with_id(id, @client)
|
||||
|
||||
papp.delete
|
||||
end if !keep && binfo[:apps]
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user