class Bosh::Deployer::RemoteTunnel
Attributes
logger[R]
ssh_server[R]
wait[R]
Public Class Methods
new(ssh_server, wait, logger)
click to toggle source
# File lib/bosh/deployer/remote_tunnel.rb, line 5 def initialize(ssh_server, wait, logger) @ssh_server = ssh_server @wait = wait @logger = logger end
Public Instance Methods
create(ip, port)
click to toggle source
# File lib/bosh/deployer/remote_tunnel.rb, line 11 def create(ip, port) return if sessions[port] loop until ssh_server.readable?(ip) # sshd is up, sleep while host keys are generated Kernel.sleep(wait) loop do session = ssh_server.start_session(ip) if session sessions[port] = session break end end sessions[port].forward.remote(port, '127.0.0.1', port) logger.info("SSH forwarding for port #{port} started: OK") monitor_session(port) cleanup_at_exit end
Private Instance Methods
cleanup_at_exit()
click to toggle source
# File lib/bosh/deployer/remote_tunnel.rb, line 55 def cleanup_at_exit Kernel.at_exit do status = $!.is_a?(::SystemExit) ? $!.status : nil close_ssh_sessions exit status if status end end
close_ssh_sessions()
click to toggle source
# File lib/bosh/deployer/remote_tunnel.rb, line 63 def close_ssh_sessions sessions.each_value { |s| s.close } end
monitor_session(port)
click to toggle source
# File lib/bosh/deployer/remote_tunnel.rb, line 39 def monitor_session(port) Thread.new do while sessions[port] begin sessions[port].loop { true } rescue IOError => e logger.debug( "SSH session #{sessions[port].inspect} " + "forwarding for port #{port} terminated: #{e.inspect}" ) sessions.delete(port) end end end end
sessions()
click to toggle source
# File lib/bosh/deployer/remote_tunnel.rb, line 67 def sessions @sessions ||= {} end