class Chef::Util::Backup

Attributes

new_resource[R]
path[RW]

Public Class Methods

new(new_resource, path = nil) click to toggle source
# File lib/chef/util/backup.rb, line 25
def initialize(new_resource, path = nil)
  @new_resource = new_resource
  @path = path.nil? ? new_resource.path : path
end

Public Instance Methods

backup!() click to toggle source
# File lib/chef/util/backup.rb, line 30
def backup!
  if @new_resource.backup != false && @new_resource.backup > 0 && ::File.exist?(path)
    do_backup
    # Clean up after the number of backups
    slice_number = @new_resource.backup
    backup_files = sorted_backup_files
    if backup_files.length >= @new_resource.backup
      remainder = backup_files.slice(slice_number..-1)
      remainder.each do |backup_to_delete|
        delete_backup(backup_to_delete)
      end
    end
  end
end

Private Instance Methods

backup_filename() click to toggle source
# File lib/chef/util/backup.rb, line 47
def backup_filename
  @backup_filename ||= begin
    time = Time.now
    nanoseconds = sprintf("%6f", time.to_f).split('.')[1]
    savetime = time.strftime("%Y%m%d%H%M%S.#{nanoseconds}")
    backup_filename = "#{path}.chef-#{savetime}"
    backup_filename = backup_filename.sub(/^([A-Za-z]:)/, "") #strip drive letter on Windows
  end
end
backup_path() click to toggle source
# File lib/chef/util/backup.rb, line 64
def backup_path
  @backup_path ||= ::File.join(prefix, backup_filename)
end
delete_backup(backup_file) click to toggle source
# File lib/chef/util/backup.rb, line 74
def delete_backup(backup_file)
  FileUtils.rm(backup_file)
  Chef::Log.info("#{@new_resource} removed backup at #{backup_file}")
end
do_backup() click to toggle source
# File lib/chef/util/backup.rb, line 68
def do_backup
  FileUtils.mkdir_p(::File.dirname(backup_path)) if Chef::Config[:file_backup_path]
  FileUtils.cp(path, backup_path, :preserve => true)
  Chef::Log.info("#{@new_resource} backed up to #{backup_path}")
end
prefix() click to toggle source
# File lib/chef/util/backup.rb, line 57
def prefix
  # if :file_backup_path is nil, we fallback to the old behavior of
  # keeping the backup in the same directory. We also need to to_s it
  # so we don't get a type error around implicit to_str conversions.
  @prefix ||= Chef::Config[:file_backup_path].to_s
end
sorted_backup_files() click to toggle source
# File lib/chef/util/backup.rb, line 79
def sorted_backup_files
  Dir[::File.join(prefix, ".#{path}.chef-*")].sort { |a,b| b <=> a }
end