[libvirt] [PATCH v2 0/8] Add ability to store notes with domains
Daniel P. Berrange
berrange at redhat.com
Mon Jan 23 16:23:00 UTC 2012
On Mon, Jan 23, 2012 at 09:17:51AM -0700, Eric Blake wrote:
> On 01/23/2012 08:50 AM, Peter Krempa wrote:
> > On 01/18/2012 03:23 PM, Peter Krempa wrote:
> >> I've reworked this patches to use a separate element for storing the
> >> short note. This v2 also contains som new patches, especially added
> >> support for the LXC driver, and optionaly API to get the description.
> >> (See patches marked as optional). These are not required, just add
> >> a helper api to get the description and it's usage in virsh.
> >
> > I noticed a discussion [1] about adding metadata to domains definition
> > and methods of accessing it.
> >
> > As these patches can also be considered to deal with metadata and we
> > probably shouldn't add a ton of API's for accessing them we could as
> > well as add an API to support various formats of metadata.
> >
> > What are your opinions on this? Should we add such a general function
> > (virDomain[Get|Set]Metadata)? Is it a good idea to use the virTypedParam
> > to do this? Is the string support on virTypedParam complete?
>
> Changing <title> or <description> of a transient domain is a
> nice-to-have, but not the end of the world. Changing <metadata> of a
> transient domain is a must-have, so we need at least one new API.
> Setting is important, while getting is only a shortcut (we can make the
> user call virDomainGetXMLDesc, and do an XPath query), but symmetry is
> nice. Meanwhile, libvirt shouldn't care about the contents of
> <metadata>, other than that it is a well-formed XML string. We do _not_
> need virTypedParams, but can stick with just an enum for which piece of
> metadata to be modifying. We can get by with just one API for all three
> elements, as well as leaving the door open for any future metadata. So
For the <metadata> element we want more tha njust a well-formed XML
string. The intention is that every top level element inside
<metadata> *must* declare its own private XML namespace. The
default namespace is to be reserved for any libvirt official metadata
elements we might introduce in the future.
> I'm starting to think:
>
> new error type VIR_ERR_NO_DOMAIN_METADATA = 79, /* Metadata element not
> present */
>
> typedef enum {
> VIR_DOMAIN_METADATA_DESCRIPTION = 0, /* Operate on <description> */
> VIR_DOMAIN_METADATA_TITLE = 1, /* Operate on <title> */
> VIR_DOMAIN_METADATA_ELEMENT = 2, /* Operate on <metadata> */
>
> #ifdef VIR_ENUM_SENTINELS
> VIR_DOMAIN_METADATA_LAST
> #endif
> } virDomainMetadataType;
>
>
> /**
> * virDomainSetMetadata:
> * @domain: a domain object
> * @type: type of description, from virDomainMetadataType
> * @description: new description text
> * @flags: bitwise-OR of virDomainModificationImpact
> *
> * Sets the appropriate domain element given by @type to the
> * value of @description. A @type of VIR_DOMAIN_METADATA_DESCRIPTION
> * is free-form text; VIR_DOMAIN_METADATA_TITLE is free-form but
> * length-limited to 40 bytes, and VIR_DOMAIN_METADATA_ELEMENT must
> * be well-formed XML but is otherwise uninterpreted by libvirt.
> * Passing NULL for @description says to remove that element from the
> * domain XML (passing the empty string leaves the element present).
> *
> * The resulting metadata will be present in virDomainGetXMLDesc(),
> * as well as quick access through virDomainGetMetadata().
> *
> * @flags controls whether the live domain, persistent configuration,
> * or both will be modified.
> *
> * Returns 0 on success, -1 in case of failure.
> */
> int
> virDomainSetMetadata(virDomainPtr domain,
> int type,
> const char *description,
> unsigned int flags);
>
> /**
> * virDomainGetMetadata:
> * @domain: a domain object
> * @type: type of description, from virDomainMetadataType
> * @flags: bitwise-OR of virDomainModificationImpact
> *
> * Retrieves the appropriate domain element given by @type.
> * If an element of the domain XML is not present, the resulting
> * error will be VIR_ERR_NO_DOMAIN_METADATA. This method forms
> * a shortcut for seeing information from virDomainSetMetadata()
> * without having to go through virDomainGetXMLDesc().
> *
> * @flags controls whether the live domain or persistent
> * configuration will be queried.
> *
> * Returns the metadata string on success (caller must free),
> * or NULL in case of failure.
> */
> char *
> virDomainGetMetadata(virDomainPtr domain,
> int type,
> unsigned int flags);
While fine for title/description, I don't think this really works
for <metadata>. When setting the metadata we'd want to specify
an XML namespace key and URI, and when getting the metadata we'd
really want to specify a namespace URI
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