class Proxy::DHCP::DhcpKea::KeaDHCPNetwork

Attributes

db[R]
dbname[R]
host[R]
password[R]
port[R]
username[R]

Public Class Methods

new(host, port, dbname, username, password, free_ips_service = nil, db) click to toggle source
# File lib/smart_proxy_dhcp_kea/keapostgre_dhcp_network.rb, line 9
def initialize(host, port, dbname, username, password, free_ips_service = nil, db)
  @host = host
  @port = port
  @db = db
  @dbname = dbname
  @username = username
  @password = password 
  @free_ips = free_ips_service
end

Public Instance Methods

add_dhcp_record(record) click to toggle source
# File lib/smart_proxy_dhcp_kea/keapostgre_dhcp_network.rb, line 27
def add_dhcp_record(record)
  


  if db.to_s == 'postgres' 
    con = PG.connect :dbname => 'keasubnets', :user => username, :password => password, :host => host, :port => port
    query = "SELECT subnet_id from subnets WHERE encode(address,'escape') ~ $1 ORDER BY RIGHT(encode(address,'escape'),2) DESC;"
    subnet_id = nil
    subnet_id = con.exec_params(query, [record['network']])[0]['subnet_id']
  else
    con = Mysql2::Client.new(:dbname => dbname, :user => username, :password => password, :host => host, :port => port)
    st = con.prepare("SELECT subnet_id from dhcp4_subnet WHERE subnet_prefix like ? ORDER BY RIGHT(subnet_prefix,2) DESC;")
    subnet_id = nil
    subnet_id = st.execute(record['network'].to_s + '%')[0]['subnet_id']

  end

  unless subnet_id
       raise Proxy::DHCP::Error, "Unable to find subnet_id for ip: #{record.ip}"
  end
  con.close if con
  
  if db == 'postgres'
    con = PG.connect :dbname => dbname, :user => username, :password => password, :host => host, :port => port
    query = "INSERT INTO hosts(dhcp_identifier,dhcp_identifier_type,dhcp4_subnet_id,ipv4_address,hostname,dhcp4_client_classes,dhcp4_next_server,dhcp4_boot_file_name) VALUES(DECODE($1,'hex'),0,$2,(SELECT ($3::inet - '0.0.0.0'::inet) as ip_integer),$4,'foreman',(SELECT ($5::inet - '0.0.0.0'::inet) as ip_integer),$6)"
    con.exec_params(query, [record['mac'].gsub(":",""), subnet_id, record['ip'], record['name'], record['nextServer'],record['filename']])
  else
    con = Mysql2::Client.new(:dbname => dbname, :user => username, :password => password, :host => host, :port => port)
    st = con.prepare("INSERT INTO hosts(dhcp_identifier,dhcp_identifier_type,dhcp4_subnet_id,ipv4_address,hostname,dhcp4_client_classes,dhcp4_next_server,dhcp4_boot_file_name) VALUES(?,0,?,INET_ATON(?) as ip_integer),?,'foreman',INET_ATON(?) as ip_integer),?)")
    st.execute(record['mac'].gsub(":",""), subnet_id, record['ip'], record['name'], record['nextServer'],record['filename']) 
  
  end
    
  con.close if con

end
del_dhcp_record(record) click to toggle source
# File lib/smart_proxy_dhcp_kea/keapostgre_dhcp_network.rb, line 65
def del_dhcp_record(record)

    if db == 'postgres'
      con = PG.connect :dbname => dbname, :user => username, :password => password, :host => host, :port => port
      con.exec_params("DELETE FROM hosts WHERE encode(dhcp_identifier,'hex') = $1", [record.mac.gsub(":","")])
    else 
      con = Mysql2::Client.new(:dbname => dbname, :user => username, :password => password, :host => host, :port => port)
      st = con.prepare("DELETE FROM hosts WHERE dhcp_identifier = ?")
      st.execute(record.mac.gsub(":",""))
    end

    con.close if con
end
del_record_by_mac(mac) click to toggle source
# File lib/smart_proxy_dhcp_kea/keapostgre_dhcp_network.rb, line 80
def del_record_by_mac(mac)
  
  if db == 'postgres'           
    con = PG.connect :dbname => dbname, :user => username, :password => password, :host => host, :port => port
    con.exec_params("DELETE FROM hosts WHERE encode(dhcp_identifier,'hex') = $1", [mac.gsub(":","")])
  else 
    con = Mysql2::Client.new(:dbname => dbname, :user => username, :password => password, :host => host, :port => port)
    st = con.prepare("DELETE FROM hosts WHERE dhcp_identifier = ?")
    st.execute(mac.gsub(":",""))
  end

  con.close if con

end
dhcp_leases() click to toggle source
# File lib/smart_proxy_dhcp_kea/keapostgre_dhcp_network.rb, line 19
def dhcp_leases
  find_network.dhcp_leases
rescue ArgumentError
  # workaround for ruby-libvirt < 0.6.1 - DHCP leases API is broken there
  # (http://libvirt.org/git/?p=ruby-libvirt.git;a=commit;h=c2d4192ebf28b8030b753b715a72f0cdf725d313)
  []
end
find_records_by_ip(ip) click to toggle source
# File lib/smart_proxy_dhcp_kea/keapostgre_dhcp_network.rb, line 111
def find_records_by_ip(ip)
  
  if db == 'postgres'
    con = PG.connect :dbname => dbname, :user => username, :password => password, :host => host, :port => port
    host_info = con.exec_params("SELECT encode(dhcp_identifier,'hex') as mac,(SELECT('0.0.0.0'::inet + ipv4_address)) as ip,hostname FROM hosts WHERE ipv4_address = (SELECT ($1::inet - '0.0.0.0'::inet) as ip_integer)", [ip] )
  else
    con = Mysql2::Client.new(:dbname => dbname, :user => username, :password => password, :host => host, :port => port)
    st = con.prepare("SELECT dhcp_identifier as mac,INET_NTOA(ipv4_address) as ip,hostname FROM hosts WHERE ipv4_address = INET_ATON(?)")
    host_info = st.execute(ip)
  end

  con.close if con
  Proxy::DHCP::Record.new(host_info[0]['hostname'], host_info[0]['ip'], host_info[0]['mac'].scan(/.{1,2}/).join(':'))
  rescue Exception => e
    return ''
    raise e
  end
find_records_by_mac(mac) click to toggle source
# File lib/smart_proxy_dhcp_kea/keapostgre_dhcp_network.rb, line 96
def find_records_by_mac(mac)

  if db == 'postgres'
    con = PG.connect :dbname => dbname, :user => username, :password => password, :host => host, :port => port
    host_info = con.exec_params("SELECT encode(dhcp_identifier,'hex') as mac,(SELECT('0.0.0.0'::inet + ipv4_address)) as ip,hostname FROM hosts WHERE encode(dhcp_identifier,'hex') = $1", [mac.gsub(":","")] )
  else 
    con = Mysql2::Client.new(:dbname => dbname, :user => username, :password => password, :host => host, :port => port)
    st = con.prepare("SELECT dhcp_identifier as mac,(INET_NTOA(ipv4_address)) as ip,hostname FROM hosts WHERE dhcp_identifier = ?")
    host_info = st.execute(mac.gsub(":",""))
  end

  con.close if con
  Proxy::DHCP::Record.new(host_info[0]['hostname'], host_info[0]['ip'], host_info[0]['mac'].scan(/.{1,2}/).join(':'))
end