[libvirt] [PATCH] storage: expose volume meta-type in XML

Eric Blake eblake at redhat.com
Fri Nov 22 22:26:11 UTC 2013


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 at redhat.com>
---

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




More information about the libvir-list mailing list