[libvirt] [PATCH] Virsh command vol-rename
Osier Yang
jyang at redhat.com
Thu Apr 18 09:27:47 UTC 2013
On 18/04/13 16:29, harryxiyou at gmail.com wrote:
> From: Harry Wei <harryxiyou at gmail.com>
>
> Vol-rename is a convenience function, requiring when
> one wanna rename a volume name.
NACK. It should use the upcoming rename APIs for the *-rename virsh
commands instead .
>
> Signed-off-by: Harry Wei <harryxiyou at gmail.com>
> ---
> tools/virsh-volume.c | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 103 insertions(+)
>
> diff --git a/tools/virsh-volume.c b/tools/virsh-volume.c
> index 0ca295f..8757d54 100644
> --- a/tools/virsh-volume.c
> +++ b/tools/virsh-volume.c
> @@ -490,6 +490,103 @@ cleanup:
> }
>
> /*
> + * "vol-rename" command
> + */
> +static const vshCmdInfo info_vol_rename[] = {
> + {.name = "help",
> + .data = N_("rename a volume.")
> + },
> + {.name = "desc",
> + .data = N_("Rename an existing volume.")
> + },
> + {.name = NULL}
> +};
> +
> +static const vshCmdOptDef opts_vol_rename[] = {
> + {.name = "vol",
> + .type = VSH_OT_DATA,
> + .flags = VSH_OFLAG_REQ,
> + .help = N_("orig vol name or key")
> + },
> + {.name = "newname",
> + .type = VSH_OT_DATA,
> + .flags = VSH_OFLAG_REQ,
> + .help = N_("new name")
> + },
> + {.name = "pool",
> + .type = VSH_OT_STRING,
> + .help = N_("pool name or uuid")
> + },
> + {.name = NULL}
> +};
> +
> +static bool
> +cmdVolRename(vshControl *ctl, const vshCmd *cmd)
> +{
> + virStoragePoolPtr origpool = NULL;
> + virStorageVolPtr origvol = NULL, newvol = NULL;
> + const char *origname = NULL;
> + const char *name = NULL;
> + char *origxml = NULL;
> + xmlChar *newxml = NULL;
> + bool ret = false;
> + unsigned int flags = 0;
> +
> + if (!(origvol = vshCommandOptVol(ctl, cmd, "vol", "pool", &origname)))
> + goto cleanup;
> +
> + origpool = virStoragePoolLookupByVolume(origvol);
> + if (!origpool) {
> + vshError(ctl, "%s", _("failed to get parent pool"));
> + goto cleanup;
> + }
> +
> + if (vshCommandOptStringReq(ctl, cmd, "newname", &name) < 0)
> + goto cleanup;
> +
> + origxml = virStorageVolGetXMLDesc(origvol, 0);
> + if (!origxml)
> + goto cleanup;
> +
> + newxml = vshMakeCloneXML(origxml, name);
> + if (!newxml) {
> + vshPrint(ctl, "%s", _("Failed to allocate XML buffer"));
> + goto cleanup;
> + }
> +
> + newvol = virStorageVolCreateXMLFrom(origpool, (char *) newxml, origvol, flags);
> +
> + if (newvol != NULL) {
> + vshPrint(ctl, _("Vol %s cloned from %s\n"),
> + virStorageVolGetName(newvol), virStorageVolGetName(origvol));
> + } else {
> + vshError(ctl, _("Failed to clone vol from %s"),
> + virStorageVolGetName(origvol));
> + goto cleanup;
> + }
> +
> + if (virStorageVolDelete(origvol, 0) == 0) {
Indention problem..
> + vshPrint(ctl, _("Vol %s deleted\n"), origname);
> + } else {
> + vshError(ctl, _("Failed to delete vol %s"), origname);
> + goto cleanup;
> + }
> +
> + ret = true;
> +
> +cleanup:
> + VIR_FREE(origxml);
> + xmlFree(newxml);
> + if (origvol)
> + virStorageVolFree(origvol);
> + if (newvol)
> + virStorageVolFree(newvol);
> + if (origpool)
> + virStoragePoolFree(origpool);
> + return ret;
> +}
> +
> +/*
> * "vol-clone" command
> */
> static const vshCmdInfo info_vol_clone[] = {
> @@ -1752,6 +1849,12 @@ cmdVolPath(vshControl *ctl, const vshCmd *cmd)
> }
>
> const vshCmdDef storageVolCmds[] = {
> + {.name = "vol-rename",
> + .handler = cmdVolRename,
> + .opts = opts_vol_rename,
> + .info = info_vol_rename,
> + .flags = 0
> + },
> {.name = "vol-clone",
> .handler = cmdVolClone,
> .opts = opts_vol_clone,
More information about the libvir-list
mailing list