diff options
Diffstat (limited to 'lib/puppet/util/backups.rb')
-rw-r--r-- | lib/puppet/util/backups.rb | 130 |
1 files changed, 65 insertions, 65 deletions
diff --git a/lib/puppet/util/backups.rb b/lib/puppet/util/backups.rb index 1e051498c..c01bdd400 100644 --- a/lib/puppet/util/backups.rb +++ b/lib/puppet/util/backups.rb @@ -2,86 +2,86 @@ require 'find' require 'fileutils' module Puppet::Util::Backups - # Deal with backups. - def perform_backup(file = nil) - # if they specifically don't want a backup, then just say - # we're good - return true unless self[:backup] + # Deal with backups. + def perform_backup(file = nil) + # if they specifically don't want a backup, then just say + # we're good + return true unless self[:backup] - # let the path be specified - file ||= self[:path] - return true unless FileTest.exists?(file) + # let the path be specified + file ||= self[:path] + return true unless FileTest.exists?(file) - return(self.bucket ? perform_backup_with_bucket(file) : perform_backup_with_backuplocal(file, self[:backup])) - end + return(self.bucket ? perform_backup_with_bucket(file) : perform_backup_with_backuplocal(file, self[:backup])) + end - private + private - def perform_backup_with_bucket(fileobj) - file = (fileobj.class == String) ? fileobj : fileobj.name - case File.stat(file).ftype - when "directory" - # we don't need to backup directories when recurse is on - return true if self[:recurse] - info "Recursively backing up to filebucket" - Find.find(self[:path]) { |f| backup_file_with_filebucket(f) if File.file?(f) } - when "file"; backup_file_with_filebucket(file) - when "link"; - end - true + def perform_backup_with_bucket(fileobj) + file = (fileobj.class == String) ? fileobj : fileobj.name + case File.stat(file).ftype + when "directory" + # we don't need to backup directories when recurse is on + return true if self[:recurse] + info "Recursively backing up to filebucket" + Find.find(self[:path]) { |f| backup_file_with_filebucket(f) if File.file?(f) } + when "file"; backup_file_with_filebucket(file) + when "link"; end + true + end - def perform_backup_with_backuplocal(fileobj, backup) - file = (fileobj.class == String) ? fileobj : fileobj.name - newfile = file + backup + def perform_backup_with_backuplocal(fileobj, backup) + file = (fileobj.class == String) ? fileobj : fileobj.name + newfile = file + backup - remove_backup(newfile) + remove_backup(newfile) - begin - bfile = file + backup + begin + bfile = file + backup - # Ruby 1.8.1 requires the 'preserve' addition, but - # later versions do not appear to require it. - # N.B. cp_r works on both files and directories - FileUtils.cp_r(file, bfile, :preserve => true) - return true - rescue => detail - # since they said they want a backup, let's error out - # if we couldn't make one - self.fail "Could not back #{file} up: #{detail.message}" - end + # Ruby 1.8.1 requires the 'preserve' addition, but + # later versions do not appear to require it. + # N.B. cp_r works on both files and directories + FileUtils.cp_r(file, bfile, :preserve => true) + return true + rescue => detail + # since they said they want a backup, let's error out + # if we couldn't make one + self.fail "Could not back #{file} up: #{detail.message}" end + end - def remove_backup(newfile) - if self.class.name == :file and self[:links] != :follow - method = :lstat - else - method = :stat - end + def remove_backup(newfile) + if self.class.name == :file and self[:links] != :follow + method = :lstat + else + method = :stat + end - begin - stat = File.send(method, newfile) - rescue Errno::ENOENT - return - end + begin + stat = File.send(method, newfile) + rescue Errno::ENOENT + return + end - if stat.ftype == "directory" - raise Puppet::Error, "Will not remove directory backup #{newfile}; use a filebucket" - end + if stat.ftype == "directory" + raise Puppet::Error, "Will not remove directory backup #{newfile}; use a filebucket" + end - info "Removing old backup of type #{stat.ftype}" + info "Removing old backup of type #{stat.ftype}" - begin - File.unlink(newfile) - rescue => detail - puts detail.backtrace if Puppet[:trace] - self.fail "Could not remove old backup: #{detail}" - end + begin + File.unlink(newfile) + rescue => detail + puts detail.backtrace if Puppet[:trace] + self.fail "Could not remove old backup: #{detail}" end + end - def backup_file_with_filebucket(f) - sum = self.bucket.backup(f) - self.info "Filebucketed #{f} to #{self.bucket.name} with sum #{sum}" - return sum - end + def backup_file_with_filebucket(f) + sum = self.bucket.backup(f) + self.info "Filebucketed #{f} to #{self.bucket.name} with sum #{sum}" + return sum + end end |