On Mon, Jul 20, 2009 at 12:51:11PM +0100, Mark McLoughlin wrote:
We need to store things like device names and PCI slot numbers in
the
qemu domain state file so that we don't lose that information on
libvirtd restart. Add a flag to indicate that this information should
be parsed or formatted.
* include/libvirt/libvirt.h: add VIR_DOMAIN_XML_INTERNAL_STATUS
* src/domain_conf.c: pass the flag from virDomainObjParseXML() and
virDomainSaveStatus
* src/libvirt.c: reject the flag in virDomainGetXMLDesc()
---
include/libvirt/libvirt.h | 3 ++-
include/libvirt/libvirt.h.in | 3 ++-
src/domain_conf.c | 8 ++++----
src/libvirt.c | 6 ++++++
4 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/include/libvirt/libvirt.h b/include/libvirt/libvirt.h
index 90007a1..07495fc 100644
--- a/include/libvirt/libvirt.h
+++ b/include/libvirt/libvirt.h
@@ -585,7 +585,8 @@ int virDomainGetSecurityLabel (virDomainPtr
domain,
typedef enum {
VIR_DOMAIN_XML_SECURE = 1, /* dump security sensitive information too */
- VIR_DOMAIN_XML_INACTIVE = 2/* dump inactive domain information */
+ VIR_DOMAIN_XML_INACTIVE = 2, /* dump inactive domain information */
+ VIR_DOMAIN_XML_INTERNAL_STATUS = 4, /* dump internal domain status information */
} virDomainXMLFlags;
char * virDomainGetXMLDesc (virDomainPtr domain,
diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
index ba2b6f0..6794c61 100644
--- a/include/libvirt/libvirt.h.in
+++ b/include/libvirt/libvirt.h.in
@@ -585,7 +585,8 @@ int virDomainGetSecurityLabel (virDomainPtr
domain,
typedef enum {
VIR_DOMAIN_XML_SECURE = 1, /* dump security sensitive information too */
- VIR_DOMAIN_XML_INACTIVE = 2/* dump inactive domain information */
+ VIR_DOMAIN_XML_INACTIVE = 2, /* dump inactive domain information */
+ VIR_DOMAIN_XML_INTERNAL_STATUS = 4, /* dump internal domain status information */
} virDomainXMLFlags;
char * virDomainGetXMLDesc (virDomainPtr domain,
diff --git a/src/domain_conf.c b/src/domain_conf.c
index f3e4c6c..10e6ac6 100644
--- a/src/domain_conf.c
+++ b/src/domain_conf.c
@@ -2896,7 +2896,8 @@ static virDomainObjPtr virDomainObjParseXML(virConnectPtr conn,
oldnode = ctxt->node;
ctxt->node = config;
- obj->def = virDomainDefParseXML(conn, caps, ctxt, 0);
+ obj->def = virDomainDefParseXML(conn, caps, ctxt,
+ VIR_DOMAIN_XML_INTERNAL_STATUS);
ctxt->node = oldnode;
if (!obj->def)
goto error;
@@ -4277,12 +4278,11 @@ int virDomainSaveStatus(virConnectPtr conn,
const char *statusDir,
virDomainObjPtr obj)
{
+ int flags = VIR_DOMAIN_XML_SECURE|VIR_DOMAIN_XML_INTERNAL_STATUS;
int ret = -1;
char *xml;
- if (!(xml = virDomainObjFormat(conn,
- obj,
- VIR_DOMAIN_XML_SECURE)))
+ if (!(xml = virDomainObjFormat(conn, obj, flags)))
goto cleanup;
if (virDomainSaveXML(conn, statusDir, obj->def, xml))
diff --git a/src/libvirt.c b/src/libvirt.c
index f4a7fa7..c8926b3 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -2730,6 +2730,12 @@ virDomainGetXMLDesc(virDomainPtr domain, int flags)
goto error;
}
+ if (flags & VIR_DOMAIN_XML_INTERNAL_STATUS) {
+ virLibConnError(conn, VIR_ERR_OPERATION_DENIED,
+ _("virDomainGetXMLDesc with internal status flag"));
+ goto error;
+ }
+
if (conn->driver->domainDumpXML) {
char *ret;
ret = conn->driver->domainDumpXML (domain, flags);
Hum, that's very confusing. Why expose that flag at the API level
but forbid it's use from the API ?
Seems to me adding an extra parameter to the internal function
virDomainDefParseXML() is a far cleaner way to do things by looking at
this patch.
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit
http://xmlsoft.org/
daniel(a)veillard.com | Rpmfind RPM search engine
http://rpmfind.net/
http://veillard.com/ | virtualization library
http://libvirt.org/