Class: CondorCloud::DefaultIPAgent

Inherits:
IPAgent
  • Object
show all
Defined in:
lib/deltacloud/drivers/condor/ip_agents/default.rb

Overview

Default IP agent will lookup addresses from XML files stored in config directory. You can overide default directory using { :file => ‘path’ }

Instance Attribute Summary

Attributes inherited from IPAgent

#address

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ DefaultIPAgent

Returns a new instance of DefaultIPAgent.



43
44
45
# File 'lib/deltacloud/drivers/condor/ip_agents/default.rb', line 43

def initialize(opts={})
  @mappings = Nokogiri::XML(File.open(opts[:file] || File.join('config', 'addresses.xml')))
end

Instance Method Details

#addressesObject



80
81
82
# File 'lib/deltacloud/drivers/condor/ip_agents/default.rb', line 80

def addresses
  (@mappings/'/addresses/address').collect { |a| CondorAddress.new(:ip => a.text.strip, :mac => a[:mac]) }
end

#find_free_macObject



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/deltacloud/drivers/condor/ip_agents/default.rb', line 47

def find_free_mac
  addr_hash = {}
  DefaultExecutor::new do |executor|
    addresses = (@mappings/'/addresses/address').collect { |a| CondorAddress.new(:ip => a.text.strip, :mac => a[:mac]) }

    # Make an address hash to speed up the inner loop.
    addresses.each do |address|
      addr_hash[address.mac] = address.ip
    end

    executor.instances.each do |instance|
      instance.public_addresses.each do |public_address|
        if addr_hash.key?(public_address.mac)
          addr_hash.delete(public_address.mac)
        end
      end
    end
  end

  raise "No available MACs to assign to instance." if addr_hash.empty?

  return addr_hash.keys.first
end

#find_ip_by_mac(mac) ⇒ Object



71
72
73
74
# File 'lib/deltacloud/drivers/condor/ip_agents/default.rb', line 71

def find_ip_by_mac(mac)
  t = (@mappings/"/addresses/address[@mac='#{mac}']").text
  t.empty? ? nil : t
end

#find_mac_by_ip(ip) ⇒ Object



76
77
78
# File 'lib/deltacloud/drivers/condor/ip_agents/default.rb', line 76

def find_mac_by_ip(ip)
  (@mappings/"/addresses/address[.='#{ip}']").first[:mac] rescue nil
end