[libvirt] [libvirt-glib] API to get/set custom metadata from/to domain config
Zeeshan Ali (Khattak)
zeeshanak at gnome.org
Mon Jan 23 14:53:40 UTC 2012
On Mon, Jan 23, 2012 at 1:01 PM, Christophe Fergeau <cfergeau at redhat.com> wrote:
> On Fri, Jan 20, 2012 at 11:11:57PM +0200, Zeeshan Ali (Khattak) wrote:
>> From: "Zeeshan Ali (Khattak)" <zeeshanak at gnome.org>
>>
>> ---
>> libvirt-gconfig/libvirt-gconfig-domain.c | 115 +++++++++++++++++++++++++++++
>> libvirt-gconfig/libvirt-gconfig-domain.h | 8 ++
>> libvirt-gconfig/libvirt-gconfig-helpers.c | 4 +-
>> libvirt-gconfig/libvirt-gconfig.sym | 2 +
>> 4 files changed, 128 insertions(+), 1 deletions(-)
>>
>> diff --git a/libvirt-gconfig/libvirt-gconfig-domain.c b/libvirt-gconfig/libvirt-gconfig-domain.c
>> index 61af625..d1faabd 100644
>> --- a/libvirt-gconfig/libvirt-gconfig-domain.c
>> +++ b/libvirt-gconfig/libvirt-gconfig-domain.c
>> @@ -449,3 +449,118 @@ GList *gvir_config_domain_get_devices(GVirConfigDomain *domain)
>>
>> return data.devices;
>> }
>> +
>> +static void set_namespace_on_tree(xmlNodePtr node, xmlNsPtr namespace)
>> +{
>> + xmlNodePtr child;
>> +
>> + xmlSetNs(node, namespace);
>> +
>> + for (child = node->children; child != NULL; child = child->next)
>> + set_namespace_on_tree(child, namespace);
>
> I wouldn't make this recursive, I'd just set the namespace on the root
> node in case users of the API want to use different namespaces in the xml
> they embed in the domain.
Ah good point but OTOH we should ensure that no node in the XML is
using non/default namespace so maybe we should just set it for every
node that doesn't have a namespace already?
>> + if (metadata_node == NULL)
>> + return NULL;
>> +
>> + for (node = metadata_node->children; node != NULL; node = node->next) {
>> + if (node->ns != NULL &&
>> + (g_strcmp0 ((gchar *)node->ns->href, ns_uri) == 0))
>> + break;
>> + }
>> +
>> + return node;
>> +}
>
> Hmm seeing this loop, gvir_config_object_foreach_child could even be used
> here with a small helper struct returning the value.
Sure but IMHO code is simpler this way.
>> + set_namespace_on_tree(node, namespace);
>> + doc = node->doc;
>> +
>> + old_node = gvir_config_domain_get_custom_xml_node(domain, ns_uri);
>> + if (old_node != NULL)
>> + xmlReplaceNode(old_node, node);
>> + else {
>> + xmlUnlinkNode(node);
>> + xmlAddChild(metadata_node, node);
>> + }
>
> This duplicates one of the GVirConfigObject helpers. I've tried to restrict
> xmlNodePtr use to libvirt-gconfig-object.c/libvirt-gconfig-helpers.c. So
> this patch which adds a lot of xmlNodePtr use to libvirt-gconfig-domain.c
> makes me a bit uncomfortable. Here I think we could use
> gvir_config_object_new_from_xml and reuse the existing helpers (with the
> addition of gvir_config_object_set_namespace).
But we are not create a GVirConfigObject here at all.
--
Regards,
Zeeshan Ali (Khattak)
FSF member#5124
P.S. Not replying to comments I agree with.
More information about the libvir-list
mailing list