[Libvirt-cim] [PATCH] [TEST] #3 Make sure network pool is created with a random IP

Deepti B Kalakeri deeptik at linux.vnet.ibm.com
Mon Mar 16 08:45:23 UTC 2009



Kaitlin Rupert wrote:
> # HG changeset patch
> # User Kaitlin Rupert <karupert at us.ibm.com>
> # Date 1236965462 25200
> # Node ID bc7ee42128a826ef12c8d7a90ff611a6688f8136
> # Parent  b1e05c9de638909c5c6a7ba86aa2b3551802d013
> [TEST] #3 Make sure network pool is created with a random IP.
>
> This will help prevent overlap with existing networks.  However, this won't
> completely prevent the issue.  We'd need to do test to see if the IP address
> is already used by a different network. If the network is in use, then another
> IP address should be used.
>
> Updates from 2 to 3:
>    -If IP address is already in use, return from the _init_() call.
>
> Updates from 1 to 2:
>   -Check to see if pool with the specified IP range exists, if so, return a
>    meaningful error
>   -Since the NetXML generates a random IP, creating a NetXML object in the
>    destroy call will generate an object with a different IP.  Instead, use
>    the virsh call to destroy the network.
>
> Signed-off-by: Kaitlin Rupert <karupert at us.ibm.com>
>
> diff -r b1e05c9de638 -r bc7ee42128a8 suites/libvirt-cim/lib/XenKvmLib/common_util.py
> --- a/suites/libvirt-cim/lib/XenKvmLib/common_util.py	Fri Mar 13 10:31:05 2009 -0700
> +++ b/suites/libvirt-cim/lib/XenKvmLib/common_util.py	Fri Mar 13 10:31:02 2009 -0700
> @@ -36,7 +36,7 @@
>                              CIM_ERROR_GETINSTANCE
>  from CimTest.ReturnCodes import PASS, FAIL, XFAIL_RC
>  from XenKvmLib.xm_virt_util import diskpool_list, virsh_version, net_list,\
> -                                   domain_list, virt2uri
> +                                   domain_list, virt2uri, net_destroy
>  from XenKvmLib.vxml import PoolXML, NetXML
>  from VirtLib import utils 
>  from XenKvmLib.const import default_pool_name, default_network_name
> @@ -438,11 +438,9 @@
>      if net_name == None:
>          return FAIL
>    
> -    netxml = NetXML(server, virt=virt, networkname=net_name)
> -    ret = netxml.destroy_vnet()
> -    if not ret:
> -        logger.error("Failed to destroy Virtual Network '%s'",
> -                     net_name)
> +    ret = net_destroy(net_name, server, virt)
> +    if ret != 0:
> +        logger.error("Failed to destroy Virtual Network '%s'", net_name)
>          return FAIL
>
>      return PASS 
> diff -r b1e05c9de638 -r bc7ee42128a8 suites/libvirt-cim/lib/XenKvmLib/vxml.py
> --- a/suites/libvirt-cim/lib/XenKvmLib/vxml.py	Fri Mar 13 10:31:05 2009 -0700
> +++ b/suites/libvirt-cim/lib/XenKvmLib/vxml.py	Fri Mar 13 10:31:02 2009 -0700
> @@ -32,6 +32,7 @@
>  # shared by XenXML & KVMXML.
>  import os
>  import sys
> +import random
>  import platform
>  import tempfile
>  from time import sleep
> @@ -39,7 +40,8 @@
>  from xml.dom import minidom, Node
>  from xml import xpath
>  from VirtLib import utils, live
> -from XenKvmLib.xm_virt_util import get_bridge_from_network_xml, bootloader 
> +from XenKvmLib.xm_virt_util import get_bridge_from_network_xml, bootloader, \
> +                                   net_list 
>  from XenKvmLib.test_doms import set_uuid, viruuid
>  from XenKvmLib import vsms
>  from XenKvmLib import const
> @@ -182,7 +184,6 @@
>          def get_valid_bridge_name(server):
>              bridge_list = live.available_bridges(server)
>              if bridgename in bridge_list:
> -                import random
>                  vbr = bridgename + str(random.randint(1, 100))
>                  if vbr in bridge_list:
>                      logger.error('Need to give different bridge name '
> @@ -210,10 +211,25 @@
>          subnet = '192.168.122.'
>          self.add_sub_node(network, 'bridge', name=self.vbr, stp='on',
>                                               forwardDelay='0')
> -        ip = self.add_sub_node(network, 'ip', address=subnet+'1',
> +        ip_base = random.randint(1, 100)
> +        addr = subnet+'%d' % ip_base
> +        addr = subnet+'1'
>   
You are reassigning addr variable which removes the purpose of assigning 
new random ip.
> +
> +        n_list = net_list(server, virt)
> +        for _net_name in n_list:
> +            cmd = "virsh net-dumpxml %s | awk '/ip address/ {print}' | \
> +                   cut -d ' ' -f 4 | sed 's/address=//'" % _net_name 
> +            s, in_use_addr = utils.run_remote(server, cmd)
> +            in_use_addr = in_use_addr.strip("'")
> +            if in_use_addr == addr:
> +                logger.error("IP address is in use by a different network")
> +                return None 
> +
> +        ip = self.add_sub_node(network, 'ip', address=addr,
>                                                netmask='255.255.255.0')
>          dhcp = self.add_sub_node(ip, 'dhcp')
> -        self.add_sub_node(dhcp, 'range', start=subnet+'2',
> +        range_addr = subnet+'%d' % (ip_base + 1)
> +        self.add_sub_node(dhcp, 'range', start=range_addr,
>                                           end=subnet+'254')
>
>      def create_vnet(self):
> diff -r b1e05c9de638 -r bc7ee42128a8 suites/libvirt-cim/lib/XenKvmLib/xm_virt_util.py
> --- a/suites/libvirt-cim/lib/XenKvmLib/xm_virt_util.py	Fri Mar 13 10:31:05 2009 -0700
> +++ b/suites/libvirt-cim/lib/XenKvmLib/xm_virt_util.py	Fri Mar 13 10:31:02 2009 -0700
> @@ -184,6 +184,14 @@
>      if len(bridge) > 1:
>          return bridge[1]
>
> +def net_destroy(network, server, virt="Xen"):
> +    """Function destroys a given virtual network"""
> +
> +    cmd = "virsh -c %s net-destroy %s" % (virt2uri(virt), network)
> +    ret, out = utils.run_remote(server, cmd)
> +
> +    return ret 
> +
>  def network_by_bridge(bridge, server, virt="Xen"):
>      """Function returns virtual network for a given bridge"""
>
>
> _______________________________________________
> Libvirt-cim mailing list
> Libvirt-cim at redhat.com
> https://www.redhat.com/mailman/listinfo/libvirt-cim
>   

-- 
Thanks and Regards,
Deepti B. Kalakeri
IBM Linux Technology Center
deeptik at linux.vnet.ibm.com




More information about the Libvirt-cim mailing list