class SSHKit::Backend::Abstract

Attributes

host[R]

Public Class Methods

config() click to toggle source
# File lib/sshkit/backends/abstract.rb, line 126
def config
  @config ||= OpenStruct.new
end
configure() { |config| ... } click to toggle source
# File lib/sshkit/backends/abstract.rb, line 130
def configure
  yield config
end
new(host, &block) click to toggle source
# File lib/sshkit/backends/abstract.rb, line 36
def initialize(host, &block)
  raise "Must pass a Host object" unless host.is_a? Host
  @host  = host
  @block = block

  @pwd   = nil
  @env   = nil
  @user  = nil
  @group = nil
end

Public Instance Methods

as(who) { || ... } click to toggle source
# File lib/sshkit/backends/abstract.rb, line 105
      def as(who, &_block)
        if who.is_a? Hash
          @user  = who[:user]  || who["user"]
          @group = who[:group] || who["group"]
        else
          @user  = who
          @group = nil
        end
        execute <<-EOTEST, verbosity: Logger::DEBUG
          if ! sudo -u #{@user.to_s.shellescape} whoami > /dev/null
            then echo "You cannot switch to user '#{@user.to_s.shellescape}' using sudo, please check the sudoers file" 1>&2
            false
          fi
        EOTEST
        yield
      ensure
        remove_instance_variable(:@user)
        remove_instance_variable(:@group)
      end
background(*args) click to toggle source
# File lib/sshkit/backends/abstract.rb, line 70
def background(*args)
  SSHKit.config.deprecation_logger.log(
    'The background method is deprecated. Blame badly behaved pseudo-daemons!'
  )
  options = args.extract_options!.merge(run_in_background: true)
  create_command_and_execute(args, options).success?
end
capture(*args) click to toggle source
# File lib/sshkit/backends/abstract.rb, line 64
def capture(*args)
  options = { verbosity: Logger::DEBUG, strip: true }.merge(args.extract_options!)
  result = create_command_and_execute(args, options).full_stdout
  options[:strip] ? result.strip : result
end
download!(_remote, _local=nil, _options = {}) click to toggle source
# File lib/sshkit/backends/abstract.rb, line 137
def download!(_remote, _local=nil, _options = {}) raise MethodUnavailableError end
execute(*args) click to toggle source
# File lib/sshkit/backends/abstract.rb, line 78
def execute(*args)
  options = args.extract_options!
  create_command_and_execute(args, options).success?
end
make(commands=[]) click to toggle source
# File lib/sshkit/backends/abstract.rb, line 51
def make(commands=[])
  execute :make, commands
end
rake(commands=[]) click to toggle source
# File lib/sshkit/backends/abstract.rb, line 55
def rake(commands=[])
  execute :rake, commands
end
redact(arg) click to toggle source
# File lib/sshkit/backends/abstract.rb, line 47
def redact(arg) # Used in execute_command to hide redact() args a user passes in
  arg.to_s.extend(Redaction) # to_s due to our inability to extend Integer, etc
end
run() click to toggle source
# File lib/sshkit/backends/abstract.rb, line 29
def run
  Thread.current["sshkit_backend"] = self
  instance_exec(@host, &@block)
ensure
  Thread.current["sshkit_backend"] = nil
end
test(*args) click to toggle source
# File lib/sshkit/backends/abstract.rb, line 59
def test(*args)
  options = { verbosity: Logger::DEBUG, raise_on_non_zero_exit: false }.merge(args.extract_options!)
  create_command_and_execute(args, options).success?
end
upload!(_local, _remote, _options = {}) click to toggle source

Backends which extend the Abstract backend should implement the following methods:

# File lib/sshkit/backends/abstract.rb, line 136
def upload!(_local, _remote, _options = {}) raise MethodUnavailableError end
with(environment) { || ... } click to toggle source
# File lib/sshkit/backends/abstract.rb, line 97
def with(environment, &_block)
  env_old = (@env ||= {})
  @env = env_old.merge environment
  yield
ensure
  @env = env_old
end
within(directory) { || ... } click to toggle source
# File lib/sshkit/backends/abstract.rb, line 83
      def within(directory, &_block)
        (@pwd ||= []).push directory.to_s
        escaped = Command.shellescape_except_tilde(pwd_path)
        execute <<-EOTEST, verbosity: Logger::DEBUG
          if test ! -d #{escaped}
            then echo "Directory does not exist '#{escaped}'" 1>&2
            false
          fi
        EOTEST
        yield
      ensure
        @pwd.pop
      end

Private Instance Methods

command(args, options) click to toggle source
# File lib/sshkit/backends/abstract.rb, line 159
def command(args, options)
  SSHKit::Command.new(*args, options.merge({in: pwd_path, env: @env, host: @host, user: @user, group: @group}))
end
create_command_and_execute(args, options) click to toggle source
# File lib/sshkit/backends/abstract.rb, line 147
def create_command_and_execute(args, options)
  command(args, options).tap { |cmd| execute_command(cmd) }
end
execute_command(_cmd) click to toggle source
# File lib/sshkit/backends/abstract.rb, line 138
def execute_command(_cmd) raise MethodUnavailableError end
output() click to toggle source
# File lib/sshkit/backends/abstract.rb, line 143
def output
  SSHKit.config.output
end
pwd_path() click to toggle source
# File lib/sshkit/backends/abstract.rb, line 151
def pwd_path
  if @pwd.nil? || @pwd.empty?
    nil
  else
    File.join(@pwd)
  end
end