Although the virStorageBackendUpdateVolTargetInfo will update the
target.physical value, there is no way to provide that information
via the virStorageGetVolInfo API since it only returns the capacity
and allocation of a volume. So as described in commit id '0282ca45',
it should be possible to generate an output only <physical> value
for that purpose.

This patch generates the <physical> value in the volume XML output
for the sole purpose of being able to view/see the value to allow
someone to parse the XML in order to obtain the value.

Update the documentation to describe the output only nature.

Signed-off-by: John Ferlan <jfer...@redhat.com>
---
 docs/formatstorage.html.in | 5 +++++
 src/conf/storage_conf.c    | 6 ++++++
 2 files changed, 11 insertions(+)

diff --git a/docs/formatstorage.html.in b/docs/formatstorage.html.in
index 47c8b0c..a7273ed 100644
--- a/docs/formatstorage.html.in
+++ b/docs/formatstorage.html.in
@@ -550,6 +550,11 @@
         specified with the same semantics as for <code>allocation</code>
         This is compulsory when creating a volume.
         <span class="since">Since 0.4.1</span></dd>
+      <dt><code>physical</code></dt>
+      <dd>This output only element provides the host physical size of
+        the target storage volume. The default output <code>unit</code>
+        will be in bytes.
+        <span class="since">Since 3.0.0</span></dd>
       <dt><code>source</code></dt>
       <dd>Provides information about the underlying storage allocation
         of the volume. This may not be available for some pool types.
diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
index 7e7bb72..71ea0c9 100644
--- a/src/conf/storage_conf.c
+++ b/src/conf/storage_conf.c
@@ -1669,6 +1669,12 @@ virStorageVolDefFormat(virStoragePoolDefPtr pool,
                       def->target.capacity);
     virBufferAsprintf(&buf, "<allocation unit='bytes'>%llu</allocation>\n",
                       def->target.allocation);
+    /* NB: Display only - since virStorageVolInfo is limited to just
+     * 'capacity' and 'allocation' on output. Since we don't read this
+     * in, be sure it was filled in before printing */
+    if (def->target.physical)
+        virBufferAsprintf(&buf, "<physical unit='bytes'>%llu</physical>\n",
+                          def->target.physical);
 
     if (virStorageVolTargetDefFormat(options, &buf,
                                      &def->target, "target") < 0)
-- 
2.7.4

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to