1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00
fog--fog/lib/fog/libvirt/requests/compute/list_interfaces.rb
Ohad Levy ed6952fbf7 [libvirt] makes libvirt code more debian friendly
debian based libvirt does not know interfaces and some node information
2012-04-09 16:41:23 +03:00

59 lines
1.5 KiB
Ruby

module Fog
module Compute
class Libvirt
class Real
def list_interfaces(filter = { })
data=[]
if filter.keys.empty?
active_networks = client.list_interfaces rescue []
defined_networks = client.list_defined_interfaces rescue []
(active_networks + defined_networks).each do |ifname|
data << interface_to_attributes(client.lookup_interface_by_name(ifname))
end
else
data = [interface_to_attributes(get_interface_by_filter(filter))]
end
data.compact
end
private
# Retrieve the interface by mac or by name
def get_interface_by_filter(filter)
case filter.keys.first
when :mac
client.lookup_interface_by_mac(filter[:mac])
when :name
client.lookup_interface_by_name(filter[:name])
end
end
def interface_to_attributes(net)
return if net.nil? || net.name == 'lo'
{
:mac => net.mac,
:name => net.name,
:active => net.active?
}
end
end
class Mock
def list_interfaces(filters={ })
if1 = mock_interface 'if1'
if2 = mock_interface 'if2'
[if1, if2]
end
def mock_interface name
{
:mac => 'aa:bb:cc:dd:ee:ff',
:name => name,
:active => true
}
end
end
end
end
end