[libvirt] [PATCH] Move libvirt-guests init script and config to tools

Jiri Denemark jdenemar at redhat.com
Wed Aug 25 12:33:03 UTC 2010


Since libvirt-guests init script and its configuration do not require
libvirtd to be running/installed, it was a bad idea to put them into
daemon directory. libvirt.spec even includes these files in
libvirt-client subpackage, which may result in build failure for
client-only builds when the whole daemon directory is just skipped.
---
 daemon/Makefile.am            |   16 +--
 daemon/libvirt-guests.init.in |  341 -----------------------------------------
 daemon/libvirt-guests.sysconf |   24 ---
 tools/Makefile.am             |   41 +++++-
 tools/libvirt-guests.init.in  |  341 +++++++++++++++++++++++++++++++++++++++++
 tools/libvirt-guests.sysconf  |   24 +++
 6 files changed, 409 insertions(+), 378 deletions(-)
 delete mode 100644 daemon/libvirt-guests.init.in
 delete mode 100644 daemon/libvirt-guests.sysconf
 create mode 100644 tools/libvirt-guests.init.in
 create mode 100644 tools/libvirt-guests.sysconf

diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index dbf0ac3..53133d2 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -35,8 +35,6 @@ EXTRA_DIST =						\
 	libvirtd.uml.logrotate.in                       \
 	test_libvirtd.aug                               \
 	THREADING.txt					\
-	libvirt-guests.init.in				\
-	libvirt-guests.sysconf				\
 	libvirtd.pod.in					\
 	$(AVAHI_SOURCES)				\
 	$(DAEMON_SOURCES)
@@ -258,27 +256,21 @@ install-logrotate: $(LOGROTATE_CONFS)
 	$(INSTALL_DATA) libvirtd.uml.logrotate $(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd.uml
 
 if LIBVIRT_INIT_SCRIPT_RED_HAT
-install-init: libvirtd.init libvirt-guests.init
+install-init: libvirtd.init
 	mkdir -p $(DESTDIR)$(sysconfdir)/rc.d/init.d
 	$(INSTALL_SCRIPT) libvirtd.init \
 	  $(DESTDIR)$(sysconfdir)/rc.d/init.d/libvirtd
-	$(INSTALL_SCRIPT) libvirt-guests.init \
-	  $(DESTDIR)$(sysconfdir)/rc.d/init.d/libvirt-guests
 	mkdir -p $(DESTDIR)$(sysconfdir)/sysconfig
 	$(INSTALL_SCRIPT) $(srcdir)/libvirtd.sysconf \
 	  $(DESTDIR)$(sysconfdir)/sysconfig/libvirtd
-	$(INSTALL_SCRIPT) $(srcdir)/libvirt-guests.sysconf \
-	  $(DESTDIR)$(sysconfdir)/sysconfig/libvirt-guests
 
 uninstall-init:
 	rm -f $(DESTDIR)$(sysconfdir)/rc.d/init.d/libvirtd \
-		$(DESTDIR)$(sysconfdir)/sysconfig/libvirtd \
-		$(DESTDIR)$(sysconfdir)/rc.d/init.d/libvirt-guests \
-		$(DESTDIR)$(sysconfdir)/sysconfig/libvirt-guests
+		$(DESTDIR)$(sysconfdir)/sysconfig/libvirtd
 
-BUILT_SOURCES += libvirtd.init libvirt-guests.init
+BUILT_SOURCES += libvirtd.init
 
-%.init: %.init.in $(top_builddir)/config.status
+libvirtd.init: libvirtd.init.in $(top_builddir)/config.status
 	$(AM_V_GEN)sed					\
 	    -e s!\@localstatedir\@!@localstatedir@!g	\
 	    -e s!\@sbindir\@!@sbindir@!g		\
diff --git a/daemon/libvirt-guests.init.in b/daemon/libvirt-guests.init.in
deleted file mode 100644
index 993c12d..0000000
--- a/daemon/libvirt-guests.init.in
+++ /dev/null
@@ -1,341 +0,0 @@
-#!/bin/sh
-
-# the following is the LSB init header
-#
-### BEGIN INIT INFO
-# Provides: libvirt-guests
-# Required-Start: libvirtd
-# Required-Stop: libvirtd
-# Default-Start: 3 4 5
-# Short-Description: suspend/resume libvirt guests on shutdown/boot
-# Description: This is a script for suspending active libvirt guests
-#              on shutdown and resuming them on next boot
-#              See http://libvirt.org
-### END INIT INFO
-
-# the following is chkconfig init header
-#
-# libvirt-guests:   suspend/resume libvirt guests on shutdown/boot
-#
-# chkconfig: 345 98 02
-# description:  This is a script for suspending active libvirt guests \
-#               on shutdown and resuming them on next boot \
-#               See http://libvirt.org
-#
-
-sysconfdir=@sysconfdir@
-localstatedir=@localstatedir@
-libvirtd=@sbindir@/libvirtd
-
-# Source function library.
-. "$sysconfdir"/rc.d/init.d/functions
-
-URIS=default
-ON_BOOT=start
-ON_SHUTDOWN=suspend
-SHUTDOWN_TIMEOUT=0
-
-test -f "$sysconfdir"/sysconfig/libvirt-guests && . "$sysconfdir"/sysconfig/libvirt-guests
-
-LISTFILE="$localstatedir"/lib/libvirt/libvirt-guests
-VAR_SUBSYS_LIBVIRT_GUESTS="$localstatedir"/lock/subsys/libvirt-guests
-
-RETVAL=0
-
-retval() {
-    "$@"
-    if [ $? -ne 0 ]; then
-        RETVAL=1
-        return 1
-    else
-        return 0
-    fi
-}
-
-run_virsh() {
-    uri=$1
-    shift
-
-    if [ "x$uri" = xdefault ]; then
-        conn=
-    else
-        conn="-c $uri"
-    fi
-
-    virsh $conn "$@" </dev/null
-}
-
-run_virsh_c() {
-    ( export LC_ALL=C; run_virsh "$@" )
-}
-
-list_guests() {
-    uri=$1
-
-    list=$(run_virsh_c $uri list)
-    if [ $? -ne 0 ]; then
-        RETVAL=1
-        return 1
-    fi
-
-    uuids=
-    for id in $(echo "$list" | awk 'NR > 2 {print $1}'); do
-        uuid=$(run_virsh_c $uri dominfo $id | awk '/^UUID:/{print $2}')
-        if [ -z "$uuid" ]; then
-            RETVAL=1
-            return 1
-        fi
-        uuids="$uuids $uuid"
-    done
-
-    echo $uuids
-}
-
-guest_name() {
-    uri=$1
-    uuid=$2
-
-    name=$(run_virsh_c $uri dominfo $uuid 2>/dev/null | \
-           awk '/^Name:/{print $2}')
-    [ -n "$name" ] || name=$uuid
-
-    echo "$name"
-}
-
-guest_is_on() {
-    uri=$1
-    uuid=$2
-
-    guest_running=false
-    info=$(run_virsh_c $uri dominfo $uuid)
-    if [ $? -ne 0 ]; then
-        RETVAL=1
-        return 1
-    fi
-
-    id=$(echo "$info" | awk '/^Id:/{print $2}')
-
-    [ -n "$id" ] && [ "x$id" != x- ] && guest_running=true
-    return 0
-}
-
-started() {
-    touch "$VAR_SUBSYS_LIBVIRT_GUESTS"
-}
-
-start() {
-    [ -f "$LISTFILE" ] || { started; return 0; }
-
-    if [ "x$ON_BOOT" != xstart ]; then
-        echo $"libvirt-guests is configured not to start any guests on boot"
-        rm -f "$LISTFILE"
-        started
-        return 0
-    fi
-
-    while read uri list; do
-        configured=false
-        for confuri in $URIS; do
-            if [ $confuri = $uri ]; then
-                configured=true
-                break
-            fi
-        done
-        if ! $configured; then
-            echo $"Ignoring guests on $uri URI"
-            continue
-        fi
-
-        echo $"Resuming guests on $uri URI..."
-        for guest in $list; do
-            name=$(guest_name $uri $guest)
-            echo -n $"Resuming guest $name: "
-            if guest_is_on $uri $guest; then
-                if $guest_running; then
-                    echo $"already active"
-                else
-                    retval run_virsh $uri start "$name" >/dev/null && \
-                    echo $"done"
-                fi
-            fi
-        done
-    done <"$LISTFILE"
-
-    rm -f "$LISTFILE"
-    started
-}
-
-suspend_guest()
-{
-    uri=$1
-    guest=$2
-
-    name=$(guest_name $uri $guest)
-    label=$"Suspending $name: "
-    echo -n "$label"
-    run_virsh $uri managedsave $guest >/dev/null &
-    virsh_pid=$!
-    while true; do
-        sleep 1
-        kill -0 $virsh_pid >&/dev/null || break
-        progress=$(run_virsh_c $uri domjobinfo $guest 2>/dev/null | \
-                   awk '/^Data processed:/{print $3, $4}')
-        if [ -n "$progress" ]; then
-            printf '\r%s%12s ' "$label" "$progress"
-        else
-            printf '\r%s%-12s ' "$label" "..."
-        fi
-    done
-    retval wait $virsh_pid && printf '\r%s%-12s\n' "$label" $"done"
-}
-
-shutdown_guest()
-{
-    uri=$1
-    guest=$2
-
-    name=$(guest_name $uri $guest)
-    label=$"Shutting down $name: "
-    echo -n "$label"
-    retval run_virsh $uri shutdown $guest >/dev/null || return
-    timeout=$SHUTDOWN_TIMEOUT
-    while [ $timeout -gt 0 ]; do
-        sleep 1
-        timeout=$[timeout - 1]
-        guest_is_on $uri $guest || return
-        $guest_running || break
-        printf '\r%s%-12d ' "$label" $timeout
-    done
-
-    if guest_is_on $uri $guest; then
-        if $guest_running; then
-            printf '\r%s%-12s\n' "$label" $"failed to shutdown in time"
-        else
-            printf '\r%s%-12s\n' "$label" $"done"
-        fi
-    fi
-}
-
-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: "
-
-        if [ "x$uri" = xdefault ] && [ ! -x "$libvirtd" ]; then
-            echo $"libvirtd not installed; skipping this URI."
-            continue
-        fi
-
-        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"
-
-    rm -f "$VAR_SUBSYS_LIBVIRT_GUESTS"
-}
-
-gueststatus() {
-    for uri in $URIS; do
-        echo "* $uri URI:"
-        retval run_virsh $uri list || echo
-    done
-}
-
-# rh_status
-# Display current status: whether saved state exists, and whether start
-# has been executed.  We cannot use status() from the functions library,
-# since there is no external daemon process matching this init script.
-rh_status() {
-    if [ -f "$LISTFILE" ]; then
-        echo $"stopped, with saved guests"
-        RETVAL=3
-    else
-        if [ -f "$VAR_SUBSYS_LIBVIRT_GUESTS" ]; then
-            echo $"started"
-        else
-            echo $"stopped, with no saved guests"
-        fi
-        RETVAL=0
-    fi
-}
-
-# usage [val]
-# Display usage string, then exit with VAL (defaults to 2).
-usage() {
-    echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|gueststatus|shutdown}"
-    exit ${1-2}
-}
-
-# See how we were called.
-if test $# != 1; then
-    usage
-fi
-case "$1" in
-    --help)
-        usage 0
-        ;;
-    start|stop|gueststatus)
-        $1
-        ;;
-    restart)
-        stop && start
-        ;;
-    condrestart|try-restart)
-        [ -f "$VAR_SUBSYS_LIBVIRT_GUESTS" ] && stop && start
-        ;;
-    reload|force-reload)
-        # Nothing to do; we reread configuration on each invocation
-        ;;
-    status)
-        rh_status
-        ;;
-    shutdown)
-        ON_SHUTDOWN=shutdown
-        stop
-        ;;
-    *)
-        usage
-        ;;
-esac
-exit $RETVAL
diff --git a/daemon/libvirt-guests.sysconf b/daemon/libvirt-guests.sysconf
deleted file mode 100644
index cd58728..0000000
--- a/daemon/libvirt-guests.sysconf
+++ /dev/null
@@ -1,24 +0,0 @@
-# URIs to check for running guests
-# example: URIS='default xen:/// vbox+tcp://host/system lxc:///'
-#URIS=default
-
-# action taken on host boot
-# - start   all guests which were running on shutdown are started on boot
-#           regardless on their autostart settings
-# - ignore  libvirt-guests init script won't start any guest on boot, however,
-#           guests marked as autostart will still be automatically started by
-#           libvirtd
-#ON_BOOT=start
-
-# 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
diff --git a/tools/Makefile.am b/tools/Makefile.am
index fd05e8b..ac26cae 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -8,7 +8,13 @@ ICON_FILES = \
 	libvirt_win_icon_64x64.ico \
 	virsh_win_icon.rc
 
-EXTRA_DIST = $(ICON_FILES) virt-xml-validate.in virt-pki-validate.in virsh.pod
+EXTRA_DIST = \
+	$(ICON_FILES) 					\
+	virt-xml-validate.in 				\
+	virt-pki-validate.in 				\
+	virsh.pod					\
+	libvirt-guests.init.in				\
+	libvirt-guests.sysconf
 
 bin_SCRIPTS = virt-xml-validate virt-pki-validate
 bin_PROGRAMS = virsh
@@ -118,6 +124,39 @@ endif
 virsh.1: virsh.pod
 	$(AM_V_GEN)$(POD2MAN) $< $@
 
+install-data-local: install-init
+
+uninstall-local: uninstall-init
+
+if LIBVIRT_INIT_SCRIPT_RED_HAT
+install-init: libvirt-guests.init
+	mkdir -p $(DESTDIR)$(sysconfdir)/rc.d/init.d
+	$(INSTALL_SCRIPT) libvirt-guests.init \
+	  $(DESTDIR)$(sysconfdir)/rc.d/init.d/libvirt-guests
+	mkdir -p $(DESTDIR)$(sysconfdir)/sysconfig
+	$(INSTALL_SCRIPT) $(srcdir)/libvirt-guests.sysconf \
+	  $(DESTDIR)$(sysconfdir)/sysconfig/libvirt-guests
+
+uninstall-init:
+	rm -f $(DESTDIR)$(sysconfdir)/rc.d/init.d/libvirt-guests \
+	  $(DESTDIR)$(sysconfdir)/sysconfig/libvirt-guests
+
+BUILT_SOURCES += libvirt-guests.init
+
+libvirt-guests.init: libvirt-guests.init.in $(top_builddir)/config.status
+	$(AM_V_GEN)sed					\
+	    -e s!\@localstatedir\@!@localstatedir@!g	\
+	    -e s!\@sbindir\@!@sbindir@!g		\
+	    -e s!\@sysconfdir\@!@sysconfdir@!g		\
+	    < $< > $@-t &&				\
+	    chmod a+x $@-t &&				\
+	    mv $@-t $@
+else
+install-init:
+uninstall-init:
+libvirt-guests.init:
+endif # LIBVIRT_INIT_SCRIPT_RED_HAT
+
 
 CLEANFILES = $(bin_SCRIPTS) $(man1_MANS)
 
diff --git a/tools/libvirt-guests.init.in b/tools/libvirt-guests.init.in
new file mode 100644
index 0000000..993c12d
--- /dev/null
+++ b/tools/libvirt-guests.init.in
@@ -0,0 +1,341 @@
+#!/bin/sh
+
+# the following is the LSB init header
+#
+### BEGIN INIT INFO
+# Provides: libvirt-guests
+# Required-Start: libvirtd
+# Required-Stop: libvirtd
+# Default-Start: 3 4 5
+# Short-Description: suspend/resume libvirt guests on shutdown/boot
+# Description: This is a script for suspending active libvirt guests
+#              on shutdown and resuming them on next boot
+#              See http://libvirt.org
+### END INIT INFO
+
+# the following is chkconfig init header
+#
+# libvirt-guests:   suspend/resume libvirt guests on shutdown/boot
+#
+# chkconfig: 345 98 02
+# description:  This is a script for suspending active libvirt guests \
+#               on shutdown and resuming them on next boot \
+#               See http://libvirt.org
+#
+
+sysconfdir=@sysconfdir@
+localstatedir=@localstatedir@
+libvirtd=@sbindir@/libvirtd
+
+# Source function library.
+. "$sysconfdir"/rc.d/init.d/functions
+
+URIS=default
+ON_BOOT=start
+ON_SHUTDOWN=suspend
+SHUTDOWN_TIMEOUT=0
+
+test -f "$sysconfdir"/sysconfig/libvirt-guests && . "$sysconfdir"/sysconfig/libvirt-guests
+
+LISTFILE="$localstatedir"/lib/libvirt/libvirt-guests
+VAR_SUBSYS_LIBVIRT_GUESTS="$localstatedir"/lock/subsys/libvirt-guests
+
+RETVAL=0
+
+retval() {
+    "$@"
+    if [ $? -ne 0 ]; then
+        RETVAL=1
+        return 1
+    else
+        return 0
+    fi
+}
+
+run_virsh() {
+    uri=$1
+    shift
+
+    if [ "x$uri" = xdefault ]; then
+        conn=
+    else
+        conn="-c $uri"
+    fi
+
+    virsh $conn "$@" </dev/null
+}
+
+run_virsh_c() {
+    ( export LC_ALL=C; run_virsh "$@" )
+}
+
+list_guests() {
+    uri=$1
+
+    list=$(run_virsh_c $uri list)
+    if [ $? -ne 0 ]; then
+        RETVAL=1
+        return 1
+    fi
+
+    uuids=
+    for id in $(echo "$list" | awk 'NR > 2 {print $1}'); do
+        uuid=$(run_virsh_c $uri dominfo $id | awk '/^UUID:/{print $2}')
+        if [ -z "$uuid" ]; then
+            RETVAL=1
+            return 1
+        fi
+        uuids="$uuids $uuid"
+    done
+
+    echo $uuids
+}
+
+guest_name() {
+    uri=$1
+    uuid=$2
+
+    name=$(run_virsh_c $uri dominfo $uuid 2>/dev/null | \
+           awk '/^Name:/{print $2}')
+    [ -n "$name" ] || name=$uuid
+
+    echo "$name"
+}
+
+guest_is_on() {
+    uri=$1
+    uuid=$2
+
+    guest_running=false
+    info=$(run_virsh_c $uri dominfo $uuid)
+    if [ $? -ne 0 ]; then
+        RETVAL=1
+        return 1
+    fi
+
+    id=$(echo "$info" | awk '/^Id:/{print $2}')
+
+    [ -n "$id" ] && [ "x$id" != x- ] && guest_running=true
+    return 0
+}
+
+started() {
+    touch "$VAR_SUBSYS_LIBVIRT_GUESTS"
+}
+
+start() {
+    [ -f "$LISTFILE" ] || { started; return 0; }
+
+    if [ "x$ON_BOOT" != xstart ]; then
+        echo $"libvirt-guests is configured not to start any guests on boot"
+        rm -f "$LISTFILE"
+        started
+        return 0
+    fi
+
+    while read uri list; do
+        configured=false
+        for confuri in $URIS; do
+            if [ $confuri = $uri ]; then
+                configured=true
+                break
+            fi
+        done
+        if ! $configured; then
+            echo $"Ignoring guests on $uri URI"
+            continue
+        fi
+
+        echo $"Resuming guests on $uri URI..."
+        for guest in $list; do
+            name=$(guest_name $uri $guest)
+            echo -n $"Resuming guest $name: "
+            if guest_is_on $uri $guest; then
+                if $guest_running; then
+                    echo $"already active"
+                else
+                    retval run_virsh $uri start "$name" >/dev/null && \
+                    echo $"done"
+                fi
+            fi
+        done
+    done <"$LISTFILE"
+
+    rm -f "$LISTFILE"
+    started
+}
+
+suspend_guest()
+{
+    uri=$1
+    guest=$2
+
+    name=$(guest_name $uri $guest)
+    label=$"Suspending $name: "
+    echo -n "$label"
+    run_virsh $uri managedsave $guest >/dev/null &
+    virsh_pid=$!
+    while true; do
+        sleep 1
+        kill -0 $virsh_pid >&/dev/null || break
+        progress=$(run_virsh_c $uri domjobinfo $guest 2>/dev/null | \
+                   awk '/^Data processed:/{print $3, $4}')
+        if [ -n "$progress" ]; then
+            printf '\r%s%12s ' "$label" "$progress"
+        else
+            printf '\r%s%-12s ' "$label" "..."
+        fi
+    done
+    retval wait $virsh_pid && printf '\r%s%-12s\n' "$label" $"done"
+}
+
+shutdown_guest()
+{
+    uri=$1
+    guest=$2
+
+    name=$(guest_name $uri $guest)
+    label=$"Shutting down $name: "
+    echo -n "$label"
+    retval run_virsh $uri shutdown $guest >/dev/null || return
+    timeout=$SHUTDOWN_TIMEOUT
+    while [ $timeout -gt 0 ]; do
+        sleep 1
+        timeout=$[timeout - 1]
+        guest_is_on $uri $guest || return
+        $guest_running || break
+        printf '\r%s%-12d ' "$label" $timeout
+    done
+
+    if guest_is_on $uri $guest; then
+        if $guest_running; then
+            printf '\r%s%-12s\n' "$label" $"failed to shutdown in time"
+        else
+            printf '\r%s%-12s\n' "$label" $"done"
+        fi
+    fi
+}
+
+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: "
+
+        if [ "x$uri" = xdefault ] && [ ! -x "$libvirtd" ]; then
+            echo $"libvirtd not installed; skipping this URI."
+            continue
+        fi
+
+        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"
+
+    rm -f "$VAR_SUBSYS_LIBVIRT_GUESTS"
+}
+
+gueststatus() {
+    for uri in $URIS; do
+        echo "* $uri URI:"
+        retval run_virsh $uri list || echo
+    done
+}
+
+# rh_status
+# Display current status: whether saved state exists, and whether start
+# has been executed.  We cannot use status() from the functions library,
+# since there is no external daemon process matching this init script.
+rh_status() {
+    if [ -f "$LISTFILE" ]; then
+        echo $"stopped, with saved guests"
+        RETVAL=3
+    else
+        if [ -f "$VAR_SUBSYS_LIBVIRT_GUESTS" ]; then
+            echo $"started"
+        else
+            echo $"stopped, with no saved guests"
+        fi
+        RETVAL=0
+    fi
+}
+
+# usage [val]
+# Display usage string, then exit with VAL (defaults to 2).
+usage() {
+    echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|gueststatus|shutdown}"
+    exit ${1-2}
+}
+
+# See how we were called.
+if test $# != 1; then
+    usage
+fi
+case "$1" in
+    --help)
+        usage 0
+        ;;
+    start|stop|gueststatus)
+        $1
+        ;;
+    restart)
+        stop && start
+        ;;
+    condrestart|try-restart)
+        [ -f "$VAR_SUBSYS_LIBVIRT_GUESTS" ] && stop && start
+        ;;
+    reload|force-reload)
+        # Nothing to do; we reread configuration on each invocation
+        ;;
+    status)
+        rh_status
+        ;;
+    shutdown)
+        ON_SHUTDOWN=shutdown
+        stop
+        ;;
+    *)
+        usage
+        ;;
+esac
+exit $RETVAL
diff --git a/tools/libvirt-guests.sysconf b/tools/libvirt-guests.sysconf
new file mode 100644
index 0000000..cd58728
--- /dev/null
+++ b/tools/libvirt-guests.sysconf
@@ -0,0 +1,24 @@
+# URIs to check for running guests
+# example: URIS='default xen:/// vbox+tcp://host/system lxc:///'
+#URIS=default
+
+# action taken on host boot
+# - start   all guests which were running on shutdown are started on boot
+#           regardless on their autostart settings
+# - ignore  libvirt-guests init script won't start any guest on boot, however,
+#           guests marked as autostart will still be automatically started by
+#           libvirtd
+#ON_BOOT=start
+
+# 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
-- 
1.7.2.2




More information about the libvir-list mailing list