[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