[Libvirt-cim] [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

yunguol at cn.ibm.com yunguol at cn.ibm.com
Thu Oct 30 02:53:32 UTC 2008


# HG changeset patch
# User Guolian Yun <yunguol at 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 at us.ibm.com>
+#    Deepti B. Kalakeri <dkalaker at in.ibm.com>
+#    Kaitlin Rupert <karupert at us.ibm.com>
+#    Veerendra Chandrappa <vechandr at in.ibm.com>
+#    Zhengang Li <lizg at 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
+




More information about the Libvirt-cim mailing list