[libvirt] [PATCH v2 5/5] virsh: Expose new virDomainSuspendForDuration API
Daniel P. Berrange
berrange at redhat.com
Fri Jan 27 13:27:51 UTC 2012
On Thu, Jan 26, 2012 at 08:59:47PM +0100, Michal Privoznik wrote:
> under new command "suspend-duration"
> ---
> tools/virsh.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> tools/virsh.pod | 8 ++++++
> 2 files changed, 75 insertions(+), 0 deletions(-)
>
> diff --git a/tools/virsh.c b/tools/virsh.c
> index 74655c2..c00fe5d 100644
> --- a/tools/virsh.c
> +++ b/tools/virsh.c
> @@ -2170,6 +2170,71 @@ cmdSuspend(vshControl *ctl, const vshCmd *cmd)
> }
>
> /*
> + * "suspend-duration" command
> + */
> +static const vshCmdInfo info_suspend_duration[] = {
> + {"help", N_("suspend a domain for a given time duration")},
> + {"desc", N_("Suspend a running domain for a given time duration.")},
> + {NULL, NULL}
> +};
> +
> +static const vshCmdOptDef opts_suspend_duration[] = {
> + {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")},
> + /* {"duration", VSH_OT_INT, VSH_OFLAG_REQ, N_("duration in seconds")}, */
> + {"target", VSH_OT_STRING, VSH_OFLAG_REQ, N_("mem(Suspend-to-RAM), "
> + "disk(Suspend-to-Disk), "
> + "hybrid(Hybrid-Suspend)")},
> + {NULL, 0, 0, NULL}
> +};
> +
> +static bool
> +cmdSuspendDuration(vshControl *ctl, const vshCmd *cmd)
> +{
> + virDomainPtr dom;
> + const char *name;
> + bool ret = false;
> + const char *target = NULL;
> + unsigned int suspendTarget;
> +
> + if (!vshConnectionUsability(ctl, ctl->conn))
> + return false;
> +
> + if (!(dom = vshCommandOptDomain(ctl, cmd, &name)))
> + return false;
> +
> + if (vshCommandOptString(cmd, "target", &target) < 0) {
> + vshError(ctl, _("Invalig target argument"));
> + goto cleanup;
> + }
> +
> + if (STREQ(target, "mem"))
> + suspendTarget = VIR_NODE_SUSPEND_TARGET_MEM;
> + else if (STREQ(target, "disk"))
> + suspendTarget = VIR_NODE_SUSPEND_TARGET_DISK;
> + else if (STREQ(target, "hybrid"))
> + suspendTarget = VIR_NODE_SUSPEND_TARGET_HYBRID;
> + else {
> + vshError(ctl, "%s", _("Invalid target"));
> + goto cleanup;
> + }
> +
> + if (virDomainSuspendForDuration(dom, suspendTarget, 0, 0) < 0) {
> + vshError(ctl, _("Domain %s could not be suspended"),
> + virDomainGetName(dom));
> + goto cleanup;
> + }
> +
> + vshPrint(ctl, _("Domain %s successfully suspended"),
> + virDomainGetName(dom));
> +
> + ret = true;
> +
> +cleanup:
> + virDomainFree(dom);
> + return ret;
> +}
> +
> +/*
> * "create" command
> */
> static const vshCmdInfo info_create[] = {
> @@ -16070,6 +16135,8 @@ static const vshCmdDef domManagementCmds[] = {
> {"shutdown", cmdShutdown, opts_shutdown, info_shutdown, 0},
> {"start", cmdStart, opts_start, info_start, 0},
> {"suspend", cmdSuspend, opts_suspend, info_suspend, 0},
> + {"suspend-duration", cmdSuspendDuration,
> + opts_suspend_duration, info_suspend_duration, 0},
> {"ttyconsole", cmdTTYConsole, opts_ttyconsole, info_ttyconsole, 0},
> {"undefine", cmdUndefine, opts_undefine, info_undefine, 0},
> {"update-device", cmdUpdateDevice, opts_update_device,
> diff --git a/tools/virsh.pod b/tools/virsh.pod
> index 8599f66..dc6fd01 100644
> --- a/tools/virsh.pod
> +++ b/tools/virsh.pod
> @@ -1239,6 +1239,14 @@ Moves a domain out of the suspended state. This will allow a previously
> suspended domain to now be eligible for scheduling by the underlying
> hypervisor.
>
> +=item B<suspend-duration> I<domain-id> I<target>
> +
> +Suspend a running domain into one of these states (possible I<target>
> +values):
> + mem equivallent of S3 ACPI state
> + disk equivallent of S4 ACPI state
> + hybrid RAM is saved to disk but not powered off
As with the API, I think we need a different name prefix, like
domnodesuspend
or
dompmsuspend
ACK if we rename it in one of these ways or another suggestion
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list