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