class Vana::Element::Shell
shell element
Public Instance Methods
action(host, *_args)
click to toggle source
# File lib/vana/element/shell.rb, line 24 def action(host, *_args) if host == 'localhost' stdout, stderr, status = Open3.capture3(@opts[:cmd]) { cmd: @opts[:cmd], stdout: stdout, stderr: stderr, success: status.success?, status: status.exitstatus, pid: status.pid } else Net::SSH.start(host) do |ssh| output = { cmd: @opts[:cmd], stdout: '', stderr: '' } ssh.open_channel do |channel| channel.exec(@opts[:cmd]) do |_ch, _success| # stdout channel.on_data { |_ch, data| output[:stdout] << data } # stderr channel.on_extended_data { |_ch, data| output[:stderr] << data } # exit status channel.on_request('exit-status') do |_ch, data| output[:status] = data.read_long output[:success] = output[:status].zero? end end end ssh.loop output end end end
cmd=(cmd)
click to toggle source
# File lib/vana/element/shell.rb, line 20 def cmd=(cmd) @opts[:cmd] = cmd end
setup(*args)
click to toggle source
# File lib/vana/element/shell.rb, line 15 def setup(*args) @opts[:cmd] ||= args.first @element_opts[:name] ||= @opts[:cmd] end