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); -- 1.6.2.5 -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list