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