
Kaitlin Rupert wrote:
# HG changeset patch # User Kaitlin Rupert <karupert@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@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@redhat.com https://www.redhat.com/mailman/listinfo/libvirt-cim
-- Thanks and Regards, Deepti B. Kalakeri IBM Linux Technology Center deeptik@linux.vnet.ibm.com