On Mon, Apr 09, 2012 at 21:52:26 -0600, Eric Blake wrote: > Expose the full abilities of virDomainBlockCopy. > > * tools/virsh.c (blockJobImpl): Add --format option for block copy. > * tools/virsh.pod (blockcopy): Document this. > --- > tools/virsh.c | 26 ++++++++++++++++++++------ > tools/virsh.pod | 10 +++++----- > 2 files changed, 25 insertions(+), 11 deletions(-) > > diff --git a/tools/virsh.c b/tools/virsh.c > index 25403f5..8669a8a 100644 > --- a/tools/virsh.c > +++ b/tools/virsh.c > @@ -7527,6 +7527,7 @@ blockJobImpl(vshControl *ctl, const vshCmd *cmd, > unsigned long bandwidth = 0; > int ret = -1; > const char *base = NULL; > + const char *format = NULL; > unsigned int flags = 0; > > if (!vshConnectionUsability(ctl, ctl->conn)) > @@ -7566,16 +7567,28 @@ blockJobImpl(vshControl *ctl, const vshCmd *cmd, > ret = virDomainBlockPull(dom, path, bandwidth, 0); > break; > case VSH_CMD_BLOCK_JOB_COPY: > - flags |= VIR_DOMAIN_BLOCK_REBASE_COPY; > if (vshCommandOptBool(cmd, "shallow")) > - flags |= VIR_DOMAIN_BLOCK_REBASE_SHALLOW; > + flags |= VIR_DOMAIN_BLOCK_COPY_SHALLOW; > if (vshCommandOptBool(cmd, "reuse-external")) > - flags |= VIR_DOMAIN_BLOCK_REBASE_REUSE_EXT; > - if (vshCommandOptBool(cmd, "raw")) > - flags |= VIR_DOMAIN_BLOCK_REBASE_COPY_RAW; > + flags |= VIR_DOMAIN_BLOCK_COPY_REUSE_EXT; > if (vshCommandOptString(cmd, "dest", &base) < 0) > goto cleanup; > - ret = virDomainBlockRebase(dom, path, base, bandwidth, flags); > + if (vshCommandOptString(cmd, "format", &format) < 0) > + goto cleanup; > + if (!format) { > + if (vshCommandOptBool(cmd, "raw")) > + flags |= VIR_DOMAIN_BLOCK_REBASE_COPY_RAW; > + flags |= VIR_DOMAIN_BLOCK_REBASE_COPY; > + ret = virDomainBlockRebase(dom, path, base, bandwidth, flags); > + } else { > + if (vshCommandOptBool(cmd, "raw")) { > + vshError(ctl, "%s", > + _("--raw and --format are mutually exclusive")); > + goto cleanup; > + } > + ret = virDomainBlockCopy(dom, path, base, format, > + bandwidth, flags); > + } > } > > cleanup: > @@ -7598,6 +7611,7 @@ static const vshCmdOptDef opts_block_copy[] = { > {"path", VSH_OT_DATA, VSH_OFLAG_REQ, N_("Fully-qualified path of disk")}, > {"dest", VSH_OT_DATA, VSH_OFLAG_REQ, N_("path of the copy to create")}, > {"bandwidth", VSH_OT_DATA, VSH_OFLAG_NONE, N_("Bandwidth limit in MB/s")}, > + {"format", VSH_OT_DATA, VSH_OFLAG_NONE, N_("file format of dest")}, > {"shallow", VSH_OT_BOOL, 0, N_("make the copy share a backing chain")}, > {"reuse-external", VSH_OT_BOOL, 0, N_("reuse existing destination")}, > {"raw", VSH_OT_BOOL, 0, N_("use raw destination file")}, > diff --git a/tools/virsh.pod b/tools/virsh.pod > index ee84ce5..65e2429 100644 > --- a/tools/virsh.pod > +++ b/tools/virsh.pod > @@ -639,7 +639,7 @@ address of virtual interface (such as I<detach-interface> or > I<domif-setlink>) will accept the MAC address printed by this command. > > =item B<blockcopy> I<domain> I<path> I<dest> [I<bandwidth>] [I<--shallow>] > -[I<--reuse-external>] [I<--raw>] > +[I<--reuse-external>] { [I<--raw>] | I<format> } > > Copy a disk backing image chain to I<dest>. By default, this command > flattens the entire chain; but if I<--shallow> is specified, the copy > @@ -652,10 +652,10 @@ is used, otherwise it must start empty); this option is typically used > to set up a relative backing file name in the destination. > > The format of the destination is determined by the first match in the > -following list: if I<--raw> is specified, it will be raw; if > -I<--reuse-external> is specified, the existing destination is probed > -for a format; and in all other cases, the destination format will > -match the source format. > +following list: if I<--raw> is specified, it will be raw; if I<format> > +is specified, it will have that format; if I<--reuse-external> is > +specified, the existing destination is probed for a format; and in > +all other cases, the destination format will match the source format. > > The copy runs in the background; initially, the job must copy all data > from the source, and during this phase, the job can only be canceled to OK but this patch may be affected in case we decide to rename virDomainBlockCopy. Jirka -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list