module Conn::DSL
Public Instance Methods
ssh(hostname, &blk)
click to toggle source
# File lib/conn/dsl.rb, line 10 def ssh(hostname, &blk) queue = Queue.new cmd_loop = Thread.new do blk.call(queue) queue.respond_to?(:close) ? queue.close : (queue << false) end Net::SSH.start(*to_ssh_config(hostname)) do |ssh| ssh.loop do msg = queue.pop if msg input(msg) ssh.exec!(msg) do |chan, stream, data| if stream == :stdout stdout(data) else stderr(data) end end true else false end end end cmd_loop.join if cmd_loop.alive? end
ssh_pty(hostname, &blk)
click to toggle source
# File lib/conn/dsl.rb, line 70 def ssh_pty(hostname, &blk) queue = Queue.new cmd_loop = Thread.new do blk.call(queue) queue.respond_to?(:close) ? queue.close : (queue << false) end Net::SSH.start(*to_ssh_config(hostname)) do |ssh| ssh.loop do msg = queue.pop if msg input(msg) ssh.exec!(msg) do |chan, stream, data| if stream == :stdout stdout(data) else stderr(data) end end true else false end end end cmd_loop.join if cmd_loop.alive? end
ssh_try(hostname)
click to toggle source
# File lib/conn/dsl.rb, line 43 def ssh_try(hostname) ssh_try!(hostname) rescue => e false end
ssh_try!(hostname)
click to toggle source
# File lib/conn/dsl.rb, line 37 def ssh_try!(hostname) Net::SSH.start(*to_ssh_config(hostname, timeout: 3)) do |ssh| ssh.exec! 'uptime' end end
Private Instance Methods
input(str)
click to toggle source
# File lib/conn/dsl.rb, line 56 def input(str) puts "%s %s" % ["SSH<<".green.bold, str.yellow] end
stderr(str)
click to toggle source
# File lib/conn/dsl.rb, line 64 def stderr(str) puts "%s %s" % ["SSH!>".red.bold, str.red] end
stdout(str)
click to toggle source
# File lib/conn/dsl.rb, line 60 def stdout(str) puts "%s %s" % ["SSH>>".magenta.bold, str.cyan] end
to_ssh_config(hostname, **opts)
click to toggle source
# File lib/conn/dsl.rb, line 50 def to_ssh_config(hostname, **opts) config = Net::SSH::Config.for(hostname).merge(opts) user = config[:user] || Etc.getlogin [hostname, user, config] end