[Libvirt-cim] [PATCH 05/10] XenKvmLib: Add controller device
John Ferlan
jferlan at redhat.com
Mon Apr 14 15:08:06 UTC 2014
On 04/14/2014 02:51 AM, Xu Wang wrote:
>
> 于 2014年04月05日 00:12, John Ferlan 写道:
>> Add support to handle a controller device variantly based up on the
>> libvirt-cim revision value
>>
>> Signed-off-by: John Ferlan <jferlan at redhat.com>
>> ---
>> suites/libvirt-cim/lib/XenKvmLib/devices.py | 6 ++++
>> suites/libvirt-cim/lib/XenKvmLib/logicaldevices.py | 2 +-
>> suites/libvirt-cim/lib/XenKvmLib/rasd.py | 25 ++++++++++++++
>> suites/libvirt-cim/lib/XenKvmLib/vsms.py | 24 +++++++++++++
>> suites/libvirt-cim/lib/XenKvmLib/vxml.py | 39 +++++++++++++++++-----
>> 5 files changed, 86 insertions(+), 10 deletions(-)
>>
>> diff --git a/suites/libvirt-cim/lib/XenKvmLib/devices.py b/suites/libvirt-cim/lib/XenKvmLib/devices.py
>> index 0ddccbb..5f26fa9 100755
>> --- a/suites/libvirt-cim/lib/XenKvmLib/devices.py
>> +++ b/suites/libvirt-cim/lib/XenKvmLib/devices.py
>> @@ -33,6 +33,7 @@ from XenKvmLib.enumclass import EnumInstances
>>
>> graphics_dev_rev = 725
>> input_dev_rev = 745
>> +controller_dev_rev = 1310
>>
>> def get_class(classname):
>> return eval(classname)
>> @@ -99,6 +100,8 @@ def dev_cn_to_rasd_cn(dev_cn, virt):
>> return get_typed_class(virt, "GraphicsResourceAllocationSettingData")
>> elif dev_cn.find('PointingDevice') >= 0:
>> return get_typed_class(virt, "InputResourceAllocationSettingData")
>> + elif dev_cn.find('Controller') >= 0:
>> + return get_typed_class(virt, "ControllerResourceAllocationSettingData")
>> else:
>> return None
>>
>> @@ -112,6 +115,9 @@ def enum_dev(virt, ip):
>> if curr_cim_rev >= input_dev_rev:
>> dev_list.append('PointingDevice')
>>
>> + if curr_cim_rev >= controller_dev_rev and virt == 'KVM':
>> + dev_list.append('Controller')
>> +
>> dev_insts = {}
>>
>> try:
>> diff --git a/suites/libvirt-cim/lib/XenKvmLib/logicaldevices.py b/suites/libvirt-cim/lib/XenKvmLib/logicaldevices.py
>> index 744e864..5db36ca 100644
>> --- a/suites/libvirt-cim/lib/XenKvmLib/logicaldevices.py
>> +++ b/suites/libvirt-cim/lib/XenKvmLib/logicaldevices.py
>> @@ -57,7 +57,7 @@ def spec_err(fieldvalue, field_list, fieldname):
>>
>> def verify_device_values(assoc_info, list_values, virt='Xen'):
>> dev_cnames = ['LogicalDisk', 'Memory', 'NetworkPort', 'Processor', \
>> - 'DisplayController', 'PointingDevice']
>> + 'DisplayController', 'PointingDevice', 'Controller']
>> for i in range(len(dev_cnames)):
>> dev_cnames[i] = get_typed_class(virt, dev_cnames[i])
>>
>> diff --git a/suites/libvirt-cim/lib/XenKvmLib/rasd.py b/suites/libvirt-cim/lib/XenKvmLib/rasd.py
>> index 4d4240a..21dd7e4 100644
>> --- a/suites/libvirt-cim/lib/XenKvmLib/rasd.py
>> +++ b/suites/libvirt-cim/lib/XenKvmLib/rasd.py
>> @@ -40,6 +40,7 @@ dasd_cn = 'DiskResourceAllocationSettingData'
>> masd_cn = 'MemResourceAllocationSettingData'
>> dcrasd_cn = 'GraphicsResourceAllocationSettingData'
>> irasd_cn = 'InputResourceAllocationSettingData'
>> +ctlrasd_cn = 'ControllerResourceAllocationSettingData'
>> dpasd_cn = 'DiskPoolResourceAllocationSettingData'
>> npasd_cn = 'NetPoolResourceAllocationSettingData'
>> svrasd_cn = 'StorageVolumeResourceAllocationSettingData'
>> @@ -51,6 +52,7 @@ netcn = 'NetworkPort'
>> diskcn = 'LogicalDisk'
>> dccn = 'DisplayController'
>> pdcn = 'PointingDevice'
>> +ctlcn = 'Controller'
>>
>> libvirt_rasd_storagepool_changes = 934
>>
>> @@ -65,12 +67,14 @@ def rasd_init_list(vsxml, virt, t_disk, t_dom, t_mac, t_mem, server):
>> disk_cn = get_typed_class(virt, diskcn)
>> dc_cn = get_typed_class(virt, dccn)
>> pd_cn = get_typed_class(virt, pdcn)
>> + ctl_cn = get_typed_class(virt, ctlcn)
>>
>> in_list = { 'proc' : proc_cn,
>> 'mem' : mem_cn,
>> 'net' : net_cn,
>> 'disk' : disk_cn,
>> 'display' : dc_cn,
>> + 'controller' : ctl_cn,
>> 'point' : pd_cn
>> }
>> try:
>> @@ -113,6 +117,18 @@ def rasd_init_list(vsxml, virt, t_disk, t_dom, t_mac, t_mem, server):
>> dc_cn : {
>> "InstanceID" : "%s/%s" %(t_dom, "vnc")
>> },
>> + # There can be more than one controller defined for
>> + # any system - usually there are 3, one each for usb,
>> + # pci, and ide. The InstanceID is formatted using
>> + # the string "controller" and the type/string of the
>> + # controller, and the index id found. That index can
>> + # vary. Thus our verify_controllerrasd_values will
>> + # just ensure the "base" is valid - that is the
>> + # guest name and "controller" string.
>> + ctl_cn : {
>> + "InstanceID" : "%s/%s:" \
>> + %(t_dom, "controller")
>> + },
>> pd_cn : {
>> "InstanceID" : point_device
>> }
>> @@ -143,6 +159,15 @@ def InstId_err(assoc_info, list):
>> logger.error("Returned %s instead of %s",
>> assoc_info['InstanceID'], list['InstanceID'])
>>
>> +def verify_controllerrasd_values(assoc_info, controllerrasd_list):
>> + status = PASS
>> + print 'assoc', assoc_info['InstanceID']
>> + print 'ctrlr', controllerrasd_list['InstanceID']
>> + if controllerrasd_list['InstanceID'] not in assoc_info['InstanceID']:
>> + InstId_err(assoc_info, controllerrasd_list)
>> + status = FAIL
>> + return status
>> +
>> def verify_displayrasd_values(assoc_info, displayrasd_list):
>> status = PASS
>> if assoc_info['InstanceID'] != displayrasd_list['InstanceID']:
>> diff --git a/suites/libvirt-cim/lib/XenKvmLib/vsms.py b/suites/libvirt-cim/lib/XenKvmLib/vsms.py
>> index d7f33f9..3da309c 100755
>> --- a/suites/libvirt-cim/lib/XenKvmLib/vsms.py
>> +++ b/suites/libvirt-cim/lib/XenKvmLib/vsms.py
>> @@ -36,6 +36,7 @@ RASD_TYPE_DISK = 17
>> RASD_TYPE_GRAPHICS = 24
>> RASD_TYPE_INPUT = 13
>> RASD_TYPE_STOREVOL = 32768
>> +RASD_TYPE_CONTROLLER = 32771
>>
>> VIRT_DISK_TYPE_DISK = 0
>> VIRT_DISK_TYPE_CDROM = 1
>> @@ -324,6 +325,29 @@ class LXC_InputResourceAllocationSettingData(CIM_InputResourceAllocationSettingD
>> def get_iasd_class(virt):
>> pass
>>
>> +class CIM_ControllerResourceAllocationSettingData(CIMClassMOF):
>> + def __init__(self, name, ctl_sub_type=None, ctl_index=-1, ctl_model=None):
>> + self.InstanceID = '%s/controller:' % name
>> + self.ResourceType = RASD_TYPE_CONTROLLER
>> +
>> + if ctl_sub_type is not None:
>> + self.ResourceSubType = ctl_sub_type
>> + self.InstanceID += '%s' % ctl_sub_type
>> +
>> + if ctl_index >= 0:
>> + self.Index = ctl_index
>> + self.InstanceID += ':%d' % ctl_index
>> +
>> + if ctl_model is not None:
>> + self.Model = ctl_model
>> +
>> +class KVM_ControllerResourceAllocationSettingData(CIM_ControllerResourceAllocationSettingData):
>> + pass
>> +
>> + at eval_cls('ControllerResourceAllocationSettingData')
>> +def get_ctlasd_class(virt):
>> + pass
>> +
>> def default_vssd_rasd_str(dom_name='test_domain',
>> disk_dev='xvda',
>> disk_source=const.Xen_disk_path,
>> diff --git a/suites/libvirt-cim/lib/XenKvmLib/vxml.py b/suites/libvirt-cim/lib/XenKvmLib/vxml.py
>> index 74c4f23..ad80aae 100644
>> --- a/suites/libvirt-cim/lib/XenKvmLib/vxml.py
>> +++ b/suites/libvirt-cim/lib/XenKvmLib/vxml.py
>> @@ -53,6 +53,8 @@ from XenKvmLib.const import get_provider_version
>>
>> vsms_graphics_sup = 763
>> vsms_inputdev_sup = 771
>> +vsms_controller_sup = 1310
>> +
>>
>> class XMLClass:
>> xml_string = ""
>> @@ -598,7 +600,8 @@ class VirtCIM:
>> def __init__(self, virt, dom_name, uuid, pae, acpi, apic, disk_dev,
>> disk_source, net_type, net_name, net_mac, vcpus, mem,
>> mem_allocunits, emu_type, grstype, ip,
>> - is_ipv6_only, port_num, kmap, irstype, btype, vnc_passwd):
>> + is_ipv6_only, port_num, kmap, irstype, btype, vnc_passwd,
>> + ctltype, ctlindex, ctlmodel):
>> self.virt = virt
>> self.domain_name = dom_name
>> self.err_rc = None
>> @@ -629,6 +632,14 @@ class VirtCIM:
>> self.iasd = vsms.get_iasd_class(virt)(name=dom_name,
>> res_sub_type=irstype,
>> bus_type=btype)
>> + if virt == 'KVM':
>> + self.ctlasd = vsms.get_ctlasd_class(virt)(name=dom_name,
>> + ctl_sub_type=ctltype,
>> + ctl_index=ctlindex,
>> + ctl_model=ctlmodel)
>> + else:
>> + self.ctlasd = None
>> +
>> self.res_settings = []
>>
>> def cim_define(self, ip, ref_conf=None):
>> @@ -658,6 +669,9 @@ class VirtCIM:
>> if self.iasd is not None:
>> res_settings.append(str(self.iasd))
>>
>> + if curr_cim_rev > vsms_controller_sup and self.ctlasd is not None:
>> + res_settings.append(str(self.ctlasd))
>> +
> Here I got a similar error, curr_cim_rev=1309 but
> vsms_controller_sup=1310. Hence
> I got the following result,
> # CIM_NS=root/virt CIM_USER=root CIM_PASS=****** ./runtests libvirt-cim
> -i localhost -c -d -v KVM -g RASD -t 03_rasd_errs.py
> Starting test suite: libvirt-cim
> Cleaned log files.
>
> Testing KVM hypervisor
> --------------------------------------------------------------------
> RASD - 03_rasd_errs.py: FAIL
> ERROR - Expected 6 RASDs, got 7
> --------------------------------------------------------------------
>
> Do I need to update value of @curren_cim_rev and how to change it?
>
> Thanks,
> Xu Wang
That's probably the cause - my response in the controller patches stream
should help - but essentially it's running autoconfiscate.sh and then
rebuilding/reinstalling the repo
John
>> if ref_conf is None:
>> ref_conf = ' '
>>
>> @@ -849,7 +863,8 @@ class XenXML(VirtXML, VirtCIM):
>> emu_type=None, grstype="vnc", address=None,
>> is_ipv6_only=None,
>> port_num='-1', keymap="en-us", irstype="mouse",
>> - btype="xen", vnc_passwd=None):
>> + btype="xen", vnc_passwd=None,
>> + ctltype=None, ctlindex=-1, ctlmodel=None):
>> if not (os.path.exists(const.Xen_kernel_path) \
>> and os.path.exists(const.Xen_init_path)):
>> logger.error('ERROR: Either the kernel image '
>> @@ -863,7 +878,7 @@ class XenXML(VirtXML, VirtCIM):
>> disk_file_path, ntype, net_name, mac, vcpus, mem,
>> mem_allocunits, emu_type, grstype, address,
>> is_ipv6_only, port_num, keymap, irstype, btype,
>> - vnc_passwd)
>> + vnc_passwd, ctltype, ctlindex, ctlmodel)
>>
>> def _os(self, os_kernel, os_initrd):
>> os = self.get_node('/domain/os')
>> @@ -920,7 +935,10 @@ class KVMXML(VirtXML, VirtCIM):
>> emu_type=None, grstype="vnc", address=None,
>> is_ipv6_only=None,
>> port_num='-1', keymap="en-us", irstype="mouse",
>> - btype="ps2", vnc_passwd=None):
>> + btype="ps2", vnc_passwd=None,
>> + ctltype="pci", ctlindex=0, ctlmodel="pci-root"):
>> + # Optionally the following works too:
>> + #ctltype="usb", ctlindex=0, ctlmodel=None):
>> if not os.path.exists(disk_file_path):
>> logger.error('Error: Disk image %s does not exist', disk_file_path)
>> sys.exit(1)
>> @@ -929,7 +947,7 @@ class KVMXML(VirtXML, VirtCIM):
>> disk_file_path, ntype, net_name, mac, vcpus, mem,
>> mem_allocunits, emu_type, grstype, address,
>> is_ipv6_only, port_num, keymap, irstype, btype,
>> - vnc_passwd)
>> + vnc_passwd, ctltype, ctlindex, ctlmodel)
>> self._os()
>> self._devices(const.KVM_default_emulator, ntype,
>> disk_file_path, disk, mac, net_name)
>> @@ -983,7 +1001,8 @@ class XenFVXML(VirtXML, VirtCIM):
>> emu_type=None, grstype="vnc",
>> address=None, is_ipv6_only=None, port_num='-1',
>> keymap="en-us",
>> - irstype="mouse", btype="ps2", vnc_passwd=None):
>> + irstype="mouse", btype="ps2", vnc_passwd=None,
>> + ctltype=None, ctlindex=-1, ctlmodel=None):
>> if not os.path.exists(disk_file_path):
>> logger.error('Error: Disk image %s does not exist', disk_file_path)
>> sys.exit(1)
>> @@ -992,7 +1011,8 @@ class XenFVXML(VirtXML, VirtCIM):
>> disk_file_path, ntype, net_name, mac, vcpus, mem,
>> mem_allocunits, emu_type, grstype, address,
>> is_ipv6_only, port_num,
>> - keymap, irstype, btype, vnc_passwd)
>> + keymap, irstype, btype, vnc_passwd,
>> + ctltype, ctlindex, ctlmodel)
>> self._os(const.XenFV_default_loader)
>> self._devices(const.XenFV_default_emulator,
>> ntype, mac, net_name, disk_file_path, disk)
>> @@ -1036,7 +1056,8 @@ class LXCXML(VirtXML, VirtCIM):
>> tty=const.LXC_default_tty, grstype="vnc",
>> address=None, is_ipv6_only=None, port_num='-1',
>> keymap="en-us",
>> - irstype="mouse", btype="usb", vnc_passwd=None):
>> + irstype="mouse", btype="usb", vnc_passwd=None,
>> + ctltype=None, ctlindex=-1, ctlmodel=None):
>> VirtXML.__init__(self, 'lxc', test_dom, set_uuid(), mem, vcpus)
>> # pae, acpi and apic parameters doesn't make sense here, so we
>> # statically set them to False (a.k.a. ignore them)
>> @@ -1045,7 +1066,7 @@ class LXCXML(VirtXML, VirtCIM):
>> ntype, net_name, mac, vcpus, mem,
>> const.default_mallocunits, None, grstype,
>> address, is_ipv6_only, port_num, keymap, irstype,
>> - btype, vnc_passwd)
>> + btype, vnc_passwd, ctltype, ctlindex, ctlmodel)
>> self._os(const.LXC_init_path)
>> self._devices(const.LXC_default_emulator, mac, ntype, net_name, const.LXC_default_tty)
>> self.create_lxc_file(CIM_IP, const.LXC_init_path)
>
> _______________________________________________
> Libvirt-cim mailing list
> Libvirt-cim at redhat.com
> https://www.redhat.com/mailman/listinfo/libvirt-cim
>
More information about the Libvirt-cim
mailing list