class OdaniaOps::Cli::Backup

Public Instance Methods

execute(opts=nil) click to toggle source
# File lib/odania_ops/cli/backup.rb, line 14
def execute(opts=nil)
        @type = options[:type]
        $logger.info "Starting backup [#{@type}] #{options[:host]} -> [#{options[:target_type]}] #{options[:target_host]} (Jumpbox: #{options[:jumpbox]})"
        opts = opts.nil? ? {} : JSON.parse(opts)

        # Detect implementation
        backup_script_file = "/tmp/#{Time.now.to_i}_backup.rb"
        clazz = "OdaniaOps::Implementations::Backup::#{@type}".constantize.new options[:host], opts
        clazz.write backup_script_file

        set_jump_host(options[:jumpbox]) unless options[:jumpbox].nil?

        server_host = options[:host_user].nil? ? options[:host] : "#{options[:host_user]}@#{options[:host]}"
        on server_host, in: :sequence do |host|
                within '/tmp' do
                        server_backup_file = "/tmp/#{@type}_backup.rb"
                        upload! backup_script_file, server_backup_file
                        result = capture "sudo #{server_backup_file}"
                        $logger.info result
                end
        end

        $logger.info "Finished backup [#{@type}] #{options[:host]} -> [#{options[:target_type]}] #{options[:target_host]} (Jumpbox: #{options[:jumpbox]})"
end

Private Instance Methods

set_jump_host(host) click to toggle source
# File lib/odania_ops/cli/backup.rb, line 41
def set_jump_host(host)
        SSHKit::Backend::Netssh.configure do |ssh|
                ssh.ssh_options = {
                        forward_agent: true,
                        auth_methods: %w(publickey),
                        proxy: Net::SSH::Proxy::Command.new("ssh #{host} -W %h:%p")
                }
        end
end