VSH_CMD_BLOCK_JOB_ABORT,
VSH_CMD_BLOCK_JOB_SPEED,
VSH_CMD_BLOCK_JOB_PULL,
- VSH_CMD_BLOCK_JOB_COPY,
VSH_CMD_BLOCK_JOB_COMMIT,
} vshCmdBlockJobMode;
if (virDomainBlockCommit(dom, path, base, top, bandwidth, flags) < 0)
goto cleanup;
break;
- case VSH_CMD_BLOCK_JOB_COPY:
- flags |= VIR_DOMAIN_BLOCK_REBASE_COPY;
- if (vshCommandOptBool(cmd, "shallow"))
- flags |= VIR_DOMAIN_BLOCK_REBASE_SHALLOW;
- if (vshCommandOptBool(cmd, "reuse-external"))
- flags |= VIR_DOMAIN_BLOCK_REBASE_REUSE_EXT;
- if (vshCommandOptBool(cmd, "raw"))
- flags |= VIR_DOMAIN_BLOCK_REBASE_COPY_RAW;
- if (vshCommandOptBool(cmd, "blockdev"))
- flags |= VIR_DOMAIN_BLOCK_REBASE_COPY_DEV;
- if (vshCommandOptStringReq(ctl, cmd, "dest", &base) < 0)
- goto cleanup;
- if (virDomainBlockRebase(dom, path, base, bandwidth, flags) < 0)
- goto cleanup;
- break;
}
ret = true;
cmdBlockCopy(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom = NULL;
+ const char *dest;
+ unsigned long bandwidth = 0;
+ unsigned int flags = VIR_DOMAIN_BLOCK_REBASE_COPY;
bool ret = false;
bool blocking = vshCommandOptBool(cmd, "wait");
bool verbose = vshCommandOptBool(cmd, "verbose");
bool quit = false;
int abort_flags = 0;
+ if (vshCommandOptStringReq(ctl, cmd, "path", &path) < 0)
+ return false;
+
blocking |= vshCommandOptBool(cmd, "timeout") || pivot || finish;
if (blocking) {
if (pivot && finish) {
}
if (vshCommandOptTimeoutToMs(ctl, cmd, &timeout) < 0)
return false;
- if (vshCommandOptStringReq(ctl, cmd, "path", &path) < 0)
- return false;
if (vshCommandOptBool(cmd, "async"))
abort_flags |= VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC;
return false;
}
- if (!blockJobImpl(ctl, cmd, VSH_CMD_BLOCK_JOB_COPY, &dom))
+ if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
+ goto cleanup;
+
+ if (vshCommandOptULWrap(cmd, "bandwidth", &bandwidth) < 0) {
+ vshError(ctl, "%s", _("bandwidth must be a number"));
+ goto cleanup;
+ }
+
+ if (vshCommandOptBool(cmd, "shallow"))
+ flags |= VIR_DOMAIN_BLOCK_REBASE_SHALLOW;
+ if (vshCommandOptBool(cmd, "reuse-external"))
+ flags |= VIR_DOMAIN_BLOCK_REBASE_REUSE_EXT;
+ if (vshCommandOptBool(cmd, "raw"))
+ flags |= VIR_DOMAIN_BLOCK_REBASE_COPY_RAW;
+ if (vshCommandOptBool(cmd, "blockdev"))
+ flags |= VIR_DOMAIN_BLOCK_REBASE_COPY_DEV;
+ if (vshCommandOptStringReq(ctl, cmd, "dest", &dest) < 0)
+ goto cleanup;
+
+ if (virDomainBlockRebase(dom, path, dest, bandwidth, flags) < 0)
goto cleanup;
if (!blocking) {