class Chef::Knife::TarsnapBackupDownload

Public Instance Methods

run() click to toggle source
# File lib/chef/knife/tarsnap_backup_download.rb, line 32
def run

  unless name_args.size == 2
    ui.fatal "Must provide only NODE and ARCHIVE."
    exit 1
  end

  node_name = name_args[0]
  archive_name = name_args[1]

  tarball = config[:save_to] || File.join(Dir.pwd, "#{archive_name}.tar")

  if File.exists?(tarball)
    ui.warn "A file named #{tarball} already exists. Do you want to overwrite it?"
    ui.confirm "Overwrite"
  end

  Tempfile.open('tarsnap', '/tmp') do |f|
    key = fetch_key(node_name)
    f.write(key)
    f.close

    list_cmd = "#{tarsnap_tool} --keyfile #{f.path} -r -f #{archive_name} > #{tarball}"

    ui.msg "Downloading #{tarball}..."
    list_shell = Mixlib::ShellOut.new(list_cmd, :timeout => 604800)
    list_shell.run_command
    unless list_shell.status.exitstatus == 0
      raise StandardError, "tarsnap error: #{list_shell.stderr}"
    end
    ui.msg "#{tarball} saved."
  end

end