Skip to content

Commit 9db169e

Browse files
committed
support_model_filter_vmdevices
Signed-off-by: Dan Zheng <dzheng@redhat.com>
1 parent a3cfa5a commit 9db169e

3 files changed

Lines changed: 16 additions & 4 deletions

File tree

virttest/libvirt_xml/vm_xml.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ def extend(self, iterable):
4848
self.append(item)
4949
return self
5050

51+
def remove(self, value):
52+
self.__type_check__(value)
53+
super(VMXMLDevices, self).remove(value)
54+
return self
55+
5156
def by_device_tag(self, tag):
5257
result = VMXMLDevices()
5358
for device in self:

virttest/utils_libvirt/libvirt_vmxml.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ def create_vm_device_by_type(dev_type, dev_dict):
162162

163163

164164
def modify_vm_device(
165-
vmxml, dev_type, dev_dict=None, index=0, virsh_instance=virsh, sync_vm=True
165+
vmxml, dev_type, dev_dict=None, index=0, virsh_instance=virsh, sync_vm=True, dev_model=None
166166
):
167167
"""
168168
Get specified device , update it with given dev_dict if the device exists,
@@ -174,11 +174,12 @@ def modify_vm_device(
174174
:param index: device index
175175
:param virsh_instance: virsh instance
176176
:param sync_vm: boolean, True to execute sync, otherwise not
177+
:param dev_model: str, the model for the device, like controller model 'pcie-root'
177178
:return: device object
178179
"""
179180
dev_obj = None
180181
try:
181-
dev_obj, xml_devices = libvirt.get_vm_device(vmxml, dev_type, index=index)
182+
dev_obj, xml_devices = libvirt.get_vm_device(vmxml, dev_type, index=index, model=dev_model)
182183
dev_obj.setup_attrs(**dev_dict)
183184

184185
vmxml.devices = xml_devices

virttest/utils_test/libvirt.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2507,7 +2507,7 @@ def create_tpm_dev(params):
25072507
return tpm_dev
25082508

25092509

2510-
def get_vm_device(vmxml, dev_tag, index=0):
2510+
def get_vm_device(vmxml, dev_tag, index=0, model=None):
25112511
"""
25122512
Get current vm device according to device tag
25132513
@@ -2517,7 +2517,13 @@ def get_vm_device(vmxml, dev_tag, index=0):
25172517
:return: device object
25182518
"""
25192519
xml_devices = vmxml.devices
2520-
dev_index = xml_devices.index(xml_devices.by_device_tag(dev_tag)[index])
2520+
devices_by_tag = xml_devices.by_device_tag(dev_tag)
2521+
if model:
2522+
for the_device in devices_by_tag:
2523+
if the_device.get("model") and the_device.model != model:
2524+
devices_by_tag.remove(the_device)
2525+
2526+
dev_index = xml_devices.index(devices_by_tag[index])
25212527
dev_obj = xml_devices[dev_index]
25222528
return (dev_obj, xml_devices)
25232529

0 commit comments

Comments
 (0)