class Dopi::Node
Attributes
node_info[RW]
Public Class Methods
new(node_parser, plan)
click to toggle source
# File lib/dopi/node.rb, line 16 def initialize(node_parser, plan) @node_parser = node_parser @plan = plan @addresses = {} @node_info = {} end
Public Instance Methods
address(port)
click to toggle source
# File lib/dopi/node.rb, line 39 def address(port) @addresses[port] ||= addresses.find {|addr| connection_possible?(addr,port)} or raise NodeConnectionError, "Unable to establish a connection for node #{name} on port #{port} over #{addresses.join(', ')}" end
addresses()
click to toggle source
# File lib/dopi/node.rb, line 35 def addresses [ fqdn, plan_ip_addresses, node_info_ip_addresses ].flatten.uniq end
reset_address(port = nil)
click to toggle source
# File lib/dopi/node.rb, line 44 def reset_address(port = nil) port.nil? ? @addresses = {} : @addresses.delete(port) end
Private Instance Methods
connection_possible?(address, port)
click to toggle source
# File lib/dopi/node.rb, line 58 def connection_possible?(address, port) Timeout::timeout(DopCommon.config.connection_check_timeout.to_i) do TCPSocket.new(address, port).close end Dopi.log.debug("Connection test with #{address}:#{port} for node #{name} ok") true rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Timeout::Error, SocketError Dopi.log.debug("Connection test with #{address}:#{port} for node #{name} failed") false end
node_info_ip_addresses()
click to toggle source
# File lib/dopi/node.rb, line 54 def node_info_ip_addresses node_info[:ip_addresses] || [] end
plan_ip_addresses()
click to toggle source
# File lib/dopi/node.rb, line 50 def plan_ip_addresses @node_parser.interfaces.map{|i| [:dhcp, :none].include?(i.ip) ? nil : i.ip}.compact end