Re: [PATCH] Extend libvirt-guests to shutdown only persistent VMs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux