Reviewed-by: Xu Wang <[email protected]> ---------------------------------------- > From: [email protected] > To: [email protected] > Date: Wed, 24 Apr 2013 10:09:13 -0400 > Subject: [Libvirt-cim] [PATCH v2 11/12] Add and utilize virsh_version_cmp > > The string version comparisons failed when determining if "0.10.2" was > a greater version than "0.4.1" (and other similar checks). Needed to create > a version comparison method that did the right thing. > > Also, not change to 12_create_netfs_storagevolume_errs.py to use "or" logic > rather than "and" logic on comparison. Other tests within the family use > "or" logic. > --- > .../08_CreateDiskResourcePool.py | 4 ++-- > .../10_create_storagevolume.py | 6 ++++-- > .../11_create_dir_storagevolume_errs.py | 5 +++-- > .../12_create_netfs_storagevolume_errs.py | 5 +++-- > .../13_delete_storagevolume.py | 5 +++-- > .../14_delete_storagevolume_errs.py | 5 +++-- > .../ResourcePoolConfigurationService/15_DiskPoolAutostart.py | 4 ++-- > .../cimtest/SettingsDefineCapabilities/01_forward.py | 1 - > .../VirtualSystemManagementService/19_definenetwork_ers.py | 8 ++++---- > suites/libvirt-cim/lib/XenKvmLib/common_util.py | 9 +++++---- > suites/libvirt-cim/lib/XenKvmLib/pool.py | 6 +++--- > suites/libvirt-cim/lib/XenKvmLib/rasd.py | 10 ++++++---- > suites/libvirt-cim/lib/XenKvmLib/xm_virt_util.py | 6 ++++++ > 13 files changed, 44 insertions(+), 30 deletions(-) > > diff --git > a/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/08_CreateDiskResourcePool.py > > b/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/08_CreateDiskResourcePool.py > index 636f59c..b5ec5dc 100644 > --- > a/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/08_CreateDiskResourcePool.py > +++ > b/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/08_CreateDiskResourcePool.py > @@ -50,7 +50,7 @@ > import sys > import os > from CimTest.Globals import logger > -from XenKvmLib.xm_virt_util import virsh_version > +from XenKvmLib.xm_virt_util import virsh_version, virsh_version_cmp > from CimTest.ReturnCodes import FAIL, PASS, SKIP > from XenKvmLib.const import do_main, platform_sup > from XenKvmLib.classes import get_typed_class > @@ -89,7 +89,7 @@ def main(): > dp_types = { } > > libvirt_version = virsh_version(server, virt) > - if libvirt_version < "0.4.1": > + if virsh_version_cmp(libvirt_version, "0.4.1") < 0: > logger.info("Storage pool creation support is available in Libvirt " > "version >= 0.4.1 , hence skipping the test....") > return SKIP > diff --git > a/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/10_create_storagevolume.py > > b/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/10_create_storagevolume.py > index 511463b..3b0673f 100644 > --- > a/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/10_create_storagevolume.py > +++ > b/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/10_create_storagevolume.py > @@ -38,7 +38,8 @@ from XenKvmLib.rasd import libvirt_rasd_storagepool_changes > from XenKvmLib import rpcs_service > from XenKvmLib.assoc import Associators > from XenKvmLib.enumclass import GetInstance, EnumNames > -from XenKvmLib.xm_virt_util import virsh_version, vol_list, vol_delete > +from XenKvmLib.xm_virt_util import virsh_version, virsh_version_cmp, \ > + vol_list, vol_delete > from XenKvmLib.classes import get_typed_class, inst_to_mof > from XenKvmLib.common_util import destroy_diskpool > from XenKvmLib.pool import create_pool, undefine_diskpool, DIR_POOL > @@ -186,7 +187,8 @@ def main(): > > libvirt_ver = virsh_version(server, virt) > cim_rev, changeset = get_provider_version(virt, server) > - if libvirt_ver < "0.4.1" or cim_rev < libvirt_rasd_storagepool_changes: > + if virsh_version_cmp(libvirt_ver, "0.4.1") < 0 or \ > + cim_rev < libvirt_rasd_storagepool_changes: > logger.info("Storage Volume creation support is available with Libvirt" > "version >= 0.4.1 and Libvirt-CIM rev '%s'", > libvirt_rasd_storagepool_changes) > diff --git > a/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/11_create_dir_storagevolume_errs.py > > b/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/11_create_dir_storagevolume_errs.py > index 76e1e8f..318cfa8 100644 > --- > a/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/11_create_dir_storagevolume_errs.py > +++ > b/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/11_create_dir_storagevolume_errs.py > @@ -36,7 +36,7 @@ from CimTest.Globals import logger > from XenKvmLib import rpcs_service > from pywbem.cim_types import Uint64 > from pywbem import CIM_ERR_FAILED, CIMError > -from XenKvmLib.xm_virt_util import virsh_version > +from XenKvmLib.xm_virt_util import virsh_version, virsh_version_cmp > from CimTest.ReturnCodes import FAIL, PASS, SKIP > from XenKvmLib.classes import get_typed_class, inst_to_mof > from XenKvmLib.rasd import libvirt_rasd_storagepool_changes > @@ -125,7 +125,8 @@ def main(): > > libvirt_ver = virsh_version(server, virt) > cim_rev, changeset = get_provider_version(virt, server) > - if libvirt_ver < "0.4.1" or cim_rev < libvirt_rasd_storagepool_changes: > + if virsh_version_cmp(libvirt_ver, "0.4.1") < 0 or \ > + cim_rev < libvirt_rasd_storagepool_changes: > logger.info("Storage Volume creation support is available with Libvirt" > "version >= 0.4.1 and Libvirt-CIM rev '%s'", > libvirt_rasd_storagepool_changes) > diff --git > a/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/12_create_netfs_storagevolume_errs.py > > b/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/12_create_netfs_storagevolume_errs.py > index 004af9f..215727f 100644 > --- > a/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/12_create_netfs_storagevolume_errs.py > +++ > b/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/12_create_netfs_storagevolume_errs.py > @@ -36,7 +36,7 @@ from CimTest.ReturnCodes import FAIL, PASS, SKIP > from XenKvmLib.const import do_main, platform_sup, get_provider_version > from XenKvmLib.rasd import libvirt_rasd_storagepool_changes > from XenKvmLib import rpcs_service > -from XenKvmLib.xm_virt_util import virsh_version > +from XenKvmLib.xm_virt_util import virsh_version, virsh_version_cmp > from XenKvmLib.classes import get_typed_class, inst_to_mof > from XenKvmLib.common_util import nfs_netfs_setup, netfs_cleanup > from XenKvmLib.pool import create_pool, NETFS_POOL, get_diskpool, \ > @@ -123,7 +123,8 @@ def main(): > > libvirt_ver = virsh_version(server, virt) > cim_rev, changeset = get_provider_version(virt, server) > - if libvirt_ver < "0.4.1" and cim_rev < libvirt_rasd_storagepool_changes: > + if virsh_version_cmp(libvirt_ver, "0.4.1") < 0 or \ > + cim_rev < libvirt_rasd_storagepool_changes: > logger.info("Storage Volume creation support is available with Libvirt" > "version >= 0.4.1 and Libvirt-CIM rev '%s'", > libvirt_rasd_storagepool_changes) > diff --git > a/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/13_delete_storagevolume.py > > b/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/13_delete_storagevolume.py > index d7a6365..3578532 100644 > --- > a/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/13_delete_storagevolume.py > +++ > b/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/13_delete_storagevolume.py > @@ -29,7 +29,7 @@ > import sys > from CimTest.Globals import logger > from CimTest.ReturnCodes import FAIL, PASS, SKIP > -from XenKvmLib.xm_virt_util import virsh_version > +from XenKvmLib.xm_virt_util import virsh_version, virsh_version_cmp > from XenKvmLib.const import do_main, platform_sup, get_provider_version, \ > default_pool_name, _image_dir > from XenKvmLib import rpcs_service > @@ -50,7 +50,8 @@ def main(): > > libvirt_ver = virsh_version(server, virt) > cim_rev, changeset = get_provider_version(virt, server) > - if libvirt_ver < "0.4.1" or cim_rev < libvirt_rasd_spool_del_changes: > + if virsh_version_cmp(libvirt_ver, "0.4.1") < 0 or \ > + cim_rev < libvirt_rasd_spool_del_changes: > logger.info("Storage Volume deletion support is available with Libvirt" > "version >= 0.4.1 and Libvirt-CIM rev '%s'", > libvirt_rasd_spool_del_changes) > diff --git > a/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/14_delete_storagevolume_errs.py > > b/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/14_delete_storagevolume_errs.py > index 9e33215..d7ed5ad 100644 > --- > a/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/14_delete_storagevolume_errs.py > +++ > b/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/14_delete_storagevolume_errs.py > @@ -33,7 +33,7 @@ from VirtLib import utils > from CimTest.Globals import logger > from pywbem import CIM_ERR_FAILED, CIM_ERR_INVALID_PARAMETER, CIMError > from CimTest.ReturnCodes import FAIL, PASS, SKIP > -from XenKvmLib.xm_virt_util import virsh_version > +from XenKvmLib.xm_virt_util import virsh_version, virsh_version_cmp > from XenKvmLib.const import do_main, platform_sup, get_provider_version,\ > default_pool_name, _image_dir > from XenKvmLib import rpcs_service > @@ -119,7 +119,8 @@ def main(): > > libvirt_ver = virsh_version(server, virt) > cim_rev, changeset = get_provider_version(virt, server) > - if libvirt_ver < "0.4.1" or cim_rev < libvirt_rasd_spool_del_changes: > + if virsh_version_cmp(libvirt_ver, "0.4.1") < 0 or \ > + cim_rev < libvirt_rasd_spool_del_changes: > logger.info("Storage Volume deletion support is available with Libvirt" > "version >= 0.4.1 and Libvirt-CIM rev '%s'", > libvirt_rasd_spool_del_changes) > diff --git > a/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/15_DiskPoolAutostart.py > > b/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/15_DiskPoolAutostart.py > index b7e72a8..3cf6321 100644 > --- > a/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/15_DiskPoolAutostart.py > +++ > b/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/15_DiskPoolAutostart.py > @@ -26,7 +26,7 @@ import sys > import os > from pywbem import cim_types > from CimTest.Globals import logger > -from XenKvmLib.xm_virt_util import virsh_version > +from XenKvmLib.xm_virt_util import virsh_version, virsh_version_cmp > from CimTest.ReturnCodes import FAIL, PASS, SKIP > from XenKvmLib.const import do_main, platform_sup > from XenKvmLib.classes import get_typed_class > @@ -62,7 +62,7 @@ def main(): > dp_types = { } > > libvirt_version = virsh_version(server, virt) > - if libvirt_version < "0.4.1": > + if virsh_version_cmp(libvirt_version, "0.4.1") < 0: > logger.info("Storage pool creation support is available in Libvirt " > "version >= 0.4.1 , hence skipping the test....") > return SKIP > diff --git > a/suites/libvirt-cim/cimtest/SettingsDefineCapabilities/01_forward.py > b/suites/libvirt-cim/cimtest/SettingsDefineCapabilities/01_forward.py > index 555e3c1..dd19ca0 100644 > --- a/suites/libvirt-cim/cimtest/SettingsDefineCapabilities/01_forward.py > +++ b/suites/libvirt-cim/cimtest/SettingsDefineCapabilities/01_forward.py > @@ -57,7 +57,6 @@ import os > from distutils.file_util import move_file > from XenKvmLib import assoc > from XenKvmLib import enumclass > -from XenKvmLib.xm_virt_util import virsh_version > from CimTest.ReturnCodes import PASS, FAIL, SKIP > from CimTest.Globals import logger, CIM_ERROR_GETINSTANCE, \ > CIM_ERROR_ASSOCIATORS > diff --git > a/suites/libvirt-cim/cimtest/VirtualSystemManagementService/19_definenetwork_ers.py > > b/suites/libvirt-cim/cimtest/VirtualSystemManagementService/19_definenetwork_ers.py > index cf461d1..19294db 100644 > --- > a/suites/libvirt-cim/cimtest/VirtualSystemManagementService/19_definenetwork_ers.py > +++ > b/suites/libvirt-cim/cimtest/VirtualSystemManagementService/19_definenetwork_ers.py > @@ -33,7 +33,7 @@ from CimTest.Globals import logger > from CimTest.ReturnCodes import FAIL, PASS > from XenKvmLib.const import default_network_name, do_main, > get_provider_version > from XenKvmLib.common_util import create_netpool_conf, destroy_netpool > -from XenKvmLib.xm_virt_util import virsh_version > +from XenKvmLib.xm_virt_util import virsh_version, virsh_version_cmp > > sup_types = ['Xen', 'KVM', 'XenFV'] > default_dom = 'brgtest_domain' > @@ -71,7 +71,7 @@ def main(): > libvirt_version = virsh_version(options.ip, options.virt) > inv_empty_network = "Network not found" > if options.virt == "Xen" or options.virt == "XenFV": > - if libvirt_version <= "0.3.3": > + if virsh_version_cmp(libvirt_version, "0.3.3") <= 0: > inv_empty_network = "no network with matching name" > > inv_br_str = "POST operation failed: (xend.err 'Device 0 (vif) " + \ > @@ -89,10 +89,10 @@ def main(): > > expected_values['invalid']['bridge'] = inv_br_str > else: > - if libvirt_version >= "0.7.0": > + if virsh_version_cmp(libvirt_version, "0.7.0") >= 0: > expected_values['empty']['network'] = inv_empty_network > expected_values['invalid']['network'] = inv_empty_network > - if libvirt_version >= "0.9.8": > + if virsh_version_cmp(libvirt_version, "0.9.8") >= 0: > expected_values['invalid']['bridge'] = "Cannot get interface "\ > "MTU on 'invalid'" > else: > diff --git a/suites/libvirt-cim/lib/XenKvmLib/common_util.py > b/suites/libvirt-cim/lib/XenKvmLib/common_util.py > index 9305c5e..f05fdc0 100644 > --- a/suites/libvirt-cim/lib/XenKvmLib/common_util.py > +++ b/suites/libvirt-cim/lib/XenKvmLib/common_util.py > @@ -38,7 +38,8 @@ from XenKvmLib.classes import get_typed_class > from CimTest.Globals import logger, CIM_ERROR_ENUMERATE, \ > CIM_ERROR_GETINSTANCE > from CimTest.ReturnCodes import PASS, FAIL, XFAIL_RC, SKIP > -from XenKvmLib.xm_virt_util import diskpool_list, virsh_version, net_list,\ > +from XenKvmLib.xm_virt_util import diskpool_list, virsh_version,\ > + virsh_version_cmp, net_list,\ > domain_list, virt2uri, net_destroy > from XenKvmLib.vxml import PoolXML, NetXML > from VirtLib import utils > @@ -308,7 +309,7 @@ def cleanup_restore(server, virt): > # libvirt_version >= 0.4.1 > # Hence Skipping the logic to delete the new conf file > # and just returning PASS > - if libvirt_version >= '0.4.1': > + if virsh_version_cmp(libvirt_version, '0.4.1') >= 0: > return status > try: > if os.path.exists(back_disk_file): > @@ -365,7 +366,7 @@ def create_diskpool(server, virt='KVM', > dpool=default_pool_name, > > def create_diskpool_conf(server, virt, dpool=default_pool_name): > libvirt_version = virsh_version(server, virt) > - if libvirt_version >= '0.4.1': > + if virsh_version_cmp(libvirt_version, '0.4.1') >= 0: > status, dpoolname = create_diskpool(server, virt, dpool) > diskid = "%s/%s" % ("DiskPool", dpoolname) > else: > @@ -376,7 +377,7 @@ def create_diskpool_conf(server, virt, > dpool=default_pool_name): > > def destroy_diskpool(server, virt, dpool): > libvirt_version = virsh_version(server, virt) > - if libvirt_version >= '0.4.1': > + if virsh_version_cmp(libvirt_version, '0.4.1') >= 0: > if dpool == None: > logger.error("No disk pool specified") > return FAIL > diff --git a/suites/libvirt-cim/lib/XenKvmLib/pool.py > b/suites/libvirt-cim/lib/XenKvmLib/pool.py > index a5ca331..1a57aba 100644 > --- a/suites/libvirt-cim/lib/XenKvmLib/pool.py > +++ b/suites/libvirt-cim/lib/XenKvmLib/pool.py > @@ -35,7 +35,7 @@ from XenKvmLib import rpcs_service > import pywbem > from CimTest.CimExt import CIMClassMOF > from XenKvmLib.vxml import NetXML, PoolXML > -from XenKvmLib.xm_virt_util import virsh_version > +from XenKvmLib.xm_virt_util import virsh_version, virsh_version_cmp > from XenKvmLib.vsms import RASD_TYPE_STOREVOL > from XenKvmLib.common_util import destroy_diskpool > > @@ -183,7 +183,7 @@ def undefine_netpool(server, virt, net_name): > > def undefine_diskpool(server, virt, dp_name): > libvirt_version = virsh_version(server, virt) > - if libvirt_version >= '0.4.1': > + if virsh_version_cmp(libvirt_version, '0.4.1') >= 0: > if dp_name == None: > return FAIL > > @@ -285,7 +285,7 @@ def verify_pool(server, virt, poolname, pool_attr_list, > mode_type=0, > ret_mode = net_xml.xml_get_netpool_mode() > libvirt_version = virsh_version(server, virt) > #Forward mode support was added in 0.4.2 > - if libvirt_version >= '0.4.2': > + if virsh_version_cmp(libvirt_version, '0.4.2') >= 0: > if mode_type == 1 and ret_mode != "nat": > logger.error("Error when verifying 'nat' type network") > return FAIL > diff --git a/suites/libvirt-cim/lib/XenKvmLib/rasd.py > b/suites/libvirt-cim/lib/XenKvmLib/rasd.py > index d65011e..4d4240a 100644 > --- a/suites/libvirt-cim/lib/XenKvmLib/rasd.py > +++ b/suites/libvirt-cim/lib/XenKvmLib/rasd.py > @@ -31,7 +31,7 @@ from XenKvmLib.assoc import Associators > from XenKvmLib.const import default_pool_name, default_network_name, \ > get_provider_version, default_net_type > from XenKvmLib.pool import enum_volumes > -from XenKvmLib.xm_virt_util import virsh_version > +from XenKvmLib.xm_virt_util import virsh_version, virsh_version_cmp > from XenKvmLib.common_util import parse_instance_id > > pasd_cn = 'ProcResourceAllocationSettingData' > @@ -81,7 +81,8 @@ def rasd_init_list(vsxml, virt, t_disk, t_dom, t_mac, > t_mem, server): > > libvirt_version = virsh_version(server, virt) > > - if virt == 'LXC' or (virt == 'XenFV' and libvirt_version < "0.6.3"): > + if virt == 'LXC' or (virt == 'XenFV' and \ > + virsh_version_cmp(libvirt_version, "0.6.3") < 0): > point_device = "%s/%s" %(t_dom, "mouse:usb") > elif virt == 'Xen': > point_device = "%s/%s" %(t_dom, "mouse:xen") > @@ -357,7 +358,8 @@ def get_exp_disk_rasd_len(virt, ip, rev, id): > rev < libvirt_rasd_new_changes: > exp_len = exp_base_num + exp_cdrom > > - elif rev >= libvirt_rasd_dpool_changes and libvirt_ver >= '0.4.1': > + elif rev >= libvirt_rasd_dpool_changes and \ > + virsh_version_cmp(libvirt_ver, '0.4.1') >= 0: > volumes = enum_volumes(virt, ip) > if rev >= libvirt_rasd_floppy_changes: > exp_len = ((volumes * exp_base_num) + \ > @@ -383,7 +385,7 @@ def get_exp_disk_rasd_len(virt, ip, rev, id): > exp_len = (volumes * exp_base_num) + exp_cdrom > > > - if virt != 'LXC' and libvirt_ver >= '0.4.1': > + if virt != 'LXC' and virsh_version_cmp(libvirt_ver, '0.4.1') >= 0: > if rev >= libvirt_rasd_storagepool_changes: > exp_len += exp_storagevol_rasd > > diff --git a/suites/libvirt-cim/lib/XenKvmLib/xm_virt_util.py > b/suites/libvirt-cim/lib/XenKvmLib/xm_virt_util.py > index f365a54..7749fb7 100644 > --- a/suites/libvirt-cim/lib/XenKvmLib/xm_virt_util.py > +++ b/suites/libvirt-cim/lib/XenKvmLib/xm_virt_util.py > @@ -23,6 +23,7 @@ > # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA > # > import os > +import re > from VirtLib import utils > import socket > from VirtLib.live import fv_cap > @@ -223,6 +224,11 @@ def network_by_bridge(bridge, server, virt="Xen"): > > return None > > +def virsh_version_cmp(version1, version2): > + def normalize(v): > + return [int(x) for x in re.sub(r'(\.0+)*$','', v).split(".")] > + return cmp(normalize(version1), normalize(version2)) > + > def virsh_version(server, virt="KVM"): > cmd = "virsh -c %s -v 2>/dev/null" % virt2uri(virt) > ret, out = utils.run_remote(server, cmd) > -- > 1.8.1.4 > > _______________________________________________ > Libvirt-cim mailing list > [email protected] > https://www.redhat.com/mailman/listinfo/libvirt-cim >
_______________________________________________ Libvirt-cim mailing list [email protected] https://www.redhat.com/mailman/listinfo/libvirt-cim
