class Proxy::DHCP::DhcpKea::SubnetServiceInitializer
Attributes
db[R]
dbname[R]
host[R]
password[R]
port[R]
username[R]
Public Class Methods
new(host, port, dbname, username, password, db, free_ips_service = nil)
click to toggle source
# File lib/smart_proxy_dhcp_kea/subnet_service_initializer.rb, line 13 def initialize(host, port, dbname, username, password, db, free_ips_service = nil) @host = host @port = port @db = db @dbname = dbname @username = username @password = password @free_ips = free_ips_service end
Public Instance Methods
initialized_subnet_service(subnet_service)
click to toggle source
# File lib/smart_proxy_dhcp_kea/subnet_service_initializer.rb, line 23 def initialized_subnet_service(subnet_service) subnet_service.add_subnets(*parse_config_for_subnets) logger.debug msg = "Initializing subnet" # load_subnet_data(subnet_service) subnet_service end
load_leases(subnet_service)
click to toggle source
Expects subnet_service to have subnet data
# File lib/smart_proxy_dhcp_kea/subnet_service_initializer.rb, line 83 def load_leases(subnet_service) leases = libvirt_network.dhcp_leases leases.map do |element| subnet = subnet_service.find_subnet(element['ipaddr']) Proxy::DHCP::Lease.new( nil, element['ipaddr'], element['mac'], subnet, Time.now.utc, Time.at(element['expirytime'] || 0).utc, 'active' ) end end
load_subnet_data(subnet_service)
click to toggle source
# File lib/smart_proxy_dhcp_kea/subnet_service_initializer.rb, line 75 def load_subnet_data(subnet_service) reservations = parse_config_for_dhcp_reservations(subnet_service) reservations.each { |record| subnet_service.add_host(record.subnet_address, record) } leases = load_leases(subnet_service) leases.each { |lease| subnet_service.add_lease(lease.subnet_address, lease) } end
parse_config_for_dhcp_reservations(subnet_service)
click to toggle source
Expects subnet_service to have subnet data
# File lib/smart_proxy_dhcp_kea/subnet_service_initializer.rb, line 56 def parse_config_for_dhcp_reservations(subnet_service) to_ret = [] doc = REXML::Document.new xml = libvirt_network.dump_xml REXML::XPath.each(doc, "//network/ip[not(@family) or @family='ipv4']/dhcp/host") do |e| subnet = subnet_service.find_subnet(e.attributes['ip']) to_ret << Proxy::DHCP::Reservation.new( e.attributes["name"], e.attributes["ip"], e.attributes["mac"], subnet, :hostname => e.attributes["name"]) end to_ret rescue Exception => e logger.error msg = "Unable to parse reservations XML: #{e}" logger.debug xml if defined?(xml) raise Proxy::DHCP::Error, msg end
parse_config_for_subnets()
click to toggle source
# File lib/smart_proxy_dhcp_kea/subnet_service_initializer.rb, line 30 def parse_config_for_subnets ret_val = [] if db == 'postgres' con = PG.connect :dbname => 'keasubnets', :user => username, :password => password, :host => host, :port => port rs = con.exec "SELECT encode(address,'escape') from subnets" else con = Mysql2::Client.new(:dbname => dbname, :user => username, :password => password, :host => host, :port => port) rs = con.query ("SELECT subnet_prefix from dhcp4_subnet") end require 'ipaddress' rs.each do |subnet| ip = IPAddress::IPv4.new subnet['encode'] ret_val << Proxy::DHCP::Subnet.new(ip.address, ip.netmask) logger.debug ip.to_s end logger.debug ret_val.to_s ret_val rescue Exception => e logger.error msg = "Unable to parse postgres subnets: #{e}" raise Proxy::DHCP::Error, msg end