From 6fb8e08e6f84ba3cce1c13c12adb09548ab2312f Mon Sep 17 00:00:00 2001 From: Evan Broder Date: Fri, 31 Oct 2008 09:47:29 -0400 Subject: [PATCH] Automatically startup sysvms if they're not running already svn path=/trunk/packages/invirt-xen-config/; revision=1457 --- debian/changelog | 6 ++++++ debian/invirt-xen-config.init | 47 +++++++++++++++++++++++++++++++++++------ 2 files changed, 47 insertions(+), 6 deletions(-) diff --git a/debian/changelog b/debian/changelog index 9ea54c4..d611c42 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +invirt-xen-config (0.0.11) unstable; urgency=low + + * Automatically startup sysvms if they're not running already + + -- Evan Broder Fri, 31 Oct 2008 09:47:15 -0400 + invirt-xen-config (0.0.10) unstable; urgency=low * Generate config files for sysvms diff --git a/debian/invirt-xen-config.init b/debian/invirt-xen-config.init index 007abb1..519829e 100755 --- a/debian/invirt-xen-config.init +++ b/debian/invirt-xen-config.init @@ -13,21 +13,56 @@ PACKAGE=invirt-xen-config NAME="$PACKAGE" DESC="Invirt Xen host" PARENTPACKAGE=xend -GEN_FILES=( - /etc/xen/xend-config.sxp.invirt - /etc/xen/sysvms/s_master - /etc/xen/sysvms/s_remote - /etc/xen/sysvms/s_console - ) +GEN_FILES=(/etc/xen/xend-config.sxp.invirt) +SYSVMS=(s_master s_remote s_console) +i=1 +for vm in "${SYSVMS[@]}"; do + GEN_FILES[$i] = "$vm" + i=$((i + 1) +done dpkg -s "$PACKAGE" >/dev/null 2>/dev/null || exit 0 . /lib/init/gen-files.sh . /lib/init/std-init.sh +start_sysvm() { + # Attempt to start a sysvm, but only if it's not running already + # somewhere on the cluster + + VM="$1" + DISK="/dev/xenvg/${VM}_hda" + + # Don't bother trying to start the VM if it's already running + if xm list "$1" >/dev/null 2>&1; then + return 1 + fi + + if lvchange -a n "$DISK" >/dev/null 2>&1 && lvchange -a ey "$DISK" >/dev/null 2>&1; then + # If we can lock on the VM's disk, then the VM isn't running + [ "$VERBOSE" != no ] && log_daemon_msg "Starting sysvm $VM" + xm create "sysvms/$VM" >/dev/null + [ "$VERBOSE" != no ] && log_end_msg $? + RET=0 + else + RET=1 + fi + + # Regardless of whether we could get the lock or not, the + # lvchange -a n probably disabled the LV somewhere; be sure we + # clean up + lvchange -a y "$DISK" >/dev/null 2>&1 + + return $RET +} + do_startup() { gen_files + for vm in "${SYSVMS[@]}"; do + start_sysvm "$vm" + done + echo 1 >/proc/sys/net/ipv4/ip_forward for i in all default; do echo 1 >/proc/sys/net/ipv4/conf/$i/rp_filter -- 1.7.9.5