[Libvirt-cim] [PATCH v2 11/12] Add and utilize virsh_version_cmp

WangXu cngesaint at outlook.com
Tue May 7 09:09:26 UTC 2013


Reviewed-by: Xu Wang <cngesaint at outlook.com>
----------------------------------------
> From: jferlan at redhat.com
> To: libvirt-cim at redhat.com
> 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
> Libvirt-cim at redhat.com
> https://www.redhat.com/mailman/listinfo/libvirt-cim 		 	   		  




More information about the Libvirt-cim mailing list