Class: SSHKit::Backend::Abstract
- Inherits:
-
Object
- Object
- SSHKit::Backend::Abstract
show all
- Extended by:
- Forwardable
- Defined in:
- lib/sshkit/backends/abstract.rb
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(host, &block) ⇒ Abstract
Returns a new instance of Abstract.
36
37
38
39
40
41
42
43
44
45
|
# 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
|
Instance Attribute Details
#host ⇒ Object
Returns the value of attribute host.
27
28
29
|
# File 'lib/sshkit/backends/abstract.rb', line 27
def host
@host
end
|
Class Method Details
.config ⇒ Object
126
127
128
|
# File 'lib/sshkit/backends/abstract.rb', line 126
def config
@config ||= OpenStruct.new
end
|
130
131
132
|
# File 'lib/sshkit/backends/abstract.rb', line 130
def configure
yield config
end
|
Instance Method Details
#as(who, &_block) ⇒ Object
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
# 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) ⇒ Object
70
71
72
73
74
75
76
|
# 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..merge(run_in_background: true)
create_command_and_execute(args, options).success?
end
|
#capture(*args) ⇒ Object
64
65
66
67
68
|
# File 'lib/sshkit/backends/abstract.rb', line 64
def capture(*args)
options = { verbosity: Logger::DEBUG, strip: true }.merge(args.)
result = create_command_and_execute(args, options).full_stdout
options[:strip] ? result.strip : result
end
|
#download!(_remote, _local = nil, _options = {}) ⇒ Object
137
|
# File 'lib/sshkit/backends/abstract.rb', line 137
def download!(_remote, _local=nil, _options = {}) raise MethodUnavailableError end
|
#execute(*args) ⇒ Object
78
79
80
81
|
# File 'lib/sshkit/backends/abstract.rb', line 78
def execute(*args)
options = args.
create_command_and_execute(args, options).success?
end
|
#make(commands = []) ⇒ Object
51
52
53
|
# File 'lib/sshkit/backends/abstract.rb', line 51
def make(commands=[])
execute :make, commands
end
|
#rake(commands = []) ⇒ Object
55
56
57
|
# File 'lib/sshkit/backends/abstract.rb', line 55
def rake(commands=[])
execute :rake, commands
end
|
#redact(arg) ⇒ Object
Used in execute_command to hide redact() args a user passes in
47
48
49
|
# File 'lib/sshkit/backends/abstract.rb', line 47
def redact(arg) arg.to_s.extend(Redaction) end
|
#run ⇒ Object
29
30
31
32
33
34
|
# 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) ⇒ Object
59
60
61
62
|
# File 'lib/sshkit/backends/abstract.rb', line 59
def test(*args)
options = { verbosity: Logger::DEBUG, raise_on_non_zero_exit: false }.merge(args.)
create_command_and_execute(args, options).success?
end
|
#upload!(_local, _remote, _options = {}) ⇒ Object
Backends which extend the Abstract backend should implement the following methods:
136
|
# File 'lib/sshkit/backends/abstract.rb', line 136
def upload!(_local, _remote, _options = {}) raise MethodUnavailableError end
|
#with(environment, &_block) ⇒ Object
97
98
99
100
101
102
103
|
# 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, &_block) ⇒ Object
83
84
85
86
87
88
89
90
91
92
93
94
95
|
# 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
|