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