[PATCH 20/26] qemu: add config to control if auto-shutdown VMs are restored

Daniel P. Berrangé posted 26 patches 1 week, 5 days ago
[PATCH 20/26] qemu: add config to control if auto-shutdown VMs are restored
Posted by Daniel P. Berrangé 1 week, 5 days ago
If shutting down running VMs at host shutdown, it can be useful to
automatically start them again on next boot. This adds a config
parameter 'auto_shutdown_restore', which defaults to enabled, which
leverages the autostart once feature.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
 src/qemu/libvirtd_qemu.aug         | 1 +
 src/qemu/qemu.conf.in              | 4 ++++
 src/qemu/qemu_conf.c               | 3 +++
 src/qemu/qemu_conf.h               | 1 +
 src/qemu/qemu_driver.c             | 1 +
 src/qemu/test_libvirtd_qemu.aug.in | 1 +
 6 files changed, 11 insertions(+)

diff --git a/src/qemu/libvirtd_qemu.aug b/src/qemu/libvirtd_qemu.aug
index 9fa6398d8d..ee39da73b9 100644
--- a/src/qemu/libvirtd_qemu.aug
+++ b/src/qemu/libvirtd_qemu.aug
@@ -102,6 +102,7 @@ module Libvirtd_qemu =
                  | str_entry "auto_shutdown_try_shutdown"
                  | str_entry "auto_shutdown_poweroff"
                  | int_entry "auto_shutdown_wait"
+                 | bool_entry "auto_shutdown_restore"
                  | bool_entry "auto_save_bypass_cache"
 
    let process_entry = str_entry "hugetlbfs_mount"
diff --git a/src/qemu/qemu.conf.in b/src/qemu/qemu.conf.in
index d26ab4cb57..ace4b20a0c 100644
--- a/src/qemu/qemu.conf.in
+++ b/src/qemu/qemu.conf.in
@@ -681,6 +681,10 @@
 # when 'auto_shutdown_try_shutdown' is enabled
 #auto_shutdown_wait = 30
 
+# Whether VMs that are automatically shutdown are set to
+# automatically restore on next boot
+#auto_shutdown_restore = 1
+
 # When a domain is configured to be auto-saved on shutdown, enabling
 # this flag has the same effect as using the VIR_DOMAIN_SAVE_BYPASS_CACHE
 # flag with the virDomainManagedSave API.  That is, the system will
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index af09920869..458bcb43e6 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -317,6 +317,7 @@ virQEMUDriverConfig *virQEMUDriverConfigNew(bool privileged,
         cfg->autoShutdownTryShutdown = VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_ALL;
         cfg->autoShutdownPoweroff = VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_ALL;
     }
+    cfg->autoShutdownRestore = true;
 
     return g_steal_pointer(&cfg);
 }
@@ -695,6 +696,8 @@ virQEMUDriverConfigLoadSaveEntry(virQEMUDriverConfig *cfg,
     if (virConfGetValueInt(conf, "auto_shutdown_wait",
                            &cfg->autoShutdownWait) < 0)
         return -1;
+    if (virConfGetValueBool(conf, "auto_shutdown_restore", &cfg->autoShutdownRestore) < 0)
+        return -1;
     if (virConfGetValueBool(conf, "auto_save_bypass_cache",
                             &cfg->autoSaveBypassCache) < 0)
         return -1;
diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h
index 9818a8cbb5..24d7945efb 100644
--- a/src/qemu/qemu_conf.h
+++ b/src/qemu/qemu_conf.h
@@ -205,6 +205,7 @@ struct _virQEMUDriverConfig {
     int autoShutdownTryShutdown;
     int autoShutdownPoweroff;
     int autoShutdownWait;
+    bool autoShutdownRestore;
     bool autoSaveBypassCache;
 
     char *lockManagerName;
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 84bde503dd..fde6f92761 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -952,6 +952,7 @@ qemuStateStop(void)
         .poweroff = cfg->autoShutdownPoweroff,
         .waitShutdownSecs = cfg->autoShutdownWait,
         .saveBypassCache = cfg->autoSaveBypassCache,
+        .autoRestore = cfg->autoShutdownRestore,
     };
 
     virDomainDriverAutoShutdown(&ascfg);
diff --git a/src/qemu/test_libvirtd_qemu.aug.in b/src/qemu/test_libvirtd_qemu.aug.in
index 65d0c20fe1..922cb35db7 100644
--- a/src/qemu/test_libvirtd_qemu.aug.in
+++ b/src/qemu/test_libvirtd_qemu.aug.in
@@ -80,6 +80,7 @@ module Test_libvirtd_qemu =
 { "auto_shutdown_try_shutdown" = "all" }
 { "auto_shutdown_poweroff" = "all" }
 { "auto_shutdown_wait" = "30" }
+{ "auto_shutdown_restore" = "1" }
 { "auto_save_bypass_cache" = "0" }
 { "hugetlbfs_mount" = "/dev/hugepages" }
 { "bridge_helper" = "qemu-bridge-helper" }
-- 
2.47.1