[libvirt] [PATCH 2/8] Introduce new virDomainNormalizeXML API
Michal Privoznik
mprivozn at redhat.com
Wed Sep 18 16:14:00 UTC 2013
On 18.09.2013 17:50, Eric Blake wrote:
> On 09/17/2013 08:46 AM, Michal Privoznik wrote:
>>
>> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
>> ---
>> include/libvirt/libvirt.h.in | 5 ++++
>> python/generator.py | 1 +
>> python/libvirt-override-api.xml | 7 ++++++
>> python/libvirt-override.c | 30 ++++++++++++++++++++++++
>> src/driver.h | 7 ++++++
>> src/libvirt.c | 51 +++++++++++++++++++++++++++++++++++++++++
>> src/libvirt_public.syms | 5 ++++
>> 7 files changed, 106 insertions(+)
>>
>
>> +
>> +/**
>> + * virDomainNormalizeXML:
>> + * @domain: a domain object
>> + * @xmlIn: XML to normalize
>> + * @xmlOut: the result of normalization
>> + * @flags: bitwise-OR of subset of virDomainXMLFlags
>> + *
>> + * Intruct libvirt to take @xmlIn, parse it and format again. This has effect
>
> s/Intruct/Instruct/
>
>> + * that all returned values are formated as they would be a part of @dom. For
>
> s/formated/formatted/
>
>> + * example, if among passed @xmlIn and address='0x00008' occurs, it is
>> + * formatted as address='0x08'. The result of normalization is returned in @xmlOut
>> + * (automatically allocated array which is supposed to be freed by caller once
>> + * no longer needed). However, if only validation of @xmlIn is desired, pass
>> + * NULL as @xmlOut.
>> + *
>> + * Returns 0 on success -1 otherwise.
>> + */
>> +int
>> +virDomainNormalizeXML(virDomainPtr domain,
>> + const char *xmlIn,
>> + char **xmlOut,
>> + unsigned int flags)
>
> When the topic came up in the past, the question was whether we can ALSO
> use this API to do systematic RelaxNG validation of the input xml (where
> xmlOut can be NULL if only validation is required, or a non-NULL pointer
> to also get the normalized result on success; or an error if validation
> fails). Of course, RelaxNG validation should be specified via flags
> (and not done all the time).
>
> Meanwhile, I'm not sure this is quite the right interface. When this
> topic came up last time, I had mentioned the idea of having it be
> virConnectNormalizeXML(virConnectPtr conn, int type, const char *xmlIn,
> char **xmlOut, unsigned int flags), where 'type' is an enum that says
> WHAT type of XML is being normalized (<domain>, a <disk> sub-element of
> domain, <network>, <domainsnapshot>, <nwfilter>, etc). In particular,
> since device hot-plug uses a subset of domain, it might be nice to
> support the normalization of a disk hotplug snippet without having to
> plug it into a larger <domain> XML - possible if we have an enum that
> tells the API which (subset of) schema we are targetting.
>
Right, however, some of our device parsing functions require
virDomainDefPtr (or some parts of it), for instance
virDomainDiskDefParseXML(). To get rid of that would mean much more changes.
Speaking of which, I think the better approach would be to split parse
and check of XML into two separate steps. Or in fact three steps: parse,
fill in defaults, sanity check.
Michal
More information about the libvir-list
mailing list