class Abiquo::Chef::Util
Public Class Methods
find_leases_file(search_dirs = ['/var/lib/dhcp3', '/var/lib/dhcp', '/var/lib/dhclient', '/var/lib/NetworkManager'])
click to toggle source
Tries to find the right leases file
# File lib/abiquo-chef-agent.rb, line 109 def self.find_leases_file(search_dirs = ['/var/lib/dhcp3', '/var/lib/dhcp', '/var/lib/dhclient', '/var/lib/NetworkManager']) leases = [] search_dirs.each do |d| Dir["#{d}/*"].each do |f| next if f !~ /lease(s)?$/ leases << f end end return leases end
parse_leases_file(search_dirs = ['/var/lib/dhcp3', '/var/lib/dhcp', '/var/lib/dhclient', '/var/lib/NetworkManager'])
click to toggle source
Returns a Hash representing the leases file {
:ip => ipaddr, :interface => iface, :mac => hwmac, :routers => router_addr, :domain_name => domain_name, :abiquo_api_url => url, :abiquo_api_token => token
}
# File lib/abiquo-chef-agent.rb, line 132 def self.parse_leases_file(search_dirs = ['/var/lib/dhcp3', '/var/lib/dhcp', '/var/lib/dhclient', '/var/lib/NetworkManager']) files = find_leases_file(search_dirs) leases = [] files.each do |file| l = {} File.open(file).each { |line| case line when /^lease \{/ l = {} when /fixed-address (.*);/ l[:ip] = $1 when /interface (.*);/ l[:interface] = $1 when /hardware ethernet (.*);/ l[:mac] = $1 when /option dhcp-server-identifier (.*);/ l[:dhcp_server] = $1 when /option routers (.*);/ l[:routers] = $1 when /option domain-name (.*);/ l[:domain_name] = $1 when /renew \d+ (.+);/ l[:renew] = Time.parse $1 when /option vendor-encapsulated-options\s*"(.*)"\s*;/ tokens = $1.split('@@') l[:abiquo_api_url] = tokens[0].gsub("\\", "") l[:abiquo_api_token] = tokens[1] when /^\}/ leases << l.clone if l[:abiquo_api_token] end }.close end return leases.sort_by { |l| l[:renew] }.last end