# HG changeset patch
# User Kaitlin Rupert <karupert(a)us.ibm.com>
# Date 1257801892 28800
# Node ID 9b3156cd8d1a72573531f23cd3e0907d71685c34
# Parent 72072bf8e9b0511d69dc308f2174dea3cb797a6c
[TEST] Fix VSMS 15 to work with KVM guests and old providers
The cimtest image doesn't support reboot; older versions of libvirt-cim
attempted to reboot guests on a disable call (instead of powering them down
immediately). This fix does a virsh destroy on the guest (for older provider
sets only).
Signed-off-by: Kaitlin Rupert <karupert(a)us.ibm.com>
diff -r 72072bf8e9b0 -r 9b3156cd8d1a
suites/libvirt-cim/cimtest/VirtualSystemManagementService/15_mod_system_settings.py
---
a/suites/libvirt-cim/cimtest/VirtualSystemManagementService/15_mod_system_settings.py Mon
Nov 09 13:24:52 2009 -0800
+++
b/suites/libvirt-cim/cimtest/VirtualSystemManagementService/15_mod_system_settings.py Mon
Nov 09 13:24:52 2009 -0800
@@ -31,7 +31,8 @@
from XenKvmLib.enumclass import GetInstance
from XenKvmLib.common_util import poll_for_state_change
from XenKvmLib.const import get_provider_version
-from XenKvmLib.xm_virt_util import domain_list, active_domain_list
+from XenKvmLib.xm_virt_util import domain_list, active_domain_list, \
+ destroy_domain
sup_types = ['Xen', 'KVM', 'XenFV', 'LXC']
default_dom = 'rstest_domain'
@@ -42,6 +43,7 @@
f9_bug = "00010"
libvirt_f9_revision=613
libvirt_modify_setting_changes = 694
+disable_change_rev = 945
def get_vssd(ip, virt, get_cim_inst):
cn = get_typed_class(virt, "VirtualSystemSettingData")
@@ -63,6 +65,26 @@
return PASS, inst
+def power_down_guest(ip, virt, dom):
+ rev, changeset = get_provider_version(virt, ip)
+
+ if rev < disable_change_rev and virt == "KVM":
+ rc = destroy_domain(ip, dom, virt)
+ if rc != 0:
+ return FAIL
+ else:
+ status = cxml.cim_disable(ip)
+ if status != PASS:
+ logger.error("Failed to disable %s", dom)
+ return FAIL
+
+ status, cs = poll_for_state_change(ip, virt, dom, CIM_DISABLE)
+ if status != PASS:
+ logger.error("Failed to destroy %s", dom)
+ return FAIL
+
+ return PASS
+
@do_main(sup_types)
def main():
options = main.options
@@ -103,14 +125,9 @@
raise Exception("Failed to modify dom: %s" % default_dom)
if case == "start":
- status = cxml.cim_disable(options.ip)
+ status = power_down_guest(options.ip, options.virt, default_dom)
if status != PASS:
- raise Exception("Failed to disable %s" % default_dom)
-
- status, cs = poll_for_state_change(options.ip, options.virt,
- default_dom, CIM_DISABLE)
- if status != PASS:
- raise Exception("Failed to destroy %s" % default_dom)
+ raise Exception("Unable to disable %s" % default_dom)
status, inst = get_vssd(options.ip, options.virt, False)
if status != PASS:
diff -r 72072bf8e9b0 -r 9b3156cd8d1a suites/libvirt-cim/lib/XenKvmLib/xm_virt_util.py
--- a/suites/libvirt-cim/lib/XenKvmLib/xm_virt_util.py Mon Nov 09 13:24:52 2009 -0800
+++ b/suites/libvirt-cim/lib/XenKvmLib/xm_virt_util.py Mon Nov 09 13:24:52 2009 -0800
@@ -92,6 +92,17 @@
return int(mfm)
+def destroy_domain(server, dom, virt="Xen"):
+ """Function to destroy given domain"""
+ if virt == "XenFV":
+ virt = "Xen"
+
+ cmd = "virsh -c %s destroy %s" % (virt2uri(virt), dom)
+ ret, out = utils.run_remote(server, cmd)
+ print cmd, ret, out
+
+ return ret
+
def domain_list(server, virt="Xen"):
"""Function to list all domains"""
if virt == "XenFV":