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(a)redhat.com +1-801-349-2682
Libvirt virtualization library
http://libvirt.org