
On 05/18/2010 07:27 AM, Jiri Denemark wrote:
Version 2 changes: - fixes suggested by Eric - configurable ON_BOOT and ON_SHUTDOWN behavior inspired by Gerd
+++ b/daemon/libvirt-guests.init.in @@ -0,0 +1,295 @@ + +sysconfdir=@sysconfdir@ +localstatedir=@localstatedir@
Just in case @sysconfdir@ has spaces (if it has ', the user's hosed themselves anyway): sysconfdir='@sysconfdir@' localstatedir='@localstatedir@' But libvirtd.init.in does the same, so at this point, any cleanups for minor issues like that can be done across both scripts at once, as a separate patch.
+ +stop() { + # last stop was not followed by start + [ -f $LISTFILE ] && return 0 + + suspending=true + if [ "x$ON_SHUTDOWN" = xshutdown ]; then + suspending=false + if [ $SHUTDOWN_TIMEOUT -le 0 ]; then + echo $"Shutdown action requested but SHUTDOWN_TIMEOUT was not set" + RETVAL=6 + return + fi + fi + + : >$LISTFILE + for uri in $URIS; do + echo -n $"Running guests on $uri URI: " + list=$(list_guests $uri) + if [ $? -eq 0 ]; then + empty=true + for uuid in $list; do + $empty || printf ", " + echo -n $(guest_name $uri $uuid) + empty=false + done + if $empty; then + echo $"no running guests." + else + echo + echo $uri $list >>$LISTFILE + fi + fi + done + + while read uri list; do + if $suspending; then + echo $"Suspending guests on $uri URI..." + else + echo $"Shutting down guests on $uri URI..." + fi + + for guest in $list; do + if $suspending; then + suspend_guest $uri $guest + else + shutdown_guest $uri $guest + fi + done + done <$LISTFILE +}
This works as is, so need to change it. But I would have done something along these lines: how=suspend_guest if [ "x$ON_SHUTDOWN" = xshutdown ]; then how=shutdown_guest fi ... for guest in $list; do $how $uri $guest done to cut down on some of the logic.
+ shutdown) + ON_SHUTDOWN=shutdown + stop + ;;
If someone calls 'service libvirt-guests shutdown', but...
+# action taken on host shutdown +# - suspend all running guests are suspended using virsh managedsave +# - shutdown all running guests are asked to shutdown. Please be careful with +# this settings since there is no way to distinguish between a +# guest which is stuck or ignores shutdown requests and a guest +# which just needs a long time to shutdown. When setting +# ON_SHUTDOWN=shutdown, you must also set SHUTDOWN_TIMEOUT to a +# value suitable for your guests. +#ON_SHUTDOWN=suspend + +# number of seconds we're willing to wait for a guest to shut down +#SHUTDOWN_TIMEOUT=0
...left their config with the defaults, then the shutdown will fail because SHUTDOWN_TIMEOUT is still 0. I guess that makes sense, though. Are we sure that init scripts called during '/sbin/shutdown' are normally called with 'stop' rather than 'shutdown' argument? Looks nicer! ACK. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org