class VagrantPlugins::ProviderLibvirt::Action::ReadMacAddresses

Public Class Methods

new(app, env) click to toggle source
# File lib/vagrant-libvirt/action/read_mac_addresses.rb, line 7
def initialize(app, env)
  @app    = app
  @logger = Log4r::Logger.new("vagrant_libvirt::action::read_mac_addresses")
end

Public Instance Methods

call(env) click to toggle source
# File lib/vagrant-libvirt/action/read_mac_addresses.rb, line 12
def call(env)
  env[:machine_mac_addresses] = read_mac_addresses(env[:libvirt_compute], env[:machine])
end
read_mac_addresses(libvirt, machine) click to toggle source
# File lib/vagrant-libvirt/action/read_mac_addresses.rb, line 16
def read_mac_addresses(libvirt, machine)
  return nil if machine.id.nil?

  domain = libvirt.client.lookup_domain_by_uuid(machine.id)

  if domain.nil?
    @logger.info("Machine could not be found, assuming it got destroyed")
    machine.id = nil
    return nil
  end

  xml = Nokogiri::XML(domain.xml_desc)
  mac = xml.xpath("/domain/devices/interface/mac/@address")

  if mac.length == 0
    return {}
  end

  Hash[mac.each_with_index.map do |x,i|
    @logger.debug("interface[#{i}] = #{x.value}")
    [i,x.value]
  end]
end