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