Sha256: 95089ce6a18b3300684eb71a5f84dc3a0660fdb06f41c71a860054ee52663da1
Contents?: true
Size: 1.56 KB
Versions: 3
Compression:
Stored size: 1.56 KB
Contents
# encoding: utf-8 require 'net/scp' module Backup module Storage class SCP < Base ## # Server credentials attr_accessor :username, :password ## # Server IP Address and SCP port attr_accessor :ip, :port def initialize(model, storage_id = nil, &block) super instance_eval(&block) if block_given? @port ||= 22 @path ||= 'backups' path.sub!(/^~\//, '') end private def connection Net::SSH.start( ip, username, :password => password, :port => port ) {|ssh| yield ssh } end def transfer! connection do |ssh| ssh.exec!("mkdir -p '#{ remote_path }'") package.filenames.each do |filename| src = File.join(Config.tmp_path, filename) dest = File.join(remote_path, filename) Logger.info "Storing '#{ ip }:#{ dest }'..." ssh.scp.upload!(src, dest) end end end # Called by the Cycler. # Any error raised will be logged as a warning. def remove!(package) Logger.info "Removing backup package dated #{ package.time }..." errors = [] connection do |ssh| ssh.exec!("rm -r '#{ remote_path_for(package) }'") do |ch, stream, data| errors << data if stream == :stderr end end unless errors.empty? raise Errors::Storage::SCP::SSHError, "Net::SSH reported the following errors:\n" + errors.join("\n") end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
backup-3.6.0 | lib/backup/storage/scp.rb |
backup-3.5.1 | lib/backup/storage/scp.rb |
backup-3.5.0 | lib/backup/storage/scp.rb |