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@xxxxxxxxxx> > --- > 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)