implemented nic_mac_addresses capability

This commit is contained in:
James Johnson 2015-04-13 04:13:12 -05:00
parent 5b1f8a85a6
commit c4c8c8afc7
5 changed files with 79 additions and 0 deletions

View File

@ -286,6 +286,14 @@ module VagrantPlugins
end
end
def self.action_read_mac_addresses
Vagrant::Action::Builder.new.tap do |b|
b.use ConfigValidate
b.use ConnectLibvirt
b.use ReadMacAddresses
end
end
# This is the action that will run a single SSH command.
def self.action_ssh_run
Vagrant::Action::Builder.new.tap do |b|
@ -336,6 +344,7 @@ module VagrantPlugins
autoload :PruneNFSExports, action_root.join('prune_nfs_exports')
autoload :ReadSSHInfo, action_root.join('read_ssh_info')
autoload :ReadMacAddresses, action_root.join('read_mac_addresses')
autoload :ReadState, action_root.join('read_state')
autoload :ResumeDomain, action_root.join('resume_domain')
autoload :SetNameOfDomain, action_root.join('set_name_of_domain')

View File

@ -0,0 +1,42 @@
require "log4r"
module VagrantPlugins
module ProviderLibvirt
module Action
class ReadMacAddresses
def initialize(app, env)
@app = app
@logger = Log4r::Logger.new("vagrant_libvirt::action::read_mac_addresses")
end
def call(env)
env[:machine_mac_addresses] = read_mac_addresses(env[:libvirt_compute], env[:machine])
end
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
end
end
end
end

View File

@ -0,0 +1,11 @@
module VagrantPlugins
module ProviderLibvirt
module Cap
class NicMacAddresses
def self.nic_mac_addresses(machine)
machine.provider.mac_addresses
end
end
end
end
end

View File

@ -37,6 +37,11 @@ module VagrantPlugins
Cap::MountP9
end
provider_capability(:libvirt, :nic_mac_addresses) do
require_relative "cap/nic_mac_addresses"
Cap::NicMacAddresses
end
# lower priority than nfs or rsync
# https://github.com/pradels/vagrant-libvirt/pull/170
synced_folder("9p", 4) do

View File

@ -49,6 +49,18 @@ module VagrantPlugins
env[:machine_ssh_info]
end
def mac_addresses
# Run a custom action called "read_mac_addresses" which will return
# a list of mac addresses used by the machine. The returned data will
# be in the following format:
#
# {
# <ADAPTER_ID>: <MAC>
# }
env = @machine.action('read_mac_addresses')
env[:machine_mac_addresses]
end
# This should return the state of the machine within this provider.
# The state must be an instance of {MachineState}.
def state