ping > On 13. Nov 2023, at 11:22, Benjamin Taubmann <benjamin.taubmann@xxxxxxxxxxx> wrote: > > At the moment, there is no configuration option for the libvirt-guests > service that allows users to define that only persistent virtual machines > should be shutdown on host shutdown. > > Currently, the service config allows to choose between two ON_SHUTDOWN > actions that are executed on running virtual machines when the host goes > down: shutdown, suspend. > The ON_SHUTDOWN action should be orthogonal to the type of the virtual > machine. However, the existing implementation, does not suspend > transient virtual machines. > This is the matrix of actions that is executed on virtual machines based > on the configured ON_SHUTDOWN action and the type of a virtual machine. > > | persistent | transient > shutdown | shutdown | shutdown (what we want to change) > suspend | suspend | nothing > > Add config option PERSISTENT_ONLY to libvirt-guests config that allows > users to define if the ON_SHUTDOWN action should be applied only on > persistent virtual machines. PERSISTENT_ONLY can be set to true, false, > default. The default option will implement the already existing logic. > > Case 1: PERSISTENT_ONLY=default > | persistent | transient > shutdown | shutdown | shutdown > suspend | suspend | nothing > > Case 2: PERSISTENT_ONLY=true > | persistent | transient > shutdown | shutdown | nothing > suspend | suspend | nothing > > Case 3: PERSISTENT_ONLY=false > | persistent | transient > shutdown | shutdown | shutdown > suspend | suspend | suspend > > Change-Id: Ib03013d00b3ec60716287dad4743a038cf000763 > --- > tools/libvirt-guests.sh.in | 37 ++++++++++++++++++++++++++++++------- > 1 file changed, 30 insertions(+), 7 deletions(-) > > diff --git a/tools/libvirt-guests.sh.in b/tools/libvirt-guests.sh.in > index 344b54390a..c3c5954e17 100644 > --- a/tools/libvirt-guests.sh.in > +++ b/tools/libvirt-guests.sh.in > @@ -38,6 +38,7 @@ PARALLEL_SHUTDOWN=0 > START_DELAY=0 > BYPASS_CACHE=0 > SYNC_TIME=0 > +PERSISTENT_ONLY="default" > > test -f "$initconfdir"/libvirt-guests && > . "$initconfdir"/libvirt-guests > @@ -438,14 +439,16 @@ shutdown_guests_parallel() > # stop > # Shutdown or save guests on the configured uris > stop() { > - local suspending="true" > local uri= > + local action="suspend" > + local persistent_only="default" > + > > # last stop was not followed by start > [ -f "$LISTFILE" ] && return 0 > > if [ "x$ON_SHUTDOWN" = xshutdown ]; then > - suspending="false" > + action="shutdown" > if [ $SHUTDOWN_TIMEOUT -lt 0 ]; then > gettext "SHUTDOWN_TIMEOUT must be equal or greater than 0" > echo > @@ -454,6 +457,22 @@ stop() { > fi > fi > > + case "x$PERSISTENT_ONLY" in > + xtrue) > + persistent_only="true" > + ;; > + xfalse) > + persistent_only="false" > + ;; > + *) > + if [ "x$action" = xshutdown ]; then > + persistent_only="false" > + elif [ "x$action" = xsuspend ]; then > + persistent_only="true" > + fi > + ;; > + esac > + > : >"$LISTFILE" > set -f > for uri in $URIS; do > @@ -478,7 +497,7 @@ stop() { > echo > fi > > - if "$suspending"; then > + if "$persistent_only"; then > local transient="$(list_guests "$uri" "--transient")" > if [ $? -eq 0 ]; then > local empty="true" > @@ -486,7 +505,11 @@ stop() { > > for uuid in $transient; do > if "$empty"; then > - eval_gettext "Not suspending transient guests on URI: \$uri: " > + if [ "x$action" = xsuspend ]; then > + eval_gettext "Not suspending transient guests on URI: \$uri: " > + else > + eval_gettext "Not shutting down transient guests on URI: \$uri: " > + fi > empty="false" > else > printf ", " > @@ -520,19 +543,19 @@ stop() { > > if [ -s "$LISTFILE" ]; then > while read uri list; do > - if "$suspending"; then > + if [ "x$action" = xsuspend ]; then > eval_gettext "Suspending guests on \$uri URI..."; echo > else > eval_gettext "Shutting down guests on \$uri URI..."; echo > fi > > if [ "$PARALLEL_SHUTDOWN" -gt 1 ] && > - ! "$suspending"; then > + [ "x$action" = xshutdown ]; then > shutdown_guests_parallel "$uri" "$list" > else > local guest= > for guest in $list; do > - if "$suspending"; then > + if [ "x$action" = xsuspend ]; then > suspend_guest "$uri" "$guest" > else > shutdown_guest "$uri" "$guest" > -- > 2.39.2 > _______________________________________________ Devel mailing list -- devel@xxxxxxxxxxxxxxxxx To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxx