On Wed, Jan 08, 2025 at 19:42:49 +0000, Daniel P. Berrangé wrote:
When a domain is marked for autostart, it will be started on every
subsequent host OS boot. There may be times when it is desirable to
mark a domain to be autostarted, on the next boot only.
Thus we add virDomainSetAutostartOnce / virDomainGetAutostartOnce.
An alternative would have been to overload the existing
virDomainSetAutostart method, to accept values '1' or '2' for
the autostart flag. This was not done because it is expected
that language bindings will have mapped the current autostart
flag to a boolean, and thus turning it into an enum would create
a compatibility problem.
A further alternative would have been to create a new method
virDomainSetAutostartFlags, with a VIR_DOMAIN_AUTOSTART_ONCE
flag defined. This was not done because it is felt desirable
to clearly separate the two flags. Setting the "once" flag
should not interfere with existing autostart setting, whether
it is enabled or disabled currently.
The 'virsh autostart' command, however, is still overloaded
by just adding a --once flag, while current state is added
to 'virsh dominfo'.
No ability to filter by 'autostart once' status is added to
the domain list APIs. The most common use of autostart once
will be to automatically set it on host shutdown, and it be
cleared on host startup. Thus there would rarely be scenarios
in which a running app will need to filter on this new flag.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
include/libvirt/libvirt-domain.h | 4 ++
src/driver-hypervisor.h | 10 ++++
src/libvirt-domain.c | 87 ++++++++++++++++++++++++++++++++
src/libvirt_public.syms | 6 +++
src/remote/remote_driver.c | 2 +
src/remote/remote_protocol.x | 30 ++++++++++-
src/remote_protocol-structs | 12 +++++
src/rpc/gendispatch.pl | 4 +-
tools/virsh-domain-monitor.c | 5 ++
tools/virsh-domain.c | 39 ++++++++++----
10 files changed, 187 insertions(+), 12 deletions(-)
Don't forget to bump all the version tags to 11.1.0 ...
diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
index 7a3492d9d7..d01ac418d2 100644
--- a/src/libvirt_public.syms
+++ b/src/libvirt_public.syms
@@ -948,4 +948,10 @@ LIBVIRT_10.2.0 {
virDomainGraphicsReload;
} LIBVIRT_10.1.0;
+LIBVIRT_11.0.0 {
Especially this one.
+ global:
+ virDomainGetAutostartOnce;
+ virDomainSetAutostartOnce;
+} LIBVIRT_10.2.0;
+
# .... define new API here using predicted next version number ....
[...]
diff --git a/tools/virsh-domain-monitor.c
b/tools/virsh-domain-monitor.c
index 9ee9090c11..fd5cc80ec2 100644
--- a/tools/virsh-domain-monitor.c
+++ b/tools/virsh-domain-monitor.c
@@ -1236,6 +1236,11 @@ cmdDominfo(vshControl *ctl, const vshCmd *cmd)
vshPrint(ctl, "%-15s %s\n", _("Autostart:"),
autostart ? _("enable") : _("disable"));
}
+ /* Check and display whether the domain autostarts next boot or not */
+ if (!virDomainGetAutostartOnce(dom, &autostart)) {
+ vshPrint(ctl, "%-15s %s\n", _("Autostart Once:"),
+ autostart ? _("enable") : _("disable"));
+ }
I'd also suggest reseting the last stored error as spurious
'unsupported' errors can arise when communincating with old daemon.
has_managed_save = virDomainHasManagedSaveImage(dom, 0);
if (has_managed_save < 0)