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. * docs/formatstorage.html.in: Document new <target type=...>. * docs/schemas/storagevol.rng (target, backingStore): Add it to RelaxNG. * src/conf/storage_conf.h (virStorageVolTypeToString): Declare. * src/conf/storage_conf.c (virStorageVolTargetDefFormat): Output the metatype. * tests/storagevolxml2xmlout/vol-*.xml: Update tests to match. Signed-off-by: Eric Blake <eblake@xxxxxxxxxx> --- Depends on: https://www.redhat.com/archives/libvir-list/2013-November/msg00948.html docs/formatstorage.html.in | 5 +++++ docs/schemas/storagevol.rng | 15 +++++++++++++++ src/conf/storage_conf.c | 18 ++++++++++++++++++ src/conf/storage_conf.h | 1 + tests/storagevolxml2xmlin/vol-logical-backing.xml | 1 + tests/storagevolxml2xmlin/vol-logical.xml | 1 + tests/storagevolxml2xmlin/vol-partition.xml | 1 + tests/storagevolxml2xmlin/vol-sheepdog.xml | 1 + tests/storagevolxml2xmlout/vol-file-backing.xml | 1 + tests/storagevolxml2xmlout/vol-file-naming.xml | 1 + tests/storagevolxml2xmlout/vol-file.xml | 1 + tests/storagevolxml2xmlout/vol-logical-backing.xml | 1 + tests/storagevolxml2xmlout/vol-logical.xml | 1 + tests/storagevolxml2xmlout/vol-partition.xml | 1 + tests/storagevolxml2xmlout/vol-qcow2-0.10-lazy.xml | 1 + tests/storagevolxml2xmlout/vol-qcow2-1.1.xml | 1 + tests/storagevolxml2xmlout/vol-qcow2-lazy.xml | 1 + tests/storagevolxml2xmlout/vol-qcow2-nobacking.xml | 1 + tests/storagevolxml2xmlout/vol-qcow2.xml | 1 + tests/storagevolxml2xmlout/vol-sheepdog.xml | 1 + 20 files changed, 55 insertions(+) diff --git a/docs/formatstorage.html.in b/docs/formatstorage.html.in index 90eeaa3..5f277b4 100644 --- a/docs/formatstorage.html.in +++ b/docs/formatstorage.html.in @@ -293,6 +293,7 @@ <volume> <name>sparse.img</name> <key>/var/lib/xen/images/sparse.img</key> + <type>file</type> <allocation>0</allocation> <capacity unit="T">1</capacity> ...</pre> @@ -305,6 +306,10 @@ <dd>Providing an identifier for the volume which is globally unique. This cannot be set when creating a volume: it is always generated. <span class="since">Since 0.4.1</span></dd> + <dt><code>type</code></dt> + <dd>Output-only; provides the volume type that is also available + from <code>virStorageVolGetInfo()</code>. <span class="since">Since + 1.1.5</span></dd> <dt><code>allocation</code></dt> <dd>Providing the total storage allocation for the volume. This may be smaller than the logical capacity if the volume is sparsely diff --git a/docs/schemas/storagevol.rng b/docs/schemas/storagevol.rng index e79bc35..96572c5 100644 --- a/docs/schemas/storagevol.rng +++ b/docs/schemas/storagevol.rng @@ -25,6 +25,9 @@ <optional> <ref name='source'/> </optional> + <optional> + <ref name='voltype'/> + </optional> <ref name='sizing'/> <ref name='target'/> <optional> @@ -34,6 +37,18 @@ </element> </define> + <define name='voltype'> + <element name='type'> + <choice> + <value>file</value> + <value>block</value> + <value>dir</value> + <value>network</value> + <value>network-dir</value> + </choice> + </element> + </define> + <define name='sizing'> <interleave> <optional> diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c index 8b378c2..0d2932b 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: @@ -1592,6 +1608,8 @@ virStorageVolDefFormat(virStoragePoolDefPtr pool, } virBufferAddLit(&buf, " </source>\n"); + virBufferAsprintf(&buf, " <type>%s</type>\n", + virStorageVolTypeToString(def->type)); virBufferAsprintf(&buf, " <capacity unit='bytes'>%llu</capacity>\n", def->capacity); virBufferAsprintf(&buf, " <allocation unit='bytes'>%llu</allocation>\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 */ diff --git a/tests/storagevolxml2xmlin/vol-logical-backing.xml b/tests/storagevolxml2xmlin/vol-logical-backing.xml index b4141a5..d1a7b61 100644 --- a/tests/storagevolxml2xmlin/vol-logical-backing.xml +++ b/tests/storagevolxml2xmlin/vol-logical-backing.xml @@ -6,6 +6,7 @@ <extent start='31440502784' end='33520877568'/> </device> </source> + <type>block</type> <capacity>2080374784</capacity> <allocation>2080374784</allocation> <target> diff --git a/tests/storagevolxml2xmlin/vol-logical.xml b/tests/storagevolxml2xmlin/vol-logical.xml index cd4d3f7..f98ff76 100644 --- a/tests/storagevolxml2xmlin/vol-logical.xml +++ b/tests/storagevolxml2xmlin/vol-logical.xml @@ -6,6 +6,7 @@ <extent start='31440502784' end='33520877568'/> </device> </source> + <type>block</type> <capacity>2080374784</capacity> <allocation>2080374784</allocation> <target> diff --git a/tests/storagevolxml2xmlin/vol-partition.xml b/tests/storagevolxml2xmlin/vol-partition.xml index 6990bb5..d699635 100644 --- a/tests/storagevolxml2xmlin/vol-partition.xml +++ b/tests/storagevolxml2xmlin/vol-partition.xml @@ -6,6 +6,7 @@ <extent start='32256' end='106928640'/> </device> </source> + <type>block</type> <capacity>106896384</capacity> <allocation>106896384</allocation> <target> diff --git a/tests/storagevolxml2xmlin/vol-sheepdog.xml b/tests/storagevolxml2xmlin/vol-sheepdog.xml index 49e221c..64884b2 100644 --- a/tests/storagevolxml2xmlin/vol-sheepdog.xml +++ b/tests/storagevolxml2xmlin/vol-sheepdog.xml @@ -2,6 +2,7 @@ <name>test2</name> <source> </source> + <type>network</type> <capacity unit='bytes'>1024</capacity> <allocation unit='bytes'>0</allocation> <target> diff --git a/tests/storagevolxml2xmlout/vol-file-backing.xml b/tests/storagevolxml2xmlout/vol-file-backing.xml index 8d2fb57..ca0598d 100644 --- a/tests/storagevolxml2xmlout/vol-file-backing.xml +++ b/tests/storagevolxml2xmlout/vol-file-backing.xml @@ -3,6 +3,7 @@ <key>/var/lib/libvirt/images/sparse.img</key> <source> </source> + <type>file</type> <capacity unit='bytes'>10000000000</capacity> <allocation unit='bytes'>0</allocation> <target> diff --git a/tests/storagevolxml2xmlout/vol-file-naming.xml b/tests/storagevolxml2xmlout/vol-file-naming.xml index 7022b02..4ca40ba 100644 --- a/tests/storagevolxml2xmlout/vol-file-naming.xml +++ b/tests/storagevolxml2xmlout/vol-file-naming.xml @@ -2,6 +2,7 @@ <name><sparse>.img</name> <source> </source> + <type>file</type> <capacity unit='bytes'>1099511627776</capacity> <allocation unit='bytes'>0</allocation> <target> diff --git a/tests/storagevolxml2xmlout/vol-file.xml b/tests/storagevolxml2xmlout/vol-file.xml index b97dd50..05ffa49 100644 --- a/tests/storagevolxml2xmlout/vol-file.xml +++ b/tests/storagevolxml2xmlout/vol-file.xml @@ -2,6 +2,7 @@ <name>sparse.img</name> <source> </source> + <type>file</type> <capacity unit='bytes'>1099511627776</capacity> <allocation unit='bytes'>0</allocation> <target> diff --git a/tests/storagevolxml2xmlout/vol-logical-backing.xml b/tests/storagevolxml2xmlout/vol-logical-backing.xml index bf34b08..5f52ee6 100644 --- a/tests/storagevolxml2xmlout/vol-logical-backing.xml +++ b/tests/storagevolxml2xmlout/vol-logical-backing.xml @@ -3,6 +3,7 @@ <key>r4xkCv-MQhr-WKIT-R66x-Epn2-e8hG-1Z5gY0</key> <source> </source> + <type>block</type> <capacity unit='bytes'>2080374784</capacity> <allocation unit='bytes'>2080374784</allocation> <target> diff --git a/tests/storagevolxml2xmlout/vol-logical.xml b/tests/storagevolxml2xmlout/vol-logical.xml index e9b4e4b..f8ed510 100644 --- a/tests/storagevolxml2xmlout/vol-logical.xml +++ b/tests/storagevolxml2xmlout/vol-logical.xml @@ -3,6 +3,7 @@ <key>r4xkCv-MQhr-WKIT-R66x-Epn2-e8hG-1Z5gY0</key> <source> </source> + <type>block</type> <capacity unit='bytes'>2080374784</capacity> <allocation unit='bytes'>2080374784</allocation> <target> diff --git a/tests/storagevolxml2xmlout/vol-partition.xml b/tests/storagevolxml2xmlout/vol-partition.xml index 9be1cf1..712b7b0 100644 --- a/tests/storagevolxml2xmlout/vol-partition.xml +++ b/tests/storagevolxml2xmlout/vol-partition.xml @@ -3,6 +3,7 @@ <key>/dev/sda1</key> <source> </source> + <type>block</type> <capacity unit='bytes'>106896384</capacity> <allocation unit='bytes'>106896384</allocation> <target> diff --git a/tests/storagevolxml2xmlout/vol-qcow2-0.10-lazy.xml b/tests/storagevolxml2xmlout/vol-qcow2-0.10-lazy.xml index fd3d606..3447689 100644 --- a/tests/storagevolxml2xmlout/vol-qcow2-0.10-lazy.xml +++ b/tests/storagevolxml2xmlout/vol-qcow2-0.10-lazy.xml @@ -3,6 +3,7 @@ <key>/var/lib/libvirt/images/OtherDemo.img</key> <source> </source> + <type>file</type> <capacity unit='bytes'>5368709120</capacity> <allocation unit='bytes'>294912</allocation> <target> diff --git a/tests/storagevolxml2xmlout/vol-qcow2-1.1.xml b/tests/storagevolxml2xmlout/vol-qcow2-1.1.xml index 99fb5ac..4157628 100644 --- a/tests/storagevolxml2xmlout/vol-qcow2-1.1.xml +++ b/tests/storagevolxml2xmlout/vol-qcow2-1.1.xml @@ -3,6 +3,7 @@ <key>/var/lib/libvirt/images/OtherDemo.img</key> <source> </source> + <type>file</type> <capacity unit='bytes'>5368709120</capacity> <allocation unit='bytes'>294912</allocation> <target> diff --git a/tests/storagevolxml2xmlout/vol-qcow2-lazy.xml b/tests/storagevolxml2xmlout/vol-qcow2-lazy.xml index 3708ea7..7b29c02 100644 --- a/tests/storagevolxml2xmlout/vol-qcow2-lazy.xml +++ b/tests/storagevolxml2xmlout/vol-qcow2-lazy.xml @@ -3,6 +3,7 @@ <key>/var/lib/libvirt/images/OtherDemo.img</key> <source> </source> + <type>file</type> <capacity unit='bytes'>5368709120</capacity> <allocation unit='bytes'>294912</allocation> <target> diff --git a/tests/storagevolxml2xmlout/vol-qcow2-nobacking.xml b/tests/storagevolxml2xmlout/vol-qcow2-nobacking.xml index f6a2e21..ebf79ed 100644 --- a/tests/storagevolxml2xmlout/vol-qcow2-nobacking.xml +++ b/tests/storagevolxml2xmlout/vol-qcow2-nobacking.xml @@ -3,6 +3,7 @@ <key>/var/lib/libvirt/images/OtherDemo.img</key> <source> </source> + <type>file</type> <capacity unit='bytes'>5368709120</capacity> <allocation unit='bytes'>294912</allocation> <target> diff --git a/tests/storagevolxml2xmlout/vol-qcow2.xml b/tests/storagevolxml2xmlout/vol-qcow2.xml index b9adcb4..75f0dcf 100644 --- a/tests/storagevolxml2xmlout/vol-qcow2.xml +++ b/tests/storagevolxml2xmlout/vol-qcow2.xml @@ -3,6 +3,7 @@ <key>/var/lib/libvirt/images/OtherDemo.img</key> <source> </source> + <type>file</type> <capacity unit='bytes'>5368709120</capacity> <allocation unit='bytes'>294912</allocation> <target> diff --git a/tests/storagevolxml2xmlout/vol-sheepdog.xml b/tests/storagevolxml2xmlout/vol-sheepdog.xml index bd5d6d8..182c841 100644 --- a/tests/storagevolxml2xmlout/vol-sheepdog.xml +++ b/tests/storagevolxml2xmlout/vol-sheepdog.xml @@ -2,6 +2,7 @@ <name>test2</name> <source> </source> + <type>network</type> <capacity unit='bytes'>1024</capacity> <allocation unit='bytes'>0</allocation> <target> -- 1.8.3.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list