summaryrefslogtreecommitdiffstats
path: root/nova/virt
diff options
context:
space:
mode:
authorDaniel P. Berrange <berrange@redhat.com>2012-06-19 14:22:44 +0100
committerDaniel P. Berrange <berrange@redhat.com>2012-06-19 15:01:28 +0100
commite88780a5ddbba230b500052391c1ba64b67e6a22 (patch)
treee42e601cfa1156d6582479d713d228651fd33e3a /nova/virt
parent225f6f21b1f4158e635f06b4d040b41fa21be09d (diff)
Adjust the libvirt config classes' API contract for parsing
Don't not automatically invoke the 'parse_dom' method from the LibvirtConfigObject constructor, because this is too early in construction - no child class constructors have initialized yet. Instead require the 'parse_dom' method to be invoked after the bare object has been constructed. Also make the default impl of 'parse_dom' take an etree.Element instance and validate its root element name. Add a convenient 'parse_str' method for turning a XML string into an etree.Element instance & parsing it. Change-Id: I7eda2b59869f3b4ef9dce1602cbb05f7662f4528 Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Diffstat (limited to 'nova/virt')
-rw-r--r--nova/virt/libvirt/config.py14
1 files changed, 9 insertions, 5 deletions
diff --git a/nova/virt/libvirt/config.py b/nova/virt/libvirt/config.py
index 3ebdf21f0..c67f11550 100644
--- a/nova/virt/libvirt/config.py
+++ b/nova/virt/libvirt/config.py
@@ -21,6 +21,7 @@ Classes to represent the configuration of various libvirt objects
and support conversion to/from XML
"""
+from nova import exception
from nova import log as logging
from lxml import etree
@@ -38,9 +39,6 @@ class LibvirtConfigObject(object):
self.ns_prefix = kwargs.get('ns_prefix')
self.ns_uri = kwargs.get('ns_uri')
- if "xml_str" in kwargs:
- self.parse_dom(kwargs.get("xml_str"))
-
def _text_node(self, name, value):
child = etree.Element(name)
child.text = str(value)
@@ -53,8 +51,14 @@ class LibvirtConfigObject(object):
return etree.Element("{" + self.ns_uri + "}" + self.root_name,
nsmap={self.ns_prefix: self.ns_uri})
- def parse_dom(xmldoc):
- raise NotImplementedError()
+ def parse_str(self, xmlstr):
+ self.parse_dom(etree.fromstring(xmlstr))
+
+ def parse_dom(self, xmldoc):
+ if self.root_name != xmldoc.tag:
+ raise exception.InvalidInput(
+ "Root element name should be '%s' not '%s'"
+ % (self.root_name, xmldoc.tag))
def to_xml(self, pretty_print=True):
root = self.format_dom()