On 04/25/2014 08:11 AM, Sheldon wrote:
> +def set_vm_metadata_element(dom, meta_xml,
mode="all"):
> + element = etree.fromstring(meta_xml)
> + # From libvirt doc, Passing None for @metadata says to remove that
> element
> + # from the domain XML (passing the empty string leaves the element
> present)
> + # Do not support remove the old metadata
> + dom.setMetadata(libvirt.VIR_DOMAIN_METADATA_ELEMENT, meta_xml,
> + "kimchi", KIMCHI_META_URL + element.tag,
Why are you append element.tag to namespace? Use only
https://github.com/kimchi-project/kimchi/ as namespace
If we don not like it. I
change it next version.
The reason as follow
as libvirt
docs(http://libvirt.org/formatdomain.html#elementsMetadata)
says:
<domain type='xen' id='3'>
<name>fv0</name>
<uuid>4dea22b31d52d8f32516782e98ab3fa0</uuid>
<title>A short description - title - of the domain</title>
<description>Some human readable description</description>
<metadata>
<app1:foo
xmlns:app1="http://app1.org/app1/">..</app1:foo>
<app2:bar
xmlns:app2="http://app1.org/app2/">..</app2:bar>
</metadata>
...
|metadata|
yes, one application use one namespace.
append element.tag to namespace, make every "kimchi" element has an
unique uri.
this looks like all the "kimchi" prefix element are belong to one
"kimchi" application.
looks like "foo" are "bar" are all "kimchi", but they has
different xmlns.
<metadata>
<kimchi:foo
xmlns:kimchi="http://kimchi.org/kimchi/foo">..</kimchi:fo...
<kimchi:bar
xmlns:kimchi="http://kimchi.org/kimchi/bar">..</kimchi:ba...
</metadata>
The libvirt API can easy to set/get the every metadata element.
get foo by: virDomain.metadata(@type, "https://kimchi.org/kimchi/foo/")
get bar by: virDomain.metadata(@type, "https://kimchi.org/kimchi/bar/")
set foo by: virDomain.setMetadata(@type, "<foo></foo>",
"https://kimchi.org/kimchi/foo/")
set bar by: virDomain.setMetadata(@type, "<bar></bar>",
"https://kimchi.org/kimchi/bar/")
looks like foo and bar belong to "kimchi" element, but they are
independent.
Their is no relationship between them.
If we just want to handle foo, we do not need to care "bar".
like we can call kimchi api, every api is unique uri. every api are
independent.
virDomain.metadata
Type: instancemethod
String Form:<unbound method virDomain.metadata>
File: /usr/lib64/python2.7/site-packages/libvirt.py
Definition: libvirt.virDomain.metadata(self, type, uri, flags=0)
Docstring:
Retrieves the appropriate domain element given by @type.
If VIR_DOMAIN_METADATA_ELEMENT is requested parameter @uri
must be set to the name of the namespace the requested elements
belong to, otherwise must be None.
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.
The|metadata|node can be used by applications to store custom
metadata in the form of XML nodes/trees. Applications must use
custom namespaces on their XML nodes/trees, with only one top-level
element per namespace (if the application needs structure, they
should have sub-elements to their namespace element).Since 0.9.10
--
Thanks and best regards!
Sheldon Feng(冯少合)<shaohef(a)linux.vnet.ibm.com>
IBM Linux Technology Center