Allow users to request validation of the storage volume XML. Add new
flag and virsh support.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
docs/manpages/virsh.rst | 9 +++++++--
include/libvirt/libvirt-storage.h | 1 +
tools/virsh-volume.c | 14 ++++++++++++++
3 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst
index 532d4e779c..1e85b6ae78 100644
--- a/docs/manpages/virsh.rst
+++ b/docs/manpages/virsh.rst
@@ -6542,7 +6542,7 @@ vol-create
::
- vol-create pool-or-uuid FILE [--prealloc-metadata]
+ vol-create pool-or-uuid FILE [--prealloc-metadata] [--validate]
Create a volume from an XML <file>.
@@ -6557,6 +6557,9 @@ support full allocation). This option creates a sparse image file
with metadata,
resulting in higher performance compared to images with no preallocation and
only slightly higher initial disk space usage.
+If *--validate* is specified, validates the format of the XML document against
+an internal RNG schema.
+
**Example:**
::
@@ -6574,7 +6577,7 @@ vol-create-from
::
vol-create-from pool-or-uuid FILE vol-name-or-key-or-path
- [--inputpool pool-or-uuid] [--prealloc-metadata] [--reflink]
+ [--inputpool pool-or-uuid] [--prealloc-metadata] [--reflink] [--validate]
Create a volume, using another volume as input.
@@ -6596,6 +6599,8 @@ When *--reflink* is specified, perform a COW lightweight copy,
where the data blocks are copied only when modified.
If this is not possible, the copy fails.
+If *--validate* is specified, validates the format of the XML document against
+an internal RNG schema.
vol-create-as
-------------
diff --git a/include/libvirt/libvirt-storage.h b/include/libvirt/libvirt-storage.h
index af1c50b9f1..aaad4a3da1 100644
--- a/include/libvirt/libvirt-storage.h
+++ b/include/libvirt/libvirt-storage.h
@@ -437,6 +437,7 @@ const char* virStorageVolGetKey
(virStorageVolPtr vol);
typedef enum {
VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA = 1 << 0, /* (Since: 1.0.1) */
VIR_STORAGE_VOL_CREATE_REFLINK = 1 << 1, /* perform a btrfs lightweight copy
(Since: 1.2.13) */
+ VIR_STORAGE_VOL_CREATE_VALIDATE = 1 << 2, /* Validate the XML document against
schema (Since: 8.10.0) */
} virStorageVolCreateFlags;
virStorageVolPtr virStorageVolCreateXML (virStoragePoolPtr pool,
diff --git a/tools/virsh-volume.c b/tools/virsh-volume.c
index 300a0aa8e5..4f23481180 100644
--- a/tools/virsh-volume.c
+++ b/tools/virsh-volume.c
@@ -380,6 +380,10 @@ static const vshCmdOptDef opts_vol_create[] = {
.type = VSH_OT_BOOL,
.help = N_("preallocate metadata (for qcow2 instead of full allocation)")
},
+ {.name = "validate",
+ .type = VSH_OT_BOOL,
+ .help = N_("validate the XML against the schema")
+ },
{.name = NULL}
};
@@ -395,6 +399,9 @@ cmdVolCreate(vshControl *ctl, const vshCmd *cmd)
if (vshCommandOptBool(cmd, "prealloc-metadata"))
flags |= VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA;
+ if (vshCommandOptBool(cmd, "validate"))
+ flags |= VIR_STORAGE_VOL_CREATE_VALIDATE;
+
if (!(pool = virshCommandOptPool(ctl, cmd, "pool", NULL)))
return false;
@@ -446,6 +453,10 @@ static const vshCmdOptDef opts_vol_create_from[] = {
.type = VSH_OT_BOOL,
.help = N_("use btrfs COW lightweight copy")
},
+ {.name = "validate",
+ .type = VSH_OT_BOOL,
+ .help = N_("validate the XML against the schema")
+ },
{.name = NULL}
};
@@ -468,6 +479,9 @@ cmdVolCreateFrom(vshControl *ctl, const vshCmd *cmd)
if (vshCommandOptBool(cmd, "reflink"))
flags |= VIR_STORAGE_VOL_CREATE_REFLINK;
+ if (vshCommandOptBool(cmd, "validate"))
+ flags |= VIR_STORAGE_VOL_CREATE_VALIDATE;
+
if (vshCommandOptStringReq(ctl, cmd, "file", &from) < 0)
return false;
--
2.37.3