[PATCH] [TEST] #2 Create a new module of xm_virt_util.py in ../lib/XenKvmLib, move some functions from live.py under lib/XenKvmLib to it

# HG changeset patch # User Guolian Yun <yunguol@cn.ibm.com> # Date 1225335207 25200 # Node ID 91f9a0bed4667b6b30a241569ef70a93b8bc0b2b # Parent 408dbb3a61b43bd0def587a9ea7e648105def002 [TEST] #2 Create a new module of xm_virt_util.py in ../lib/XenKvmLib, move some functions from live.py under lib/XenKvmLib to it diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt-cim/cimtest/AllocationCapabilities/02_alloccap_gi_errs.py --- a/suites/libvirt-cim/cimtest/AllocationCapabilities/02_alloccap_gi_errs.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/cimtest/AllocationCapabilities/02_alloccap_gi_errs.py Wed Oct 29 19:53:27 2008 -0700 @@ -57,7 +57,7 @@ from CimTest.Globals import logger, CIM_USER, CIM_PASS, CIM_NS from CimTest.ReturnCodes import PASS, SKIP, FAIL from XenKvmLib.common_util import try_getinstance -from VirtLib.live import net_list +from XenKvmLib.xm_virt_util import net_list from XenKvmLib.test_xml import netxml from XenKvmLib.test_doms import create_vnet from XenKvmLib.const import do_main, platform_sup, default_pool_name diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt-cim/cimtest/ComputerSystem/01_enum.py --- a/suites/libvirt-cim/cimtest/ComputerSystem/01_enum.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/cimtest/ComputerSystem/01_enum.py Wed Oct 29 19:53:27 2008 -0700 @@ -25,7 +25,7 @@ import sys from XenKvmLib.const import do_main from XenKvmLib import enumclass -from VirtLib import live +from XenKvmLib.xm_virt_util import domain_list from XenKvmLib.classes import get_typed_class from VirtLib import utils from CimTest import Globals @@ -41,7 +41,7 @@ cs_class = get_typed_class(options.virt, 'ComputerSystem') try: cs = enumclass.EnumInstances(options.ip, cs_class) - live_cs = live.domain_list(options.ip, options.virt) + live_cs = domain_list(options.ip, options.virt) for system in cs: name = system.name try: diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt-cim/cimtest/ComputerSystem/02_nosystems.py --- a/suites/libvirt-cim/cimtest/ComputerSystem/02_nosystems.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/cimtest/ComputerSystem/02_nosystems.py Wed Oct 29 19:53:27 2008 -0700 @@ -25,7 +25,7 @@ import sys import pywbem from XenKvmLib import enumclass -from VirtLib import live +from XenKvmLib.xm_virt_util import domain_list from VirtLib import utils from XenKvmLib.classes import get_typed_class from CimTest.Globals import logger, CIM_ERROR_ENUMERATE @@ -35,7 +35,7 @@ sup_types = ['KVM', 'LXC'] def clean_system(host, virt): - l = live.domain_list(host, virt) + l = domain_list(host, virt) if len(l) > 0: return False else: diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt-cim/cimtest/ElementCapabilities/01_forward.py --- a/suites/libvirt-cim/cimtest/ElementCapabilities/01_forward.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/cimtest/ElementCapabilities/01_forward.py Wed Oct 29 19:53:27 2008 -0700 @@ -22,7 +22,7 @@ import sys from VirtLib import utils -from VirtLib import live +from XenKvmLib.xm_virt_util import domain_list from XenKvmLib import vxml from XenKvmLib import assoc from XenKvmLib import enumclass @@ -114,7 +114,7 @@ logger.error("Failed to define the dom: %s", test_dom) return FAIL - cs = live.domain_list(server, virt) + cs = domain_list(server, virt) ccn = get_typed_class(virt, "ComputerSystem") for system in cs: try: diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt-cim/cimtest/ElementCapabilities/02_reverse.py --- a/suites/libvirt-cim/cimtest/ElementCapabilities/02_reverse.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/cimtest/ElementCapabilities/02_reverse.py Wed Oct 29 19:53:27 2008 -0700 @@ -23,7 +23,7 @@ import sys from VirtLib import utils -from VirtLib import live +from XenKvmLib.xm_virt_util import domain_list from XenKvmLib import assoc from XenKvmLib import enumclass from XenKvmLib import vxml @@ -154,7 +154,7 @@ logger.error("Failed to define the dom: %s" % test_dom) return FAIL - cs = live.domain_list(options.ip, options.virt) + cs = domain_list(options.ip, options.virt) for system in cs: cn = get_typed_class(options.virt, "EnabledLogicalElementCapabilities") status, elec_cs = call_assoc(options.ip, cn, system, options.virt) diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt-cim/cimtest/EnabledLogicalElementCapabilities/01_enum.py --- a/suites/libvirt-cim/cimtest/EnabledLogicalElementCapabilities/01_enum.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/cimtest/EnabledLogicalElementCapabilities/01_enum.py Wed Oct 29 19:53:27 2008 -0700 @@ -26,7 +26,7 @@ from XenKvmLib.classes import get_typed_class from CimTest import Globals from XenKvmLib.const import do_main -from VirtLib import live +from XenKvmLib.xm_virt_util import domain_list from VirtLib import utils sup_types = ['Xen', 'KVM', 'XenFV', 'LXC'] @@ -44,7 +44,7 @@ return 1 - names = live.domain_list(options.ip, options.virt) + names = domain_list(options.ip, options.virt) if len(elec) != len(names): Globals.logger.error("Get domain list error, the number of domains is not equal") diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt-cim/cimtest/Processor/01_processor.py --- a/suites/libvirt-cim/cimtest/Processor/01_processor.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/cimtest/Processor/01_processor.py Wed Oct 29 19:53:27 2008 -0700 @@ -25,7 +25,7 @@ import sys import pywbem from VirtLib import utils -from VirtLib import live +from XenKvmLib.xm_virt_util import active_domain_list from XenKvmLib.enumclass import GetInstance from XenKvmLib.test_xml import testxml from XenKvmLib.classes import get_typed_class @@ -48,7 +48,7 @@ vsxml.start(options.ip) # Processor instance enumerate need the domain to be active - domlist = live.active_domain_list(options.ip, options.virt) + domlist = active_domain_list(options.ip, options.virt) proc_class = get_typed_class(options.virt, "Processor") if test_dom not in domlist: status = FAIL diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt-cim/cimtest/ResourcePool/01_enum.py --- a/suites/libvirt-cim/cimtest/ResourcePool/01_enum.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/cimtest/ResourcePool/01_enum.py Wed Oct 29 19:53:27 2008 -0700 @@ -34,7 +34,7 @@ from CimTest.Globals import logger from XenKvmLib.const import do_main, default_pool_name from CimTest.ReturnCodes import PASS, FAIL, SKIP -from VirtLib.live import net_list +from XenKvmLib.xm_virt_util import net_list from XenKvmLib.vsms import RASD_TYPE_PROC, RASD_TYPE_MEM, RASD_TYPE_NET_ETHER, \ RASD_TYPE_DISK diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt-cim/cimtest/ResourcePool/02_rp_gi_errors.py --- a/suites/libvirt-cim/cimtest/ResourcePool/02_rp_gi_errors.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/cimtest/ResourcePool/02_rp_gi_errors.py Wed Oct 29 19:53:27 2008 -0700 @@ -28,7 +28,7 @@ import os import sys import pywbem -from VirtLib.live import net_list +from XenKvmLib.xm_virt_util import net_list from XenKvmLib import assoc from XenKvmLib import vxml from XenKvmLib.common_util import try_getinstance diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt-cim/cimtest/SettingsDefineCapabilities/01_forward.py --- a/suites/libvirt-cim/cimtest/SettingsDefineCapabilities/01_forward.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/cimtest/SettingsDefineCapabilities/01_forward.py Wed Oct 29 19:53:27 2008 -0700 @@ -57,7 +57,7 @@ from distutils.file_util import move_file from XenKvmLib import assoc from XenKvmLib import enumclass -from VirtLib.live import virsh_version +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 from XenKvmLib.const import do_main, default_pool_name, default_network_name diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt-cim/cimtest/VSSD/01_enum.py --- a/suites/libvirt-cim/cimtest/VSSD/01_enum.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/cimtest/VSSD/01_enum.py Wed Oct 29 19:53:27 2008 -0700 @@ -27,7 +27,7 @@ # Date : 25-10-2007 import sys -from VirtLib import live +from XenKvmLib.xm_virt_util import domain_list from XenKvmLib import enumclass from XenKvmLib.classes import get_typed_class from XenKvmLib.test_doms import destroy_and_undefine_all @@ -53,7 +53,7 @@ status = FAIL try: - live_cs = live.domain_list(options.ip, options.virt) + live_cs = domain_list(options.ip, options.virt) vssd_class = get_typed_class(options.virt, "VirtualSystemSettingData") syslst = enumclass.EnumInstances(options.ip, vssd_class) found = 0 diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt-cim/cimtest/VirtualSystemManagementService/02_destroysystem.py --- a/suites/libvirt-cim/cimtest/VirtualSystemManagementService/02_destroysystem.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/cimtest/VirtualSystemManagementService/02_destroysystem.py Wed Oct 29 19:53:27 2008 -0700 @@ -25,7 +25,7 @@ import pywbem from pywbem.cim_obj import CIMInstanceName from VirtLib import utils -from VirtLib.live import domain_list, active_domain_list +from XenKvmLib.xm_virt_util import domain_list, active_domain_list from XenKvmLib import vsms, vxml from XenKvmLib.classes import get_typed_class from XenKvmLib.const import do_main diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt-cim/cimtest/VirtualSystemManagementService/08_modifyresource.py --- a/suites/libvirt-cim/cimtest/VirtualSystemManagementService/08_modifyresource.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/cimtest/VirtualSystemManagementService/08_modifyresource.py Wed Oct 29 19:53:27 2008 -0700 @@ -26,7 +26,7 @@ import pywbem from pywbem.cim_obj import CIMInstanceName from VirtLib import utils -from VirtLib.live import network_by_bridge +from XenKvmLib.xm_virt_util import network_by_bridge from XenKvmLib import vsms from XenKvmLib import vxml from CimTest.Globals import logger diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt-cim/cimtest/VirtualSystemManagementService/10_hv_version.py --- a/suites/libvirt-cim/cimtest/VirtualSystemManagementService/10_hv_version.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/cimtest/VirtualSystemManagementService/10_hv_version.py Wed Oct 29 19:53:27 2008 -0700 @@ -22,7 +22,7 @@ import sys import pywbem -from VirtLib import live +from XenKvmLib.xm_virt_util import get_hv_ver from XenKvmLib import vsms from XenKvmLib.const import do_main from CimTest.Globals import logger @@ -47,7 +47,7 @@ try: cim_ver = service["Caption"] - local_ver = live.get_hv_ver(options.ip, options.virt) + local_ver = get_hv_ver(options.ip, options.virt) if cim_ver != local_ver: logger.error("CIM says version is `%s', but libvirt says `%s'" \ diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt-cim/lib/XenKvmLib/xm_virt_util.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/suites/libvirt-cim/lib/XenKvmLib/xm_virt_util.py Wed Oct 29 19:53:27 2008 -0700 @@ -0,0 +1,238 @@ +# +# Copyright 2008 IBM Corp. +# +# Authors: +# Dan Smith <danms@us.ibm.com> +# Deepti B. Kalakeri <dkalaker@in.ibm.com> +# Kaitlin Rupert <karupert@us.ibm.com> +# Veerendra Chandrappa <vechandr@in.ibm.com> +# Zhengang Li <lizg@cn.ibm.com> +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +import os +from VirtLib import utils +import socket + +def xm_domname(ip, domid): + + cmd = "xm domname %s" % domid + + rc, out = utils.run_remote(ip, cmd) + if rc != 0: + return None + + return out + +def list_guests_on_bridge(ip, bridge): + """Returns a list of domU names that have vifs in the + specified bridge. + """ + + cmd = "brctl show %s | grep 'vif' | grep -v vif0.*" % bridge + + rc, out = utils.run_remote(ip, cmd) + if rc != 0: + return [] + + ret = [] + lines = out.splitlines() + for l in lines: + vif = l.split()[-1] + domid = vif.replace('vif', '').split('.')[0] + domname = xm_domname(ip, domid) + if domname != None: + ret.append(domname) + + return ret + +def disk_list(ip, vs_name): + """Returns the list of disk of the specified VS + """ + + guest_cmd = "cat /proc/partitions | awk '/^ /{ print $4 } ' " + rc, out = utils.run_remote_guest(ip, vs_name, guest_cmd) + + if rc != 0: + return None + + return out + +def max_free_mem(server): + """Function to get max free mem on dom0. + + Returns an int containing the value in MB. + """ + + xm_ret, mfm = utils.run_remote(server, + "xm info | awk -F ': ' '/max_free_memory/ {print \$2}'") + if xm_ret != 0: + return None + + return int(mfm) + +def domain_list(server, virt="Xen"): + """Function to list all domains""" + if virt == "XenFV": + virt = "Xen" + + cmd = "virsh -c %s list --all | sed -e '1,2 d' -e '$ d'" % \ + utils.virt2uri(virt) + ret, out = utils.run_remote(server, cmd) + + if ret != 0: + return None + names = [] + lines = out.split("\n") + for line in lines: + dinfo = line.split() + if len(dinfo) > 1: + names.append(dinfo[1]) + + return names + +def active_domain_list(server, virt="Xen"): + """Function to list all active domains""" + if virt == "XenFV": + virt = "Xen" + + cmd = "virsh -c %s list | sed -e '1,2 d' -e '$ d'" % \ + utils.virt2uri(virt) + ret, out = utils.run_remote(server, cmd) + + if ret != 0: + return None + names = [] + lines = out.split("\n") + for line in lines: + dinfo = line.split() + if len(dinfo) > 1: + names.append(dinfo[1]) + + return names + +def bootloader(server, gtype = 0): + """ + Function to find the bootloader to be used. + It uses the following steps to determine the bootloader. + 1) The function checks if the machine is full virt or para virt. + 2) Checks if a Full virt guest option is set + NOTE : gtype = 1 for FV and gtype = 0 for PV + i) If yes, then verifies if the machine has the support to + create the full virt guest. If both options are true then + bootloader is set to 'hvmloader' + ii) Otherwise, a paravirt guest creation is requested. + a) Verfies the OS on which it is running is Red hat/Fedora/SLES. + b) sets the bootloader to pygrub for Red hat/Fedora + or domUloader.py for SLES. + 3) returns the bootloader. + """ + if fv_cap(server) and gtype == 1: + bootloader = "/usr/lib/xen/boot/hvmloader" + else: + cmd = "cat /etc/issue | grep -v ^$ | egrep 'Red Hat|Fedora'" + ret, out = utils.run_remote(server,cmd) + if ret != 0: + # For SLES + bootloader = "/usr/lib/xen/boot/domUloader.py" + else: + # For Red Hat or Fedora + bootloader = "/usr/bin/pygrub" + return bootloader + +def net_list(server, virt="Xen"): + """Function to list active network""" + names = [] + cmd = "virsh -c %s net-list | sed -e '1,2 d' -e '$ d'" % \ + utils.virt2uri(virt) + ret, out = utils.run_remote(server, cmd) + + if ret != 0: + return names + lines = out.split("\n") + for line in lines: + virt_network = line.split() + if len(virt_network) >= 1 and virt_network[1] == "active": + names.append(virt_network[0]) + + return names + +def get_bridge_from_network_xml(network, server, virt="Xen"): + """Function returns bridge name for a given virtual network""" + + cmd = "virsh -c %s net-dumpxml %s | awk '/bridge name/ { print $2 }'" % \ + (utils.virt2uri(virt), network) + ret, out = utils.run_remote(server, cmd) + + if ret != 0: + return None + bridge = out.split("'") + if len(bridge) > 1: + return bridge[1] + +def network_by_bridge(bridge, server, virt="Xen"): + """Function returns virtual network for a given bridge""" + + networks = net_list(server, virt) + if len(networks) == 0: + return None + + for network in networks: + if bridge == get_bridge_from_network_xml(network, server, virt): + return network + + return None + +def virsh_version(server, virt="KVM"): + cmd = "virsh -c %s -v " % utils.virt2uri(virt) + ret, out = utils.run_remote(server, cmd) + if ret != 0: + return None + return out + +def diskpool_list(server, virt="KVM"): + """Function to list active DiskPool list""" + names = [] + cmd = "virsh -c %s pool-list | sed -e '1,2 d' -e '$ d'" % \ + utils.virt2uri(virt) + ret, out = utils.run_remote(server, cmd) + + if ret != 0: + return names + + lines = out.split("\n") + for line in lines: + disk_pool = line.split() + if len(disk_pool) >= 1 and disk_pool[1] == "active": + names.append(disk_pool[0]) + + return names + +def virsh_vcpuinfo(server, dom, virt="Xen"): + cmd = "virsh -c %s vcpuinfo %s | grep VCPU | wc -l" % (utils.virt2uri(virt), + dom) + ret, out = utils.run_remote(server, cmd) + if out.isdigit(): + return out + return None + +def get_hv_ver(server, virt="Xen"): + cmd = "virsh -c %s version | grep ^Running | cut -d ' ' -f 3,4" % utils.virt2uri(virt) + ret, out = utils.run_remote(server, cmd) + if ret == 0: + return out + else: + return None +

libvirt-cim-bounces@redhat.com wrote on 2008-10-30 10:53:32:
# HG changeset patch # User Guolian Yun <yunguol@cn.ibm.com> # Date 1225335207 25200 # Node ID 91f9a0bed4667b6b30a241569ef70a93b8bc0b2b # Parent 408dbb3a61b43bd0def587a9ea7e648105def002 [TEST] #2 Create a new module of xm_virt_util.py in .. /lib/XenKvmLib, move some functions from live.py under lib/XenKvmLib to it
Please ignore this patch, I missed my DCO here. I will resend a new patch. Thanks!
diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt- cim/cimtest/AllocationCapabilities/02_alloccap_gi_errs.py --- a/suites/libvirt- cim/cimtest/AllocationCapabilities/02_alloccap_gi_errs.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt- cim/cimtest/AllocationCapabilities/02_alloccap_gi_errs.py Wed Oct 29 19:53:27 2008 -0700 @@ -57,7 +57,7 @@ from CimTest.Globals import logger, CIM_USER, CIM_PASS, CIM_NS from CimTest.ReturnCodes import PASS, SKIP, FAIL from XenKvmLib.common_util import try_getinstance -from VirtLib.live import net_list +from XenKvmLib.xm_virt_util import net_list from XenKvmLib.test_xml import netxml from XenKvmLib.test_doms import create_vnet from XenKvmLib.const import do_main, platform_sup, default_pool_name diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt- cim/cimtest/ComputerSystem/01_enum.py --- a/suites/libvirt-cim/cimtest/ComputerSystem/01_enum.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/cimtest/ComputerSystem/01_enum.py Wed Oct 29 19:53:27 2008 -0700 @@ -25,7 +25,7 @@ import sys from XenKvmLib.const import do_main from XenKvmLib import enumclass -from VirtLib import live +from XenKvmLib.xm_virt_util import domain_list from XenKvmLib.classes import get_typed_class from VirtLib import utils from CimTest import Globals @@ -41,7 +41,7 @@ cs_class = get_typed_class(options.virt, 'ComputerSystem') try: cs = enumclass.EnumInstances(options.ip, cs_class) - live_cs = live.domain_list(options.ip, options.virt) + live_cs = domain_list(options.ip, options.virt) for system in cs: name = system.name try: diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt- cim/cimtest/ComputerSystem/02_nosystems.py --- a/suites/libvirt-cim/cimtest/ComputerSystem/02_nosystems.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/cimtest/ComputerSystem/02_nosystems.py Wed Oct 29 19:53:27 2008 -0700 @@ -25,7 +25,7 @@ import sys import pywbem from XenKvmLib import enumclass -from VirtLib import live +from XenKvmLib.xm_virt_util import domain_list from VirtLib import utils from XenKvmLib.classes import get_typed_class from CimTest.Globals import logger, CIM_ERROR_ENUMERATE @@ -35,7 +35,7 @@ sup_types = ['KVM', 'LXC']
def clean_system(host, virt): - l = live.domain_list(host, virt) + l = domain_list(host, virt) if len(l) > 0: return False else: diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt- cim/cimtest/ElementCapabilities/01_forward.py --- a/suites/libvirt-cim/cimtest/ElementCapabilities/01_forward.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/cimtest/ElementCapabilities/01_forward.py Wed Oct 29 19:53:27 2008 -0700 @@ -22,7 +22,7 @@
import sys from VirtLib import utils -from VirtLib import live +from XenKvmLib.xm_virt_util import domain_list from XenKvmLib import vxml from XenKvmLib import assoc from XenKvmLib import enumclass @@ -114,7 +114,7 @@ logger.error("Failed to define the dom: %s", test_dom) return FAIL
- cs = live.domain_list(server, virt) + cs = domain_list(server, virt) ccn = get_typed_class(virt, "ComputerSystem") for system in cs: try: diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt- cim/cimtest/ElementCapabilities/02_reverse.py --- a/suites/libvirt-cim/cimtest/ElementCapabilities/02_reverse.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/cimtest/ElementCapabilities/02_reverse.py Wed Oct 29 19:53:27 2008 -0700 @@ -23,7 +23,7 @@
import sys from VirtLib import utils -from VirtLib import live +from XenKvmLib.xm_virt_util import domain_list from XenKvmLib import assoc from XenKvmLib import enumclass from XenKvmLib import vxml @@ -154,7 +154,7 @@ logger.error("Failed to define the dom: %s" % test_dom) return FAIL
- cs = live.domain_list(options.ip, options.virt) + cs = domain_list(options.ip, options.virt) for system in cs: cn = get_typed_class(options.virt, "EnabledLogicalElementCapabilities") status, elec_cs = call_assoc(options.ip, cn, system,
options.virt)
diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt- cim/cimtest/EnabledLogicalElementCapabilities/01_enum.py --- a/suites/libvirt- cim/cimtest/EnabledLogicalElementCapabilities/01_enum.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt- cim/cimtest/EnabledLogicalElementCapabilities/01_enum.py Wed Oct 29 19:53:27 2008 -0700 @@ -26,7 +26,7 @@ from XenKvmLib.classes import get_typed_class from CimTest import Globals from XenKvmLib.const import do_main -from VirtLib import live +from XenKvmLib.xm_virt_util import domain_list from VirtLib import utils
sup_types = ['Xen', 'KVM', 'XenFV', 'LXC'] @@ -44,7 +44,7 @@ return 1
- names = live.domain_list(options.ip, options.virt) + names = domain_list(options.ip, options.virt)
if len(elec) != len(names): Globals.logger.error("Get domain list error, the number of domains is not equal") diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt- cim/cimtest/Processor/01_processor.py --- a/suites/libvirt-cim/cimtest/Processor/01_processor.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/cimtest/Processor/01_processor.py Wed Oct 29 19:53:27 2008 -0700 @@ -25,7 +25,7 @@ import sys import pywbem from VirtLib import utils -from VirtLib import live +from XenKvmLib.xm_virt_util import active_domain_list from XenKvmLib.enumclass import GetInstance from XenKvmLib.test_xml import testxml from XenKvmLib.classes import get_typed_class @@ -48,7 +48,7 @@ vsxml.start(options.ip)
# Processor instance enumerate need the domain to be active - domlist = live.active_domain_list(options.ip, options.virt) + domlist = active_domain_list(options.ip, options.virt) proc_class = get_typed_class(options.virt, "Processor") if test_dom not in domlist: status = FAIL diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt- cim/cimtest/ResourcePool/01_enum.py --- a/suites/libvirt-cim/cimtest/ResourcePool/01_enum.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/cimtest/ResourcePool/01_enum.py Wed Oct 29 19:53:27 2008 -0700 @@ -34,7 +34,7 @@ from CimTest.Globals import logger from XenKvmLib.const import do_main, default_pool_name from CimTest.ReturnCodes import PASS, FAIL, SKIP -from VirtLib.live import net_list +from XenKvmLib.xm_virt_util import net_list from XenKvmLib.vsms import RASD_TYPE_PROC, RASD_TYPE_MEM, RASD_TYPE_NET_ETHER, \ RASD_TYPE_DISK
diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt- cim/cimtest/ResourcePool/02_rp_gi_errors.py --- a/suites/libvirt-cim/cimtest/ResourcePool/02_rp_gi_errors.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/cimtest/ResourcePool/02_rp_gi_errors.py Wed Oct 29 19:53:27 2008 -0700 @@ -28,7 +28,7 @@ import os import sys import pywbem -from VirtLib.live import net_list +from XenKvmLib.xm_virt_util import net_list from XenKvmLib import assoc from XenKvmLib import vxml from XenKvmLib.common_util import try_getinstance diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt- cim/cimtest/SettingsDefineCapabilities/01_forward.py --- a/suites/libvirt- cim/cimtest/SettingsDefineCapabilities/01_forward.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt- cim/cimtest/SettingsDefineCapabilities/01_forward.py Wed Oct 29 19:53:27 2008 -0700 @@ -57,7 +57,7 @@ from distutils.file_util import move_file from XenKvmLib import assoc from XenKvmLib import enumclass -from VirtLib.live import virsh_version +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 from XenKvmLib.const import do_main, default_pool_name, default_network_name diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt- cim/cimtest/VSSD/01_enum.py --- a/suites/libvirt-cim/cimtest/VSSD/01_enum.py Mon Oct 27 20:03: 31 2008 -0700 +++ b/suites/libvirt-cim/cimtest/VSSD/01_enum.py Wed Oct 29 19:53: 27 2008 -0700 @@ -27,7 +27,7 @@ # Date : 25-10-2007
import sys -from VirtLib import live +from XenKvmLib.xm_virt_util import domain_list from XenKvmLib import enumclass from XenKvmLib.classes import get_typed_class from XenKvmLib.test_doms import destroy_and_undefine_all @@ -53,7 +53,7 @@ status = FAIL
try: - live_cs = live.domain_list(options.ip, options.virt) + live_cs = domain_list(options.ip, options.virt) vssd_class = get_typed_class(options.virt, "VirtualSystemSettingData") syslst = enumclass.EnumInstances(options.ip, vssd_class) found = 0 diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt- cim/cimtest/VirtualSystemManagementService/02_destroysystem.py --- a/suites/libvirt- cim/cimtest/VirtualSystemManagementService/02_destroysystem.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt- cim/cimtest/VirtualSystemManagementService/02_destroysystem.py Wed Oct 29 19:53:27 2008 -0700 @@ -25,7 +25,7 @@ import pywbem from pywbem.cim_obj import CIMInstanceName from VirtLib import utils -from VirtLib.live import domain_list, active_domain_list +from XenKvmLib.xm_virt_util import domain_list, active_domain_list from XenKvmLib import vsms, vxml from XenKvmLib.classes import get_typed_class from XenKvmLib.const import do_main diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt- cim/cimtest/VirtualSystemManagementService/08_modifyresource.py --- a/suites/libvirt- cim/cimtest/VirtualSystemManagementService/08_modifyresource.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt- cim/cimtest/VirtualSystemManagementService/08_modifyresource.py Wed Oct 29 19:53:27 2008 -0700 @@ -26,7 +26,7 @@ import pywbem from pywbem.cim_obj import CIMInstanceName from VirtLib import utils -from VirtLib.live import network_by_bridge +from XenKvmLib.xm_virt_util import network_by_bridge from XenKvmLib import vsms from XenKvmLib import vxml from CimTest.Globals import logger diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt- cim/cimtest/VirtualSystemManagementService/10_hv_version.py --- a/suites/libvirt- cim/cimtest/VirtualSystemManagementService/10_hv_version.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt- cim/cimtest/VirtualSystemManagementService/10_hv_version.py Wed Oct 29 19:53:27 2008 -0700 @@ -22,7 +22,7 @@
import sys import pywbem -from VirtLib import live +from XenKvmLib.xm_virt_util import get_hv_ver from XenKvmLib import vsms from XenKvmLib.const import do_main from CimTest.Globals import logger @@ -47,7 +47,7 @@
try: cim_ver = service["Caption"] - local_ver = live.get_hv_ver(options.ip, options.virt) + local_ver = get_hv_ver(options.ip, options.virt)
if cim_ver != local_ver: logger.error("CIM says version is `%s', but libvirt says `%s'" \ diff -r 408dbb3a61b4 -r 91f9a0bed466 suites/libvirt- cim/lib/XenKvmLib/xm_virt_util.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/suites/libvirt-cim/lib/XenKvmLib/xm_virt_util.py Wed Oct 29 19:53:27 2008 -0700 @@ -0,0 +1,238 @@ +# +# Copyright 2008 IBM Corp. +# +# Authors: +# Dan Smith <danms@us.ibm.com> +# Deepti B. Kalakeri <dkalaker@in.ibm.com> +# Kaitlin Rupert <karupert@us.ibm.com> +# Veerendra Chandrappa <vechandr@in.ibm.com> +# Zhengang Li <lizg@cn.ibm.com> +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +import os +from VirtLib import utils +import socket + +def xm_domname(ip, domid): + + cmd = "xm domname %s" % domid + + rc, out = utils.run_remote(ip, cmd) + if rc != 0: + return None + + return out + +def list_guests_on_bridge(ip, bridge): + """Returns a list of domU names that have vifs in the + specified bridge. + """ + + cmd = "brctl show %s | grep 'vif' | grep -v vif0.*" % bridge + + rc, out = utils.run_remote(ip, cmd) + if rc != 0: + return [] + + ret = [] + lines = out.splitlines() + for l in lines: + vif = l.split()[-1] + domid = vif.replace('vif', '').split('.')[0] + domname = xm_domname(ip, domid) + if domname != None: + ret.append(domname) + + return ret + +def disk_list(ip, vs_name): + """Returns the list of disk of the specified VS + """ + + guest_cmd = "cat /proc/partitions | awk '/^ /{ print $4 } ' " + rc, out = utils.run_remote_guest(ip, vs_name, guest_cmd) + + if rc != 0: + return None + + return out + +def max_free_mem(server): + """Function to get max free mem on dom0. + + Returns an int containing the value in MB. + """ + + xm_ret, mfm = utils.run_remote(server, + "xm info | awk -F ': ' '/max_free_memory/ {print \$2}'") + if xm_ret != 0: + return None + + return int(mfm) + +def domain_list(server, virt="Xen"): + """Function to list all domains""" + if virt == "XenFV": + virt = "Xen" + + cmd = "virsh -c %s list --all | sed -e '1,2 d' -e '$ d'" % \ + utils.virt2uri(virt) + ret, out = utils.run_remote(server, cmd) + + if ret != 0: + return None + names = [] + lines = out.split("\n") + for line in lines: + dinfo = line.split() + if len(dinfo) > 1: + names.append(dinfo[1]) + + return names + +def active_domain_list(server, virt="Xen"): + """Function to list all active domains""" + if virt == "XenFV": + virt = "Xen" + + cmd = "virsh -c %s list | sed -e '1,2 d' -e '$ d'" % \ + utils.virt2uri(virt) + ret, out = utils.run_remote(server, cmd) + + if ret != 0: + return None + names = [] + lines = out.split("\n") + for line in lines: + dinfo = line.split() + if len(dinfo) > 1: + names.append(dinfo[1]) + + return names + +def bootloader(server, gtype = 0): + """ + Function to find the bootloader to be used. + It uses the following steps to determine the bootloader. + 1) The function checks if the machine is full virt or para virt. + 2) Checks if a Full virt guest option is set + NOTE : gtype = 1 for FV and gtype = 0 for PV + i) If yes, then verifies if the machine has the support to + create the full virt guest. If both options are true then + bootloader is set to 'hvmloader' + ii) Otherwise, a paravirt guest creation is requested. + a) Verfies the OS on which it is running is Red hat/Fedora/SLES. + b) sets the bootloader to pygrub for Red hat/Fedora + or domUloader.py for SLES. + 3) returns the bootloader. + """ + if fv_cap(server) and gtype == 1: + bootloader = "/usr/lib/xen/boot/hvmloader" + else: + cmd = "cat /etc/issue | grep -v ^$ | egrep 'Red Hat|Fedora'" + ret, out = utils.run_remote(server,cmd) + if ret != 0: + # For SLES + bootloader = "/usr/lib/xen/boot/domUloader.py" + else: + # For Red Hat or Fedora + bootloader = "/usr/bin/pygrub" + return bootloader + +def net_list(server, virt="Xen"): + """Function to list active network""" + names = [] + cmd = "virsh -c %s net-list | sed -e '1,2 d' -e '$ d'" % \ + utils.virt2uri(virt) + ret, out = utils.run_remote(server, cmd) + + if ret != 0: + return names + lines = out.split("\n") + for line in lines: + virt_network = line.split() + if len(virt_network) >= 1 and virt_network[1] == "active": + names.append(virt_network[0]) + + return names + +def get_bridge_from_network_xml(network, server, virt="Xen"): + """Function returns bridge name for a given virtual network""" + + cmd = "virsh -c %s net-dumpxml %s | awk '/bridge name/ { print $2 }'" % \ + (utils.virt2uri(virt), network) + ret, out = utils.run_remote(server, cmd) + + if ret != 0: + return None + bridge = out.split("'") + if len(bridge) > 1: + return bridge[1] + +def network_by_bridge(bridge, server, virt="Xen"): + """Function returns virtual network for a given bridge""" + + networks = net_list(server, virt) + if len(networks) == 0: + return None + + for network in networks: + if bridge == get_bridge_from_network_xml(network, server, virt): + return network + + return None + +def virsh_version(server, virt="KVM"): + cmd = "virsh -c %s -v " % utils.virt2uri(virt) + ret, out = utils.run_remote(server, cmd) + if ret != 0: + return None + return out + +def diskpool_list(server, virt="KVM"): + """Function to list active DiskPool list""" + names = [] + cmd = "virsh -c %s pool-list | sed -e '1,2 d' -e '$ d'" % \ + utils.virt2uri(virt) + ret, out = utils.run_remote(server, cmd) + + if ret != 0: + return names + + lines = out.split("\n") + for line in lines: + disk_pool = line.split() + if len(disk_pool) >= 1 and disk_pool[1] == "active": + names.append(disk_pool[0]) + + return names + +def virsh_vcpuinfo(server, dom, virt="Xen"): + cmd = "virsh -c %s vcpuinfo %s | grep VCPU | wc -l" % (utils. virt2uri(virt), + dom) + ret, out = utils.run_remote(server, cmd) + if out.isdigit(): + return out + return None + +def get_hv_ver(server, virt="Xen"): + cmd = "virsh -c %s version | grep ^Running | cut -d ' ' -f 3,4" % utils.virt2uri(virt) + ret, out = utils.run_remote(server, cmd) + if ret == 0: + return out + else: + return None +
_______________________________________________ Libvirt-cim mailing list Libvirt-cim@redhat.com https://www.redhat.com/mailman/listinfo/libvirt-cim
participants (2)
-
Guo Lian Yun
-
yunguol@cn.ibm.com