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 8
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 13
def call(env)
  env[:machine_mac_addresses] = read_mac_addresses(env[:machine].provider.driver.connection, env[:machine])
end
read_mac_addresses(libvirt, machine) click to toggle source
# File lib/vagrant-libvirt/action/read_mac_addresses.rb, line 17
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')

  return {} if mac.empty?

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