#!/bin/sh

### BEGIN INIT INFO
# Provides:		lizardfs-master
# Required-Start:	$network $remote_fs
# Required-Stop:	$remote_fs
# Default-Start:	2 3 4 5
# Default-Stop:		0 1 6
# Short-Description:	Start lizardfs-master at boot time
# Description:		lizardfs-master provides metadata management for LizardFS.
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/mfsmaster
NAME=mfsmaster
DESC=lizardfs-master
DEFAULT_WORKING_USER=mfs
DEFAULT_WORKING_GROUP=mfs
DEFAULT_DATA_PATH=/var/lib/mfs
DEFAULT_CFG=/etc/mfs/mfsmaster.cfg

test -e $DAEMON || exit 0

# Include lizardfs-master defaults if available
. /lib/lsb/init-functions
LIZARDFSMASTER_ENABLE=false
LIZARDFSMASTER_CONFIG_FILE=
LIZARDFSMASTER_DEFAULTS_FILE=/etc/default/lizardfs-master
if [ -s "$LIZARDFSMASTER_DEFAULTS_FILE" ]; then
    . "$LIZARDFSMASTER_DEFAULTS_FILE"
    case "x$LIZARDFSMASTER_ENABLE" in
        xtrue) ;;
        xfalse)
	    log_warning_msg "lizardfs-master not enabled in \"$LIZARDFSMASTER_DEFAULTS_FILE\", exiting..."
	    exit 0
	    ;;
        *)
            log_failure_msg "value of LIZARDFSMASTER_ENABLE must be either 'true' or 'false';"
            log_failure_msg "not starting lizardfs-master."
            exit 1
            ;;
    esac
fi

set -e

if [ -n "$LIZARDFSMASTER_CONFIG_FILE" ]; then
	CFGFILE="$LIZARDFSMASTER_CONFIG_FILE"
else
	CFGFILE="$DEFAULT_CFG"
fi

get_config_value_from_CFGFILE()
{
		echo $(sed -e 's/[[:blank:]]*#.*$//' -n -e 's/^[[:blank:]]*'$1'[[:blank:]]*=[[:blank:]]*\(.*\)$/\1/p' $CFGFILE)
}

if [ -s "$CFGFILE" ]; then
	DATA_PATH=$(get_config_value_from_CFGFILE "DATA_PATH")
	WORKING_USER=$(get_config_value_from_CFGFILE "WORKING_USER")
	WORKING_GROUP=$(get_config_value_from_CFGFILE "WORKING_GROUP")
fi

: ${DATA_PATH:=$DEFAULT_DATA_PATH}
: ${WORKING_USER:=$DEFAULT_WORKING_USER}
: ${WORKING_GROUP:=$DEFAULT_WORKING_GROUP}

check_dirs()
{
	# check that the metadata dir exists
	if [ ! -d "$DATA_PATH" ]; then
		mkdir -p "$DATA_PATH"
	fi
	chmod 0755 "$DATA_PATH"
	chown -R $WORKING_USER:$WORKING_GROUP "$DATA_PATH"
}

case "$1" in
	start)
		check_dirs
		echo "Starting $DESC:"
		$DAEMON ${CFGFILE:+-c $CFGFILE} $DAEMON_OPTS start
		;;

	stop)
		echo "Stopping $DESC:"
		$DAEMON ${CFGFILE:+-c $CFGFILE} stop
		;;

	reload|force-reload)
		echo "Reloading $DESC:"
		$DAEMON ${CFGFILE:+-c $CFGFILE} reload
		;;

	restart)
		check_dirs
		echo "Restarting $DESC:"
		$DAEMON ${CFGFILE:+-c $CFGFILE} restart
		;;

	*)
		N=/etc/init.d/$NAME
		echo "Usage: $N {start|stop|restart|force-reload}" >&2
		exit 1
		;;
esac

exit 0
