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