#!/bin/bash
#
# chkconfig: 345 70 8
# description: Loads and unloads the drbd module
#
# complete rewrite from scratch by Philipp Reisner in March and April 2001
# rewrite from scratch by Lars Ellenberg in June 2002
# Jan 2003: Moved all the logic into a program written in C.
#
### BEGIN INIT INFO
# Provides: drbd
# Required-Start: $network $syslog sshd
# Required-Stop:
# Default-Start:  3 5
# Default-Stop:   0 1 2 6
# Description:    Control drbd resources.
### END INIT INFO

DEFAULTFILE="/etc/default/drbd"
DRBDADM="/sbin/drbdadm"
PROC_DRBD="/proc/drbd"
MODPROBE="modprobe"
RMMOD="rmmod"
UDEV_TIMEOUT=10
ADD_MOD_PARAM=""

if [ -f $DEFAULTFILE ]; then
  . $DEFAULTFILE
fi

test -f $DRBDADM || exit 5

function assure_module_is_loaded
{
    [ -e "$PROC_DRBD" ] && return

    $MODPROBE -s drbd `$DRBDADM sh-mod-parms` $ADD_MOD_PARAM || { 
	echo "Can not load the drbd module."$'\n'; exit 20 
    }

    # make sure udev has time to create the device files
    RESOURCE=`$DRBDADM sh-resources` || exit 20
    RESOURCE=${RESOURCE%%\ *}
    DEVICE=`$DRBDADM sh-dev $RESOURCE` || exit 20

    while [ ! -e $DEVICE ] && [ $UDEV_TIMEOUT -gt 0 ] ; do
        sleep 1
	UDEV_TIMEOUT=$(( $UDEV_TIMEOUT-1 ))
    done
}

case "$1" in
    start)
	echo -n "Starting DRBD resources:    "
	assure_module_is_loaded
	RESOURCES=`$DRBDADM sh-resources` || exit 20	
	for I in $RESOURCES; do
	    if $DRBDADM adjust $I; then
	        echo -n "[$I]"
            else
                echo -e "\n Failed setting up $I"
		exit 20
	    fi
	done
	echo "."
	$DRBDADM wait_con_int # User interruptible version of wait_connect all
	;;
    stop)
	echo -n "Stopping all DRBD resources"
	$DRBDADM down all
	$RMMOD drbd
	echo "."
	;;
    status)
	if [ -e $PROC_DRBD ]; then
	    cat $PROC_DRBD
	    exit 0
	else
	    exit 3
	fi
	;;
    reload)
	echo -n "Reloading DRBD configuration"
	$DRBDADM adjust all
	echo "."
	;;
    restart|force-reload)
	echo -n "Restarting all DRBD resources"
	$DRBDADM down all
	$RMMOD drbd
	assure_module_is_loaded
	$DRBDADM up all
	echo "."
	;;
    *)
	echo "Usage: /etc/init.d/drbd {start|stop|status|reload|restart|force-reload}"
	exit 1
	;;
esac

exit 0
