class Bcome::Ssh::Connector
Public Class Methods
connect(node, config = {})
click to toggle source
# File lib/objects/ssh/connector.rb, line 9 def connect(node, config = {}) handler = new(node, config) handler.connect end
new(node, config)
click to toggle source
# File lib/objects/ssh/connector.rb, line 15 def initialize(node, config) @node = node @config = config set_servers @connected_machines = [] @connection_exceptions = {} end
Public Instance Methods
connect()
click to toggle source
# File lib/objects/ssh/connector.rb, line 31 def connect return if number_unconnected_machines == 0 && !ping? if show_progress? print "\n" wrap_indicator type: :progress, size: @servers_to_connect.size, title: 'Opening connections' do open_connections end else open_connections end report_connection_outcome end
open_connections()
click to toggle source
# File lib/objects/ssh/connector.rb, line 67 def open_connections @servers_to_connect.pmap do |machine| begin machine.open_ssh_connection(ping?) if machine.has_ssh_connection? @servers_to_connect -= [machine] @connected_machines << machine signal_success if show_progress? else signal_failure if show_progress? end rescue Errno::EPIPE, Bcome::Exception::CouldNotInitiateSshConnection, ::Bcome::Exception::InvalidProxyConfig => e signal_failure if show_progress? @connection_exceptions[machine] = e end end end
ping?()
click to toggle source
# File lib/objects/ssh/connector.rb, line 27 def ping? @config[:is_ping] ? true : false end
report_connection_outcome()
click to toggle source
# File lib/objects/ssh/connector.rb, line 46 def report_connection_outcome print "\n" if ping? @connected_machines.pmap do |machine| puts machine.print_ping_result end # If any machines remain, then we couldn't connect to them @servers_to_connect.each do |machine| ping_result = { success: false, error: @connection_exceptions[machine] } puts machine.print_ping_result(ping_result) end end puts "Failed to connect to #{@servers_to_connect.size} node#{@servers_to_connect.size > 1 ? 's' : ''}".error if @servers_to_connect.any? end
show_progress?()
click to toggle source
# File lib/objects/ssh/connector.rb, line 23 def show_progress? @config[:show_progress] ? true : false end
Private Instance Methods
machines()
click to toggle source
# File lib/objects/ssh/connector.rb, line 102 def machines skip_for_hidden = true # Skip servers with hidden namespaces @node.server? ? [@node] : @node.machines(skip_for_hidden) end
number_unconnected_machines()
click to toggle source
# File lib/objects/ssh/connector.rb, line 98 def number_unconnected_machines @servers_to_connect.reject(&:has_ssh_connection?).size end
set_servers()
click to toggle source
# File lib/objects/ssh/connector.rb, line 88 def set_servers @servers_to_connect = machines.dup # Ensure that all connections are loaded. A machine might need to proxy through another that # has not yet been loaded. Here we ensure that we've traversed the tree for all required nodes. @servers_to_connect.each do |server| server.ssh_driver.set_connection_wrangler end end