Class: CondorCloud::DefaultIPAgent
- 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
Instance Method Summary collapse
- #addresses ⇒ Object
- #find_free_mac ⇒ Object
- #find_ip_by_mac(mac) ⇒ Object
- #find_mac_by_ip(ip) ⇒ Object
-
#initialize(opts = {}) ⇒ DefaultIPAgent
constructor
A new instance of DefaultIPAgent.
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
#addresses ⇒ Object
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_mac ⇒ Object
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 |