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