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