diff --git a/sources/consul/sysvinit.sh b/sources/consul/sysvinit.sh index 88eded3..2ccbb8d 100755 --- a/sources/consul/sysvinit.sh +++ b/sources/consul/sysvinit.sh @@ -31,6 +31,7 @@ lockfile="/var/lock/subsys/$prog" logfile="/var/log/$prog" conffile="/etc/consul.conf" confdir="/etc/consul.d" +membersfile="/var/lib/consul/server_members" # pull in sysconfig settings [ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog @@ -64,12 +65,42 @@ start() { [ $RETVAL -eq 0 ] && touch $lockfile + if [ -e $membersfile ]; then + echo -n $"Re-joining cluster: " + + ## allow time to launch + sleep 5 + + ## I think I want to iterate through every entry in $membersfile and + ## return success if any are successfully joined… + cat $membersfile | xargs $exec join &>> /dev/null + + RETVAL=$? + + if [ $RETVAL -eq 0 ]; then + success + + rm -f $membersfile + else + failure + fi + + echo + fi + return $RETVAL } stop() { echo -n $"Shutting down $prog: " + ## store current server members so we can re-join later. exclude ourselves. + our_ip=$( ip addr show dev eth0 | awk '/inet / { split($2, cidr, "/"); print cidr[1]; }' ) + consul members -status=alive -role=consul \ + | awk '{ split($2, addr, ":"); print addr[1] }' \ + | fgrep -v $our_ip \ + > $membersfile + ## graceful shutdown with leave $exec leave &> /dev/null