virsh: make negative values with vol-resize more convenient

When shrinking a volume by a certain size, instead of typing
  vol-resize volume 1G --delta --shrink
we allow the convience of specifying a negative value:
  vol-resize volume -1G --delta --shrink
getting the same results with one more character.

A negative value only makes sense as a delta. Imply the
--delta parameter if the value is negative.

Still require --shrink, because the operation is potentially
destructive.
This commit is contained in:
Ján Tomko 2015-05-27 16:46:01 +02:00
parent 778c56f000
commit 0a33bba1ae

View File

@ -1124,14 +1124,10 @@ cmdVolResize(vshControl *ctl, const vshCmd *cmd)
unsigned long long capacity = 0; unsigned long long capacity = 0;
unsigned int flags = 0; unsigned int flags = 0;
bool ret = false; bool ret = false;
bool delta = false; bool delta = vshCommandOptBool(cmd, "delta");
if (vshCommandOptBool(cmd, "allocate")) if (vshCommandOptBool(cmd, "allocate"))
flags |= VIR_STORAGE_VOL_RESIZE_ALLOCATE; flags |= VIR_STORAGE_VOL_RESIZE_ALLOCATE;
if (vshCommandOptBool(cmd, "delta")) {
delta = true;
flags |= VIR_STORAGE_VOL_RESIZE_DELTA;
}
if (vshCommandOptBool(cmd, "shrink")) if (vshCommandOptBool(cmd, "shrink"))
flags |= VIR_STORAGE_VOL_RESIZE_SHRINK; flags |= VIR_STORAGE_VOL_RESIZE_SHRINK;
@ -1144,14 +1140,19 @@ cmdVolResize(vshControl *ctl, const vshCmd *cmd)
if (*capacityStr == '-') { if (*capacityStr == '-') {
/* The API always requires a positive value; but we allow a /* The API always requires a positive value; but we allow a
* negative value for convenience. */ * negative value for convenience. */
if (delta && vshCommandOptBool(cmd, "shrink")) { if (vshCommandOptBool(cmd, "shrink")) {
capacityStr++; capacityStr++;
delta = true;
} else { } else {
vshError(ctl, "%s", vshError(ctl, "%s",
_("negative size requires --delta and --shrink")); _("negative size requires --shrink"));
goto cleanup; goto cleanup;
} }
} }
if (delta)
flags |= VIR_STORAGE_VOL_RESIZE_DELTA;
if (vshVolSize(capacityStr, &capacity) < 0) { if (vshVolSize(capacityStr, &capacity) < 0) {
vshError(ctl, _("Malformed size %s"), capacityStr); vshError(ctl, _("Malformed size %s"), capacityStr);
goto cleanup; goto cleanup;