Signed-off-by: Yu Mingfei <[email protected]> --- virttest/libvirt_xml/vm_xml.py | 60 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-)
diff --git a/virttest/libvirt_xml/vm_xml.py b/virttest/libvirt_xml/vm_xml.py index 027f94f..c8a5582 100644 --- a/virttest/libvirt_xml/vm_xml.py +++ b/virttest/libvirt_xml/vm_xml.py @@ -5,7 +5,7 @@ http://libvirt.org/formatdomain.html import logging from autotest.client.shared import error -from virttest import virsh +from virttest import virsh, xml_utils from virttest.libvirt_xml import base, accessors, xcepts class VMXMLBase(base.LibvirtXMLBase): @@ -197,5 +197,63 @@ class VMXML(VMXMLBase): return None + def get_primary_serial(self): + """ + Get a dict with primary serial features. + """ + xmltreefile = self.dict_get('xml') + primary_serial = xmltreefile.find('devices').find('serial') + serial_features = {} + serial_type = primary_serial.get('type') + serial_port = primary_serial.find('target').get('port') + # Support node here for more features + serial_features['serial'] = primary_serial + # Necessary features + serial_features['type'] = serial_type + serial_features['port'] = serial_port + return serial_features + + + @staticmethod + def set_primary_serial(vm_name, type, port, path=None): + """ + Set primary serial's features of vm_name. + + @param vm_name: Name of defined vm to set primary serial. + @param type: the type of serial:pty,file... + @param port: the port of serial + @param path: the path of serial, it is not necessary for pty + # TODO: More features + """ + vmxml = VMXML.new_from_dumpxml(vm_name) + xmltreefile = vmxml.dict_get('xml') + try: + serial = vmxml.get_primary_serial()['serial'] + except AttributeError: + logging.debug("Can not find any serial, now create one.") + # Create serial tree, default is pty + serial = xml_utils.ElementTree.SubElement( + xmltreefile.find('devices'), + 'serial', {'type': 'pty'}) + # Create elements of serial target, default port is 0 + xml_utils.ElementTree.SubElement(serial, 'target', {'port': '0'}) + + serial.set('type', type) + serial.find('target').set('port', port) + # path may not be exist. + if path is not None: + serial.find('source').set('path', path) + else: + try: + source = serial.find('source') + serial.remove(source) + except AssertionError: + pass # Element not found, already removed. + xmltreefile.write() + vmxml.set_xml(xmltreefile.name) + vmxml.undefine() + vmxml.define() + + #TODO: Add function to create from xml_utils.TemplateXML() # def new_from_template(...) -- 1.7.11.7 _______________________________________________ Virt-test-devel mailing list [email protected] https://www.redhat.com/mailman/listinfo/virt-test-devel
