[libvirt] [PATCH 3/4] Wire up QEMU agent to reboot/shutdown APIs

Eric Blake eblake at redhat.com
Thu Jan 19 23:44:51 UTC 2012


On 01/17/2012 04:44 AM, Michal Privoznik wrote:
> This makes use of the QEMU guest agent to implement the
> virDomainShutdownFlags and virDomainReboot APIs. With
> no flags specified, it will prefer to use the agent, but
> fallback to ACPI. Explicit choice can be made by using
> a suitable flag
> 
> * src/qemu/qemu_driver.c: Wire up use of agent
> ---
>  src/qemu/qemu_driver.c |  107 ++++++++++++++++++++++++++++++++++++++---------
>  1 files changed, 86 insertions(+), 21 deletions(-)
> 

> @@ -1526,6 +1530,26 @@ static int qemuDomainShutdown(virDomainPtr dom) {
>          goto cleanup;
>      }
>  
> +    priv = vm->privateData;
> +
> +    if ((flags & VIR_DOMAIN_SHUTDOWN_GUEST_AGENT) ||
> +        (!(flags & VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN) &&
> +         priv->agent))
> +        useAgent = true;

Should we reject things if the user passes both flags?  Or if not,

> +
> +    if (useAgent) {
> +        if (priv->agentError) {
> +            qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                            _("QEMU guest agent is not available due to an error"));
> +            goto endjob;
> +        }
> +        if (!priv->agent) {
> +            qemuReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
> +                            _("QEMU guest agent is not configured"));
> +            goto endjob;
> +        }
> +    }

if the user passes both flags, but the agent had an error or is not
present, do we silently fall back to acpi?

> @@ -1575,22 +1610,54 @@ static int qemuDomainReboot(virDomainPtr dom, unsigned int flags) {
>  
>      priv = vm->privateData;
>  
> -    if (qemuCapsGet(priv->qemuCaps, QEMU_CAPS_MONITOR_JSON)) {
> -        if (!qemuCapsGet(priv->qemuCaps, QEMU_CAPS_NO_SHUTDOWN)) {
> +    if ((flags & VIR_DOMAIN_SHUTDOWN_GUEST_AGENT) ||
> +        (!(flags & VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN) &&
> +         priv->agent))
> +        useAgent = true;
> +
> +    if (useAgent) {
> +        if (priv->agentError) {
> +            qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                            _("QEMU guest agent is not available due to an error"));
> +            goto cleanup;
> +        }
> +        if (!priv->agent) {
> +            qemuReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
> +                            _("QEMU guest agent is not configured"));
> +            goto cleanup;
> +        }

Same questions.

> @@ -11853,6 +11917,7 @@ static virDriver qemuDriver = {
>      .domainSuspend = qemudDomainSuspend, /* 0.2.0 */
>      .domainResume = qemudDomainResume, /* 0.2.0 */
>      .domainShutdown = qemuDomainShutdown, /* 0.2.0 */
> +    .domainShutdownFlags = qemuDomainShutdownFlags, /* 0.9.7 */

0.9.10

-- 
Eric Blake   eblake at redhat.com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120119/948c6384/attachment-0001.sig>


More information about the libvir-list mailing list