#! /bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin NAME=cman DESC="cluster manager" test -x /sbin/cman_tool || exit 0 CLUSTERNAME="" NODENAME="" USE_CCS="yes" CLUSTER_JOIN_OPTIONS="" CLUSTER_JOIN_TIMEOUT=300 if [ -f /etc/default/cman ] ; then . /etc/default/cman fi [ "$CLUSTERNAME" ] && CLUSTERNAME_OPT="-c $CLUSTERNAME" [ "$NODENAME" ] || NODENAME=$(hostname -s) NODENAME_OPT="-n $NODENAME" set -e membership() { cman_tool status | grep "Membership state" | awk '{print $3}' } is_active() { membership=$(membership) [ "$membership" = "Cluster-Member" ] && return 0 ( echo "$membership" | grep -q "Transition" ) && return 0 return 1 } is_joining() { membership=$(membership) [ "$membership" = "Starting" ] && return 0 [ "$membership" = "New-Cluster?" ] && return 0 ( echo "$membership" | grep -q "Join" ) && return 0 return 1 } if [ "$USE_CSS" = "yes" ]; then output=$(ccs_test connect force 2>&1) || rt=$? if [ "$rt" ]; then echo "Can't connect to ccsd!" exit 1 fi descriptor=$(echo $output | sed -n -e 's,^.*or = \(.*\)$,\1,p') output=$(ccs_test get $descriptor /cluster/cman 2>&1) || rt=$? if [ "$rt" ]; then echo "Disabled, not a cman cluster!" exit 1 fi output=$(ccs_test disconnect $descriptor 2>&1) fi case "$1" in start) if is_active; then echo "Not starting $DESC: already part of cluster." exit 0 fi echo -n "Starting $DESC" is_joining || cman_tool join $CLUSTER_JOIN_OPTIONS $CLUSTERNAME_OPT $NODENAME_OPT if [ "$CLUSTER_JOIN_TIMEOUT" -lt 0 ]; then echo "." exit 0 fi time=0 while [ "$CLUSTER_JOIN_TIMEOUT" -eq 0 ] || [ "$time" -lt "$CLUSTER_JOIN_TIMEOUT" ]; do if is_active; then echo "." exit 0 elif is_joining; then sleep 1 time=$(($time + 1)) else echo ": not possible." exit 1 fi done ;; stop) echo -n "Stopping $DESC" cman_tool leave echo "." ;; remove) echo -n "Stopping $DESC, removing node from cluster" cman_tool leave remove echo "." ;; force-stop) echo -n "Stopping $DESC, force" cman_tool leave force echo "." ;; restart|force-reload) ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|remove|force-stop}" >&2 exit 1 ;; esac exit 0