[Kimchi-devel] [PATCH] [Kimchi] Fix issue #849: Get network name for bridged networks
Paulo Vital
pvital at linux.vnet.ibm.com
Tue Mar 8 21:04:30 UTC 2016
Reviewed-by: Paulo Vital <pvital at linux.vnet.ibm.com>
On 03/08/2016 02:56 PM, Aline Manera wrote:
> After attaching a bridged network to a guest, if you close the dialog
> and open it again, the network field was displayed in blank. So fix it.
>
> This patch also fix the KeyError issue reported in #849
>
> Signed-off-by: Aline Manera <alinefm at linux.vnet.ibm.com>
> ---
> mockmodel.py | 3 +--
> model/vmifaces.py | 28 ++++++++++++----------------
> 2 files changed, 13 insertions(+), 18 deletions(-)
>
> diff --git a/mockmodel.py b/mockmodel.py
> index a765770..cbeeb5d 100644
> --- a/mockmodel.py
> +++ b/mockmodel.py
> @@ -34,7 +34,6 @@ from wok.xmlutils.utils import xml_item_update
> from wok.plugins.kimchi import imageinfo
> from wok.plugins.kimchi import osinfo
> from wok.plugins.kimchi.model import cpuinfo
> -from wok.plugins.kimchi.model import vmifaces
> from wok.plugins.kimchi.model.groups import PAMGroupsModel
> from wok.plugins.kimchi.model.host import DeviceModel
> from wok.plugins.kimchi.model.host import DevicesModel
> @@ -86,7 +85,7 @@ class MockModel(Model):
> self._mock_storagevolumes = MockStorageVolumes()
>
> cpuinfo.get_topo_capabilities = MockModel.get_topo_capabilities
> - vmifaces.getDHCPLeases = MockModel.getDHCPLeases
> + libvirt.virNetwork.DHCPLeases = MockModel.getDHCPLeases
> libvirt.virDomain.XMLDesc = MockModel.domainXMLDesc
> libvirt.virDomain.undefine = MockModel.undefineDomain
> libvirt.virDomain.attachDeviceFlags = MockModel.attachDeviceFlags
> diff --git a/model/vmifaces.py b/model/vmifaces.py
> index 72f717b..0ec89b6 100644
> --- a/model/vmifaces.py
> +++ b/model/vmifaces.py
> @@ -29,14 +29,6 @@ from wok.plugins.kimchi.model.vms import DOM_STATE_MAP, VMModel
> from wok.plugins.kimchi.xmlutils.interface import get_iface_xml
>
>
> -def getDHCPLeases(net, mac):
> - try:
> - leases = net.DHCPLeases(mac)
> - return leases
> - except libvirt.libvirtError:
> - return []
> -
> -
> class VMIfacesModel(object):
> def __init__(self, **kargs):
> self.conn = kargs['conn']
> @@ -134,10 +126,9 @@ class VMIfaceModel(object):
>
> info['type'] = iface.attrib['type']
> info['mac'] = iface.mac.get('address')
> + info['network'] = iface.source.get('network')
> if iface.find("model") is not None:
> info['model'] = iface.model.get('type')
> - if info['type'] == 'network':
> - info['network'] = iface.source.get('network')
> if info['type'] == 'bridge':
> info['bridge'] = iface.source.get('bridge')
> info['ips'] = self._get_ips(vm, info['mac'], info['network'])
> @@ -159,14 +150,19 @@ class VMIfaceModel(object):
> # First check the ARP cache.
> with open('/proc/net/arp') as f:
> ips = [line.split()[0] for line in f.xreadlines() if mac in line]
> +
> # Some ifaces may be inactive, so if the ARP cache didn't have them,
> # and they happen to be assigned via DHCP, we can check there too.
> - net = conn.networkLookupByName(network)
> - leases = getDHCPLeases(net, mac)
> - for lease in leases:
> - ip = lease.get('ipaddr')
> - if ip not in ips:
> - ips.append(ip)
> + try:
> + # Some type of interfaces may not have a network associated with
> + net = conn.networkLookupByName(network)
> + leases = net.DHCPLeases(mac)
> + for lease in leases:
> + ip = lease.get('ipaddr')
> + if ip not in ips:
> + ips.append(ip)
> + except libvirt.libvirtError:
> + pass
>
> return ips
>
More information about the Kimchi-devel
mailing list