We have the same argument to many other commands that produce an XML based on what user typed. But unfortunately vol-create-as was missing it. Maybe nobody had needed it yet. Well, I did just now. Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx> --- tools/virsh-volume.c | 17 +++++++++++++---- tools/virsh.pod | 6 ++++-- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/tools/virsh-volume.c b/tools/virsh-volume.c index 569f555..cfb8cfc 100644 --- a/tools/virsh-volume.c +++ b/tools/virsh-volume.c @@ -195,6 +195,10 @@ static const vshCmdOptDef opts_vol_create_as[] = { .type = VSH_OT_BOOL, .help = N_("preallocate metadata (for qcow2 instead of full allocation)") }, + {.name = "print-xml", + .type = VSH_OT_BOOL, + .help = N_("print XML document, but don't define/create") + }, {.name = NULL} }; @@ -213,6 +217,7 @@ cmdVolCreateAs(vshControl *ctl, const vshCmd *cmd) virStoragePoolPtr pool; virStorageVolPtr vol = NULL; char *xml = NULL; + bool printXML = vshCommandOptBool(cmd, "print-xml"); const char *name, *capacityStr = NULL, *allocationStr = NULL, *format = NULL; const char *snapshotStrVol = NULL, *snapshotStrFormat = NULL; unsigned long long capacity, allocation = 0; @@ -337,12 +342,16 @@ cmdVolCreateAs(vshControl *ctl, const vshCmd *cmd) } xml = virBufferContentAndReset(&buf); - if (!(vol = virStorageVolCreateXML(pool, xml, flags))) { - vshError(ctl, _("Failed to create vol %s"), name); - goto cleanup; + if (printXML) { + vshPrint(ctl, "%s", xml); + } else { + if (!(vol = virStorageVolCreateXML(pool, xml, flags))) { + vshError(ctl, _("Failed to create vol %s"), name); + goto cleanup; + } + vshPrint(ctl, _("Vol %s created\n"), name); } - vshPrint(ctl, _("Vol %s created\n"), name); ret = true; cleanup: diff --git a/tools/virsh.pod b/tools/virsh.pod index 435c649..4662658 100644 --- a/tools/virsh.pod +++ b/tools/virsh.pod @@ -3427,9 +3427,11 @@ If this is not possible, the copy fails. =item B<vol-create-as> I<pool-or-uuid> I<name> I<capacity> [I<--allocation> I<size>] [I<--format> I<string>] [I<--backing-vol> I<vol-name-or-key-or-path>] [I<--backing-vol-format> I<string>] -[I<--prealloc-metadata>] +[I<--prealloc-metadata>] [I<--print-xml>] -Create a volume from a set of arguments. +Create a volume from a set of arguments unless I<--print-xml> is specified, in +which case just the XML of the volume object is printed out without any actual +object creation. I<pool-or-uuid> is the name or UUID of the storage pool to create the volume in. I<name> is the name of the new volume. For a disk pool, this must match the -- 2.4.10 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list