[libvirt] [PATCHv2] storage: expose volume meta-type in XML
John Ferlan
jferlan at redhat.com
Mon Nov 25 17:21:55 UTC 2013
On 11/25/2013 11:56 AM, Eric Blake wrote:
> I got annoyed at having to use both 'virsh vol-list $pool --details'
> AND 'virsh vol-dumpxml $vol $pool' to learn if I had populated
> the volume correctly. Since two-thirds of the data present in
> virStorageVolGetInfo() already appears in virStorageVolGetXMLDesc(),
> this just adds the remaining piece of information, as:
>
> <volume type='...'>
> ...
> </volume>
>
> * docs/formatstorage.html.in: Document new <volume type=...>.
> * docs/schemas/storagevol.rng (vol): Add it to RelaxNG.
> * src/conf/storage_conf.h (virStorageVolTypeToString): Declare.
> * src/conf/storage_conf.c (virStorageVolTargetDefFormat): Output
> the metatype.
> (virStorageVolDefParseXML): Parse it, for unit tests.
> * tests/storagevolxml2xmlout/vol-*.xml: Update tests to match.
>
> Signed-off-by: Eric Blake <eblake at redhat.com>
> ---
>
> v1: https://www.redhat.com/archives/libvir-list/2013-November/msg00955.html
> Since then, delay 'network-dir' until later in gluster series,
> change XML to <volume type='file'> instead of <volume><type>file</type>,
> and use 1.2.0 instead of 1.1.5
>
> docs/formatstorage.html.in | 10 +++++++---
> docs/schemas/storagevol.rng | 10 ++++++++++
> src/conf/storage_conf.c | 19 ++++++++++++++++++-
> src/conf/storage_conf.h | 1 +
> tests/storagevolxml2xmlin/vol-logical-backing.xml | 2 +-
> tests/storagevolxml2xmlin/vol-logical.xml | 2 +-
> tests/storagevolxml2xmlin/vol-partition.xml | 2 +-
> tests/storagevolxml2xmlin/vol-sheepdog.xml | 2 +-
> tests/storagevolxml2xmlout/vol-file-backing.xml | 2 +-
> tests/storagevolxml2xmlout/vol-file-naming.xml | 2 +-
> tests/storagevolxml2xmlout/vol-file.xml | 2 +-
> tests/storagevolxml2xmlout/vol-logical-backing.xml | 2 +-
> tests/storagevolxml2xmlout/vol-logical.xml | 2 +-
> tests/storagevolxml2xmlout/vol-partition.xml | 2 +-
> tests/storagevolxml2xmlout/vol-qcow2-0.10-lazy.xml | 2 +-
> tests/storagevolxml2xmlout/vol-qcow2-1.1.xml | 2 +-
> tests/storagevolxml2xmlout/vol-qcow2-lazy.xml | 2 +-
> tests/storagevolxml2xmlout/vol-qcow2-nobacking.xml | 2 +-
> tests/storagevolxml2xmlout/vol-qcow2.xml | 2 +-
> tests/storagevolxml2xmlout/vol-sheepdog.xml | 2 +-
> 20 files changed, 52 insertions(+), 20 deletions(-)
>
You and Peter seem to be touching the same code in storage_conf.c:
https://www.redhat.com/archives/libvir-list/2013-November/msg01030.html
Although added virStorageVol was added in a different location...
That'll make the 3 way merge interesting...
Also, he seems to have also touched libvirt_private.syms too...
John
<...snip...>
> diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
> index 8b378c2..0cd80c3 100644
> --- a/src/conf/storage_conf.c
> +++ b/src/conf/storage_conf.c
> @@ -51,6 +51,10 @@
> #define DEFAULT_POOL_PERM_MODE 0755
> #define DEFAULT_VOL_PERM_MODE 0600
>
> +VIR_ENUM_IMPL(virStorageVol,
> + VIR_STORAGE_VOL_LAST,
> + "file", "block", "dir", "network")
> +
> VIR_ENUM_IMPL(virStoragePool,
> VIR_STORAGE_POOL_LAST,
> "dir", "fs", "netfs",
> @@ -1253,6 +1257,7 @@ virStorageVolDefParseXML(virStoragePoolDefPtr pool,
> {
> virStorageVolDefPtr ret;
> virStorageVolOptionsPtr options;
> + char *type = NULL;
> char *allocation = NULL;
> char *capacity = NULL;
> char *unit = NULL;
> @@ -1278,6 +1283,16 @@ virStorageVolDefParseXML(virStoragePoolDefPtr pool,
> /* Normally generated by pool refresh, but useful for unit tests */
> ret->key = virXPathString("string(./key)", ctxt);
>
> + /* Technically overridden by pool refresh, but useful for unit tests */
> + type = virXPathString("string(./@type)", ctxt);
> + if (type) {
> + if ((ret->type = virStorageVolTypeFromString(type)) < 0) {
> + virReportError(VIR_ERR_XML_ERROR,
> + _("unknown volume type '%s'"), type);
> + goto error;
> + }
> + }
> +
> capacity = virXPathString("string(./capacity)", ctxt);
> unit = virXPathString("string(./capacity/@unit)", ctxt);
> if (capacity == NULL) {
> @@ -1394,6 +1409,7 @@ cleanup:
> VIR_FREE(allocation);
> VIR_FREE(capacity);
> VIR_FREE(unit);
> + VIR_FREE(type);
> return ret;
>
> error:
> @@ -1563,7 +1579,8 @@ virStorageVolDefFormat(virStoragePoolDefPtr pool,
> if (options == NULL)
> return NULL;
>
> - virBufferAddLit(&buf, "<volume>\n");
> + virBufferAsprintf(&buf, "<volume type='%s'>\n",
> + virStorageVolTypeToString(def->type));
> virBufferEscapeString(&buf, " <name>%s</name>\n", def->name);
> virBufferEscapeString(&buf, " <key>%s</key>\n", def->key);
> virBufferAddLit(&buf, " <source>\n");
> diff --git a/src/conf/storage_conf.h b/src/conf/storage_conf.h
> index f062bd8..c4dd403 100644
> --- a/src/conf/storage_conf.h
> +++ b/src/conf/storage_conf.h
> @@ -116,6 +116,7 @@ struct _virStorageVolDefList {
> virStorageVolDefPtr *objs;
> };
>
> +VIR_ENUM_DECL(virStorageVol)
>
> enum virStoragePoolType {
> VIR_STORAGE_POOL_DIR, /* Local directory */
<...snip...>
More information about the libvir-list
mailing list