Skip to content

Commit

Permalink
nodedev_xml: extend MdevXML with attr elements
Browse files Browse the repository at this point in the history
Add support for attribute elements of the mediated device
capability xml, e.g.:

```
 <attr name='assign_adapter' value='3'/>
 <attr name='assign_domain' value='43'/>
```

Signed-off-by: Sebastian Mitterle <[email protected]>
  • Loading branch information
smitterl committed Jul 19, 2023
1 parent e20d6f4 commit 07c94cf
Showing 1 changed file with 51 additions and 1 deletion.
52 changes: 51 additions & 1 deletion virttest/libvirt_xml/nodedev_xml.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,16 +152,66 @@ class MdevXML(CAPXML):
"""
class for capability whose type is mdev
"""
__slots__ = ('type_id', 'uuid')
__slots__ = ('type_id', 'uuid', 'attrs')

def __init__(self, virsh_instance=base.virsh):
accessors.XMLAttribute('type_id', self, parent_xpath='/',
tag_name='type', attribute='id')
accessors.XMLElementText('uuid', self, parent_xpath='/',
tag_name='uuid')
accessors.XMLElementList(property_name='attrs',
libvirtxml=self,
parent_xpath='/',
marshal_from=self.marshal_from_attrs,
marshal_to=self.marshal_to_attrs,
has_subclass=True)
super(MdevXML, self).__init__(virsh_instance=virsh_instance)
self.xml = (' <capability type=\'mdev\'></capability>')

@staticmethod
def marshal_from_attrs(item, index, libvirtxml):
"""
Convert an AttrXML object to attr tag and xml element.
"""
if isinstance(item, AttrXML):
return 'attr', item
elif isinstance(item, dict):
attr = AttrXML()
attr.setup_attrs(**item)
else:
raise xcepts.LibvirtXMLError("Expected a list of capability attr "
" not a %s" % item)

@staticmethod
def marshal_to_attrs(tag, new_treefile, index, libvirtxml):
"""
Convert an attr tag xml element to an object of AttrXML.
"""
if tag != 'attr':
return None # Don't convert this item
newone = AttrXML(virsh_instance=libvirtxml.virsh)
newone.xmltreefile = new_treefile
return newone


class AttrXML(base.LibvirtXMLBase):
"""
Attribute elements of MdevXML
"""
__slots__ = ('attr', 'name', 'value')

def __init__(self, virsh_instance=base.virsh):
accessors.XMLElementDict(property_name='attr',
libvirtxml=self,
parent_xpath='/',
tag_name='attr')
accessors.XMLAttribute('name', self, parent_xpath='/',
tag_name='attr', attribute='name')
accessors.XMLAttribute('value', self, parent_xpath='/',
tag_name='attr', attribute='value')
super(AttrXML, self).__init__(virsh_instance=virsh_instance)
self.xml = '<attr/>'


class StorageXML(CAPXML):

Expand Down

0 comments on commit 07c94cf

Please sign in to comment.