From: Peter Krempa <[email protected]>

Rework the code so that it'll be possible to easily extend it to set
other lifecycle actions in qemu.

Signed-off-by: Peter Krempa <[email protected]>
---
 src/qemu/qemu_driver.c | 55 ++++++++++++++++++++++++------------------
 1 file changed, 32 insertions(+), 23 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 71308770f6..c64e5bb4f5 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -19544,42 +19544,51 @@ qemuDomainModifyLifecycleActionLive(virDomainObj *vm,
                                     virDomainLifecycle type,
                                     virDomainLifecycleAction action)
 {
-    qemuMonitorActionReboot monReboot = QEMU_MONITOR_ACTION_REBOOT_KEEP;
+    qemuMonitorActionShutdown shutdown = QEMU_MONITOR_ACTION_SHUTDOWN_KEEP;
+    qemuMonitorActionReboot reboot = QEMU_MONITOR_ACTION_REBOOT_KEEP;
+    qemuMonitorActionWatchdog watchdog = QEMU_MONITOR_ACTION_WATCHDOG_KEEP;
+    qemuMonitorActionPanic panic = QEMU_MONITOR_ACTION_PANIC_KEEP;
     qemuDomainObjPrivate *priv = vm->privateData;
     int rc;

-    /* For now we only update 'reboot' action here as we want to keep the
-     * shutdown action as is (we're emulating the outcome anyways)) */
-    if (type != VIR_DOMAIN_LIFECYCLE_REBOOT ||
-        vm->def->onReboot == action)
-        return 0;
+    switch (type) {
+    case VIR_DOMAIN_LIFECYCLE_REBOOT:
+        if (vm->def->onReboot == action)
+            break;

+        switch (action) {
+        case VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY:
+            reboot = QEMU_MONITOR_ACTION_REBOOT_SHUTDOWN;
+            break;

-    switch (action) {
-    case VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY:
-        monReboot = QEMU_MONITOR_ACTION_REBOOT_SHUTDOWN;
-        break;
+        case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART:
+            reboot = QEMU_MONITOR_ACTION_REBOOT_RESET;
+            break;

-    case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART:
-        monReboot = QEMU_MONITOR_ACTION_REBOOT_RESET;
+        case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE:
+        case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME:
+        case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY:
+        case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART:
+        case VIR_DOMAIN_LIFECYCLE_ACTION_LAST:
+            break;
+        }
         break;

-    case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE:
-    case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME:
-    case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY:
-    case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART:
-    case VIR_DOMAIN_LIFECYCLE_ACTION_LAST:
-        return 0;
+    case VIR_DOMAIN_LIFECYCLE_POWEROFF:
+    case VIR_DOMAIN_LIFECYCLE_CRASH:
+    case VIR_DOMAIN_LIFECYCLE_LAST:
+        break;
     }

+    if (shutdown == QEMU_MONITOR_ACTION_SHUTDOWN_KEEP &&
+        reboot == QEMU_MONITOR_ACTION_REBOOT_KEEP &&
+        watchdog == QEMU_MONITOR_ACTION_WATCHDOG_KEEP &&
+        panic == QEMU_MONITOR_ACTION_PANIC_KEEP)
+        return 0;

     qemuDomainObjEnterMonitor(vm);

-    rc = qemuMonitorSetAction(priv->mon,
-                              QEMU_MONITOR_ACTION_SHUTDOWN_KEEP,
-                              monReboot,
-                              QEMU_MONITOR_ACTION_WATCHDOG_KEEP,
-                              QEMU_MONITOR_ACTION_PANIC_KEEP);
+    rc = qemuMonitorSetAction(priv->mon, shutdown, reboot, watchdog, panic);

     qemuDomainObjExitMonitor(vm);
     if (rc < 0)
-- 
2.55.0

Reply via email to