qemuDomainModifyLifecycleActionLive: Prepare to handle other actions

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 <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa committed 2026-07-27 13:38:37 +02:00
1 parent 30a548c894
commit 79b6d701c7
1 file changed
+32 -23
+32 -23
View File
@@ -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;
case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART:
reboot = QEMU_MONITOR_ACTION_REBOOT_RESET;
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:
break;
}
break;
case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART:
monReboot = QEMU_MONITOR_ACTION_REBOOT_RESET;
case VIR_DOMAIN_LIFECYCLE_POWEROFF:
case VIR_DOMAIN_LIFECYCLE_CRASH:
case VIR_DOMAIN_LIFECYCLE_LAST:
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;
}
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)