[PATCH 0 of 3] #3 Add a test to verify ModifySystemSettings()

# HG changeset patch # User Kaitlin Rupert <karupert@us.ibm.com> # Date 1223669037 25200 # Node ID 5809c74c1bfa4458ce4fe72c4741d509215cd312 # Parent 408dbb3a61b43bd0def587a9ea7e648105def002 [TEST] Update inst_to_mof() to convert CIM_CimtestClass instances to inst Also update GetInstance so it returns both CIMInstance and CIM_CimtestClass objects. Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com> diff -r 408dbb3a61b4 -r 5809c74c1bfa suites/libvirt-cim/lib/XenKvmLib/classes.py --- a/suites/libvirt-cim/lib/XenKvmLib/classes.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/lib/XenKvmLib/classes.py Fri Oct 10 13:03:57 2008 -0700 @@ -18,6 +18,7 @@ # 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 pywbem virt_types = ['Xen', 'KVM', 'XenFV', 'LXC'] @@ -47,6 +48,9 @@ #FIXME This function is only needed for libcmpiutil versions 0.4 and later. #Once version 0.4 is obsolete, this function should be removed. def inst_to_mof(inst): + if not isinstance(inst, pywbem.cim_obj.CIMInstance): + inst = inst.inst + mof_str = inst.tomof() mof_inst = "" diff -r 408dbb3a61b4 -r 5809c74c1bfa suites/libvirt-cim/lib/XenKvmLib/enumclass.py --- a/suites/libvirt-cim/lib/XenKvmLib/enumclass.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/lib/XenKvmLib/enumclass.py Fri Oct 10 13:03:57 2008 -0700 @@ -103,7 +103,7 @@ return list -def GetInstance(host, cn, keys): +def GetInstance(host, cn, keys, ret_cim_inst=False): '''Resolve the enumeration given the @cn. Return a list of CIMInstance objects.''' @@ -112,6 +112,9 @@ try: inst = CIM_CimtestClass(host, ref) + + if ret_cim_inst: + inst = inst.inst except pywbem.CIMError, arg: print arg[1]

+1 from me. Best, Regards Daisy (运国莲) VSM Team, China Systems & Technology Labs (CSTL) E-mail: yunguol@cn.ibm.com TEL: (86)-21-60922403 Building 10, 399 Ke Yuan Rd, Pudong Shanghai, 201203 Kaitlin Rupert <kaitlin@linux.vnet.ibm.com> Sent by: libvirt-cim-bounces@redhat.com 2008-10-30 07:17 Please respond to List for discussion and development of libvirt CIM <libvirt-cim@redhat.com> To libvirt-cim@redhat.com cc Subject [Libvirt-cim] [PATCH 1 of 3] [TEST] Update inst_to_mof() to convert CIM_CimtestClass instances to inst # HG changeset patch # User Kaitlin Rupert <karupert@us.ibm.com> # Date 1223669037 25200 # Node ID 5809c74c1bfa4458ce4fe72c4741d509215cd312 # Parent 408dbb3a61b43bd0def587a9ea7e648105def002 [TEST] Update inst_to_mof() to convert CIM_CimtestClass instances to inst Also update GetInstance so it returns both CIMInstance and CIM_CimtestClass objects. Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com> diff -r 408dbb3a61b4 -r 5809c74c1bfa suites/libvirt-cim/lib/XenKvmLib/classes.py --- a/suites/libvirt-cim/lib/XenKvmLib/classes.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/lib/XenKvmLib/classes.py Fri Oct 10 13:03:57 2008 -0700 @@ -18,6 +18,7 @@ # 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 pywbem virt_types = ['Xen', 'KVM', 'XenFV', 'LXC'] @@ -47,6 +48,9 @@ #FIXME This function is only needed for libcmpiutil versions 0.4 and later. #Once version 0.4 is obsolete, this function should be removed. def inst_to_mof(inst): + if not isinstance(inst, pywbem.cim_obj.CIMInstance): + inst = inst.inst + mof_str = inst.tomof() mof_inst = "" diff -r 408dbb3a61b4 -r 5809c74c1bfa suites/libvirt-cim/lib/XenKvmLib/enumclass.py --- a/suites/libvirt-cim/lib/XenKvmLib/enumclass.py Mon Oct 27 20:03:31 2008 -0700 +++ b/suites/libvirt-cim/lib/XenKvmLib/enumclass.py Fri Oct 10 13:03:57 2008 -0700 @@ -103,7 +103,7 @@ return list -def GetInstance(host, cn, keys): +def GetInstance(host, cn, keys, ret_cim_inst=False): '''Resolve the enumeration given the @cn. Return a list of CIMInstance objects.''' @@ -112,6 +112,9 @@ try: inst = CIM_CimtestClass(host, ref) + + if ret_cim_inst: + inst = inst.inst except pywbem.CIMError, arg: print arg[1] _______________________________________________ Libvirt-cim mailing list Libvirt-cim@redhat.com https://www.redhat.com/mailman/listinfo/libvirt-cim

# HG changeset patch # User Kaitlin Rupert <karupert@us.ibm.com> # Date 1223669037 25200 # Node ID 3648a3f070f319d031110c8dba89ab5a47e90363 # Parent 5809c74c1bfa4458ce4fe72c4741d509215cd312 [TEST] #2 Add VSMS 15_mod_system_settings.py This test verifies the ModifySystemSettings() call. Updates: -Remove virt param from cleanup_env() -For LXC guests, return a XFAIL because the containers XML isn't updated by libvirt properly Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com> diff -r 5809c74c1bfa -r 3648a3f070f3 suites/libvirt-cim/cimtest/VirtualSystemManagementService/15_mod_system_settings.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/suites/libvirt-cim/cimtest/VirtualSystemManagementService/15_mod_system_settings.py Fri Oct 10 13:03:57 2008 -0700 @@ -0,0 +1,136 @@ +#!/usr/bin/python +# +# Copyright 2008 IBM Corp. +# +# Authors: +# Kaitlin Rupert <karupert@us.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 sys +import pywbem +from XenKvmLib import vsms +from XenKvmLib import vxml +from CimTest.Globals import logger +from CimTest.ReturnCodes import PASS, FAIL, XFAIL_RC +from XenKvmLib.const import do_main, default_network_name +from XenKvmLib.classes import get_typed_class, inst_to_mof +from XenKvmLib.enumclass import GetInstance +from XenKvmLib.common_util import poll_for_state_change + +sup_types = ['Xen', 'KVM', 'XenFV', 'LXC'] +default_dom = 'rstest_domain' +cpu = 2 +RECOVERY_VAL = 3 +DEFINED_STATE = 3 +bug = "00008" + +def cleanup_env(ip, cxml): + cxml.cim_destroy(ip) + cxml.undefine(ip) + +def get_vssd(ip, virt, get_cim_inst): + cn = get_typed_class(virt, "VirtualSystemSettingData") + inst = None + + try: + if virt == "XenFV": + virt = "Xen" + + key_list = {"InstanceID" : "%s:%s" % (virt, default_dom) } + inst = GetInstance(ip, cn, key_list, get_cim_inst) + + except Exception, details: + logger.error(details) + return FAIL, inst + + if inst is None: + return FAIL, inst + + return PASS, inst + +@do_main(sup_types) +def main(): + options = main.options + + test_cases = ["define", "start"] + cxml = vxml.get_class(options.virt)(default_dom, vcpus=cpu) + service = vsms.get_vsms_class(options.virt)(options.ip) + + for case in test_cases: + #Each time through, define guest using a default XML + cxml.undefine(options.ip) + cxml = vxml.get_class(options.virt)(default_dom, vcpus=cpu) + ret = cxml.cim_define(options.ip) + if not ret: + logger.error("Failed to define the dom: %s", default_dom) + cleanup_env(options.ip, cxml) + return FAIL + + if case == "start": + ret = cxml.start(options.ip) + if not ret: + logger.error("Failed to start %s", default_dom) + cleanup_env(options.ip, cxml) + return FAIL + + status, inst = get_vssd(options.ip, options.virt, True) + if status != PASS: + logger.error("Failed to get the VSSD instance for %s", default_dom) + cleanup_env(options.ip, cxml) + return FAIL + + inst['AutomaticRecoveryAction'] = pywbem.cim_types.Uint16(RECOVERY_VAL) + vssd = inst_to_mof(inst) + + ret = service.ModifySystemSettings(SystemSettings=vssd) + if ret[0] != 0: + logger.error("Failed to modify dom: %s", default_dom) + cleanup_env(options.ip, cxml) + return FAIL + + if case == "start": + #This should be replaced with a RSC to shutdownt he guest + cxml.destroy(options.ip) + status, cs = poll_for_state_change(options.ip, options.virt, + default_dom, DEFINED_STATE) + if status != PASS: + logger.error("Failed to destroy %s", default_dom) + cleanup_env(options.ip, cxml) + return FAIL + + status, inst = get_vssd(options.ip, options.virt, False) + if status != PASS: + logger.error("Failed to get the VSSD instance for %s", default_dom) + cleanup_env(options.ip, cxml) + return FAIL + + if inst.AutomaticRecoveryAction != RECOVERY_VAL: + logger.error("%s not updated properly.", default_dom) + logger.error("Exp AutomaticRecoveryAction=%d, got %d", RECOVERY_VAL, + inst.AutomaticRecoveryAction) + cleanup_env(options.ip, cxml) + if options.virt == "LXC": + return XFAIL_RC(bug) + return FAIL + + cleanup_env(options.ip, cxml) + + return PASS + +if __name__ == "__main__": + sys.exit(main()) +

# HG changeset patch # User Kaitlin Rupert <karupert@us.ibm.com> # Date 1223669037 25200 # Node ID 3648a3f070f319d031110c8dba89ab5a47e90363 # Parent 5809c74c1bfa4458ce4fe72c4741d509215cd312 [TEST] #2 Add VSMS 15_mod_system_settings.py
This test verifies the ModifySystemSettings() call.
Updates: -Remove virt param from cleanup_env() -For LXC guests, return a XFAIL because the containers XML isn't updated by libvirt properly
Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com>
diff -r 5809c74c1bfa -r 3648a3f070f3 suites/libvirt- cim/cimtest/VirtualSystemManagementService/15_mod_system_settings.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/suites/libvirt- cim/cimtest/VirtualSystemManagementService/15_mod_system_settings.py Fri Oct 10 13:03:57 2008 -0700 @@ -0,0 +1,136 @@ +#!/usr/bin/python +# +# Copyright 2008 IBM Corp. +# +# Authors: +# Kaitlin Rupert <karupert@us.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 sys +import pywbem +from XenKvmLib import vsms +from XenKvmLib import vxml +from CimTest.Globals import logger +from CimTest.ReturnCodes import PASS, FAIL, XFAIL_RC +from XenKvmLib.const import do_main, default_network_name +from XenKvmLib.classes import get_typed_class, inst_to_mof +from XenKvmLib.enumclass import GetInstance +from XenKvmLib.common_util import poll_for_state_change + +sup_types = ['Xen', 'KVM', 'XenFV', 'LXC'] +default_dom = 'rstest_domain' +cpu = 2 +RECOVERY_VAL = 3 +DEFINED_STATE = 3 +bug = "00008" + +def cleanup_env(ip, cxml): + cxml.cim_destroy(ip) + cxml.undefine(ip) + +def get_vssd(ip, virt, get_cim_inst): + cn = get_typed_class(virt, "VirtualSystemSettingData") + inst = None + + try: + if virt == "XenFV": + virt = "Xen" + + key_list = {"InstanceID" : "%s:%s" % (virt, default_dom) } + inst = GetInstance(ip, cn, key_list, get_cim_inst) + + except Exception, details: + logger.error(details) + return FAIL, inst + + if inst is None: + return FAIL, inst + + return PASS, inst + +@do_main(sup_types) +def main(): + options = main.options + + test_cases = ["define", "start"] + cxml = vxml.get_class(options.virt)(default_dom, vcpus=cpu) + service = vsms.get_vsms_class(options.virt)(options.ip) + + for case in test_cases: + #Each time through, define guest using a default XML + cxml.undefine(options.ip) + cxml = vxml.get_class(options.virt)(default_dom, vcpus=cpu) + ret = cxml.cim_define(options.ip) + if not ret: + logger.error("Failed to define the dom: %s", default_dom) + cleanup_env(options.ip, cxml) + return FAIL + + if case == "start": + ret = cxml.start(options.ip) + if not ret: + logger.error("Failed to start %s", default_dom) + cleanup_env(options.ip, cxml) + return FAIL + + status, inst = get_vssd(options.ip, options.virt, True) + if status != PASS: + logger.error("Failed to get the VSSD instance for %s", default_dom) + cleanup_env(options.ip, cxml) + return FAIL + + inst['AutomaticRecoveryAction'] = pywbem.cim_types. Uint16(RECOVERY_VAL) + vssd = inst_to_mof(inst) + + ret = service.ModifySystemSettings(SystemSettings=vssd) + if ret[0] != 0: + logger.error("Failed to modify dom: %s", default_dom) + cleanup_env(options.ip, cxml) + return FAIL + + if case == "start": + #This should be replaced with a RSC to shutdownt he guest + cxml.destroy(options.ip) + status, cs = poll_for_state_change(options.ip,
+1 from me. I have a question of ModifySystemSettings() and ModifyResourceSettings(). ModifySystemSettings() method modify the attributes of VSSD, and ModifyResourceSettings() intends to modify RASD properties, right? I have to pass both RASD and VSSD instances to DefineSystem() when I try to define a vs. Would you please explain more about VSSD and RASD instance for me? Thanks! Best, Regards Daisy (运国莲) VSM Team, China Systems & Technology Labs (CSTL) E-mail: yunguol@cn.ibm.com TEL: (86)-21-60922403 Building 10, 399 Ke Yuan Rd, Pudong Shanghai, 201203 libvirt-cim-bounces@redhat.com wrote on 2008-10-30 07:17:40: options.virt,
+ default_dom, DEFINED_STATE) + if status != PASS: + logger.error("Failed to destroy %s", default_dom) + cleanup_env(options.ip, cxml) + return FAIL + + status, inst = get_vssd(options.ip, options.virt, False) + if status != PASS: + logger.error("Failed to get the VSSD instance for %s", default_dom) + cleanup_env(options.ip, cxml) + return FAIL + + if inst.AutomaticRecoveryAction != RECOVERY_VAL: + logger.error("%s not updated properly.", default_dom) + logger.error("Exp AutomaticRecoveryAction=%d, got %d", RECOVERY_VAL, + inst.AutomaticRecoveryAction) + cleanup_env(options.ip, cxml) + if options.virt == "LXC": + return XFAIL_RC(bug) + return FAIL + + cleanup_env(options.ip, cxml) + + return PASS + +if __name__ == "__main__": + sys.exit(main()) +
_______________________________________________ Libvirt-cim mailing list Libvirt-cim@redhat.com https://www.redhat.com/mailman/listinfo/libvirt-cim

Guo Lian Yun wrote:
+1 from me.
I have a question of ModifySystemSettings() and ModifyResourceSettings(). ModifySystemSettings() method modify the attributes of VSSD, and ModifyResourceSettings() intends to modify RASD properties, right?
The VSSD and RASD instances are just a way of representing the properties of the guest. So these functions really aren't modifying the VSSD or RASD instances themselves.
I have to pass both RASD and VSSD instances to DefineSystem() when I try to define a vs. Would you please explain more about VSSD and RASD instance for me?
The RASD describes the guest resources. When you define a system, you pass a RASD for each resource you want the guest to have. If you want it to have a disk, you pass in a DiskRASD. Same thing for proc, mem, network, etc. The RASD is then used by the DefineSystem() call to determine what virtual resources to add to the guest. In the case of disk, the DiskRASD tells us the path to the disk we're adding. ModifyResourceSettings() works in a similar way. If a guest has a disk with path /boot/myimage and we want to change it to /boot/not_myimage, we set the Address of the DiskRASD to "/boot/not_myimage" and pass that DiskRASD to ModifyResourceSettings(). The VSSD is a similar concept, except that it describes the properties of the guest itself. So, we set the VirtualSystemIdentifier attribute of the VSSD to give the guest a name. This is passed to the DefineSystem() call, so the provider knows what kinds of settings the guest should have. ModifySystemSettings() is used to modify the guest's settings. -- Kaitlin Rupert IBM Linux Technology Center kaitlin@linux.vnet.ibm.com

libvirt-cim-bounces@redhat.com wrote on 2008-10-30 23:56:15:
Guo Lian Yun wrote:
+1 from me.
I have a question of ModifySystemSettings() and
ModifyResourceSettings().
ModifySystemSettings() method modify the attributes of VSSD, and ModifyResourceSettings() intends to modify RASD properties, right?
The VSSD and RASD instances are just a way of representing the properties of the guest. So these functions really aren't modifying the
VSSD or RASD instances themselves.
I have to pass both RASD and VSSD instances to DefineSystem() when I try to define a vs. Would you please explain more about VSSD and RASD instance for me?
The RASD describes the guest resources. When you define a system, you pass a RASD for each resource you want the guest to have. If you want it to have a disk, you pass in a DiskRASD. Same thing for proc, mem, network, etc.
The RASD is then used by the DefineSystem() call to determine what virtual resources to add to the guest. In the case of disk, the DiskRASD
tells us the path to the disk we're adding.
ModifyResourceSettings() works in a similar way. If a guest has a disk with path /boot/myimage and we want to change it to /boot/not_myimage, we set the Address of the DiskRASD to "/boot/not_myimage" and pass that DiskRASD to ModifyResourceSettings().
The VSSD is a similar concept, except that it describes the properties of the guest itself. So, we set the VirtualSystemIdentifier attribute of the VSSD to give the guest a name. This is passed to the DefineSystem() call, so the provider knows what kinds of settings the guest should have.
ModifySystemSettings() is used to modify the guest's settings.
Thanks a lot - Kaitlin. I'm so grateful for your clear explanation.
-- Kaitlin Rupert IBM Linux Technology Center kaitlin@linux.vnet.ibm.com
_______________________________________________ Libvirt-cim mailing list Libvirt-cim@redhat.com https://www.redhat.com/mailman/listinfo/libvirt-cim

# HG changeset patch # User Kaitlin Rupert <karupert@us.ibm.com> # Date 1225321849 25200 # Node ID 3fe31c4399cc4b4df264013f612926361fd9b20d # Parent 3648a3f070f319d031110c8dba89ab5a47e90363 [TEST] #2 Fix cim_define() for LXC For LXC guests, don't supply a value for vcpu when creating a ProcRASD. The VirtualQuantity attribute isn't valid for containers guests. Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com> diff -r 3648a3f070f3 -r 3fe31c4399cc suites/libvirt-cim/lib/XenKvmLib/vsms.py --- a/suites/libvirt-cim/lib/XenKvmLib/vsms.py Fri Oct 10 13:03:57 2008 -0700 +++ b/suites/libvirt-cim/lib/XenKvmLib/vsms.py Wed Oct 29 16:10:49 2008 -0700 @@ -174,7 +174,7 @@ pass class CIM_ProcResourceAllocationSettingData(CIMClassMOF): - def __init__(self, vcpu, name, weight=None, limit=None): + def __init__(self, name, vcpu=None, weight=None, limit=None): self.ResourceType = RASD_TYPE_PROC if vcpu != None: diff -r 3648a3f070f3 -r 3fe31c4399cc suites/libvirt-cim/lib/XenKvmLib/vxml.py --- a/suites/libvirt-cim/lib/XenKvmLib/vxml.py Fri Oct 10 13:03:57 2008 -0700 +++ b/suites/libvirt-cim/lib/XenKvmLib/vxml.py Wed Oct 29 16:10:49 2008 -0700 @@ -472,7 +472,10 @@ mac=net_mac, name=dom_name, virt_net=net_name) - self.pasd = vsms.get_pasd_class(virt)(vcpu=vcpus, name=dom_name) + if virt == 'LXC': + self.pasd = vsms.get_pasd_class(virt)(name=dom_name) + else: + self.pasd = vsms.get_pasd_class(virt)(vcpu=vcpus, name=dom_name) self.masd = vsms.get_masd_class(virt)(megabytes=mem, mallocunits=mem_allocunits, name=dom_name)

+1 from me. Best, Regards Daisy (运国莲) VSM Team, China Systems & Technology Labs (CSTL) E-mail: yunguol@cn.ibm.com TEL: (86)-21-60922403 Building 10, 399 Ke Yuan Rd, Pudong Shanghai, 201203 libvirt-cim-bounces@redhat.com wrote on 2008-10-30 07:17:41:
# HG changeset patch # User Kaitlin Rupert <karupert@us.ibm.com> # Date 1225321849 25200 # Node ID 3fe31c4399cc4b4df264013f612926361fd9b20d # Parent 3648a3f070f319d031110c8dba89ab5a47e90363 [TEST] #2 Fix cim_define() for LXC
For LXC guests, don't supply a value for vcpu when creating a ProcRASD. The VirtualQuantity attribute isn't valid for containers guests.
Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com>
diff -r 3648a3f070f3 -r 3fe31c4399cc suites/libvirt-cim/lib/XenKvmLib/vsms.py --- a/suites/libvirt-cim/lib/XenKvmLib/vsms.py Fri Oct 10 13:03:572008 -0700 +++ b/suites/libvirt-cim/lib/XenKvmLib/vsms.py Wed Oct 29 16:10:492008 -0700 @@ -174,7 +174,7 @@ pass
class CIM_ProcResourceAllocationSettingData(CIMClassMOF): - def __init__(self, vcpu, name, weight=None, limit=None): + def __init__(self, name, vcpu=None, weight=None, limit=None): self.ResourceType = RASD_TYPE_PROC
if vcpu != None: diff -r 3648a3f070f3 -r 3fe31c4399cc suites/libvirt-cim/lib/XenKvmLib/vxml.py --- a/suites/libvirt-cim/lib/XenKvmLib/vxml.py Fri Oct 10 13:03:572008 -0700 +++ b/suites/libvirt-cim/lib/XenKvmLib/vxml.py Wed Oct 29 16:10:492008 -0700 @@ -472,7 +472,10 @@ mac=net_mac, name=dom_name, virt_net=net_name) - self.pasd = vsms.get_pasd_class(virt)(vcpu=vcpus, name=dom_name) + if virt == 'LXC': + self.pasd = vsms.get_pasd_class(virt)(name=dom_name) + else: + self.pasd = vsms.get_pasd_class(virt)(vcpu=vcpus, name=dom_name) self.masd = vsms.get_masd_class(virt)(megabytes=mem, mallocunits=mem_allocunits, name=dom_name)
_______________________________________________ Libvirt-cim mailing list Libvirt-cim@redhat.com https://www.redhat.com/mailman/listinfo/libvirt-cim
participants (2)
-
Guo Lian Yun
-
Kaitlin Rupert