]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Introduce two new methods for triggering controlled shutdown/reboot
authorDaniel P. Berrange <berrange@redhat.com>
Wed, 28 Nov 2012 13:24:23 +0000 (13:24 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Fri, 30 Nov 2012 19:19:38 +0000 (19:19 +0000)
The virDomainShutdownFlags and virDomainReboot APIs allow the caller
to request the operation is implemented via either acpi button press
or a guest agent. For containers, a couple of other methods make
sense, a message to /dev/initctl, and direct kill(SIGTERM|HUP) of
the container init process.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
include/libvirt/libvirt.h.in
tools/virsh-domain.c

index bfeb0e2c38f7a51e2591a1d4da358605431835c7..a19f37ada187831c6593424466010ea1366df8c4 100644 (file)
@@ -1385,6 +1385,8 @@ typedef enum {
     VIR_DOMAIN_SHUTDOWN_DEFAULT        = 0,        /* hypervisor choice */
     VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN = (1 << 0), /* Send ACPI event */
     VIR_DOMAIN_SHUTDOWN_GUEST_AGENT    = (1 << 1), /* Use guest agent */
+    VIR_DOMAIN_SHUTDOWN_INITCTL        = (1 << 2), /* Use initctl */
+    VIR_DOMAIN_SHUTDOWN_SIGNAL         = (1 << 3), /* Send a signal */
 } virDomainShutdownFlagValues;
 
 int                     virDomainShutdown       (virDomainPtr domain);
@@ -1395,6 +1397,8 @@ typedef enum {
     VIR_DOMAIN_REBOOT_DEFAULT        = 0,        /* hypervisor choice */
     VIR_DOMAIN_REBOOT_ACPI_POWER_BTN = (1 << 0), /* Send ACPI event */
     VIR_DOMAIN_REBOOT_GUEST_AGENT    = (1 << 1), /* Use guest agent */
+    VIR_DOMAIN_REBOOT_INITCTL        = (1 << 2), /* Use initctl */
+    VIR_DOMAIN_REBOOT_SIGNAL         = (1 << 3), /* Send a signal */
 } virDomainRebootFlagValues;
 
 int                     virDomainReboot         (virDomainPtr domain,
index 921cc120f9d032531000d2e095d485c64e89a11b..a7ffd2b7eeabb7bb2e84b800f73995bf4e98813c 100644 (file)
@@ -4046,8 +4046,13 @@ cmdShutdown(vshControl *ctl, const vshCmd *cmd)
             flags |= VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN;
         } else if (STREQ(mode, "agent")) {
             flags |= VIR_DOMAIN_SHUTDOWN_GUEST_AGENT;
+        } else if (STREQ(mode, "initctl")) {
+            flags |= VIR_DOMAIN_SHUTDOWN_INITCTL;
+        } else if (STREQ(mode, "signal")) {
+            flags |= VIR_DOMAIN_SHUTDOWN_SIGNAL;
         } else {
-            vshError(ctl, _("Unknown mode %s value, expecting 'acpi' or 'agent'"), mode);
+            vshError(ctl, _("Unknown mode %s value, expecting "
+                            "'acpi', 'agent', 'initctl' or 'signal'"), mode);
             return false;
         }
     }
@@ -4104,8 +4109,13 @@ cmdReboot(vshControl *ctl, const vshCmd *cmd)
             flags |= VIR_DOMAIN_REBOOT_ACPI_POWER_BTN;
         } else if (STREQ(mode, "agent")) {
             flags |= VIR_DOMAIN_REBOOT_GUEST_AGENT;
+        } else if (STREQ(mode, "initctl")) {
+            flags |= VIR_DOMAIN_REBOOT_INITCTL;
+        } else if (STREQ(mode, "signal")) {
+            flags |= VIR_DOMAIN_REBOOT_SIGNAL;
         } else {
-            vshError(ctl, _("Unknown mode %s value, expecting 'acpi' or 'agent'"), mode);
+            vshError(ctl, _("Unknown mode %s value, expecting "
+                            "'acpi', 'agent', 'initctl' or 'signal'"), mode);
             return false;
         }
     }