[libvirt] Allow custom metadata in domain configuration XML
Daniel P. Berrange
berrange at redhat.com
Mon Jan 23 11:33:04 UTC 2012
On Fri, Jan 20, 2012 at 02:55:27PM -0700, Eric Blake wrote:
> On 01/20/2012 01:15 PM, Zeeshan Ali (Khattak) wrote:
> > From 6895c107970ea6daf3d0e7f8be9a1a4e97b2278b Mon Sep 17 00:00:00 2001
> > From: "Zeeshan Ali (Khattak)" <zeeshanak at gnome.org>
> > Date: Fri, 20 Jan 2012 21:50:35 +0200
> > Subject: [PATCH] Allow custom metadata in domain configuration XML
> >
> > Applications can now insert custom nodes and hierarchies into domain
> > cofiguration XML. Although currently not enforced, application are
> > required to use their own namespaces on every custom node they insert.
>
> Looks like an interesting idea, as it gives applications more structure
> than what they would get by overloading the free-form <description>.
>
> > ---
> > docs/formatdomain.html.in | 18 ++++++++++++++++++
> > src/conf/domain_conf.c | 21 +++++++++++++++++++++
> > src/conf/domain_conf.h | 3 +++
>
> Hmm, you didn't update docs/schemas/domaincommon.rng. But how do you
> write a schema that accepts a <metadata> element with arbitrary
> contents? </me searches the web...>
>
> http://www.oasis-open.org/committees/relax-ng/tutorial.html#IDAFLZR
>
> <define name="anyElement">
> <element>
> <anyName/>
> <zeroOrMore>
> <choice>
> <attribute>
> <anyName/>
> </attribute>
> <text/>
> <ref name="anyElement"/>
> </choice>
> </zeroOrMore>
> </element>
> </define>
>
> <define name='metadata'>
> <element name='metadata'>
> <choice>
> <text/>
> <zeroOrMore>
> <ref name='anyElement'/>
> </zeroOrMore>
> </choice>
> </element>
> </define>
Yes, that looks fine.
>
> > + <dl>
> > + <dt><code>metadata</code></dt>
> > + <dd><code>metadata</code> node could be used by applications to
> > + store custom metadata in the form of XML nodes/trees. Applications
> > + must use custom namespaces on any XML nodes they insert here.
> > + <span class="since">Since 0.9.9</span></dd>
>
> 0.9.10.
>
> > @@ -11833,6 +11841,19 @@ virDomainDefFormatInternal(virDomainDefPtr def,
> > goto cleanup;
> > }
> >
> > + /* Custom metadata comes at the end */
> > + if (def->metadata) {
> > + xmlBufferPtr xmlbuf;
> > +
> > + xmlbuf = xmlBufferCreate();
> > + if (xmlNodeDump(xmlbuf, def->metadata->doc, def->metadata, 2, 0) < 0) {
>
> Is this the right level of indentation if buf itself already has
> indentation (such as when <domain> is nested inside <domainsnapshot>?
> You may need to use virBufferGetIndent() and use that to alter the
> fourth argument to xmlNodeDump accordingly.
>
> Unless anyone else objects to this XML addition, I think it is probably
> okay; but I have a couple caveats:
FYI this XML design is something I suggested to the Boxes team, instead
of hijacking the user's <description> field, so obviously it gets
my vote.
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list