#!/bin/bash
### BEGIN INIT INFO
# Provides:             f5-openstack-agent
# Required-Start:       $remote_fs $syslog
# Required-Stope:       $remote_fs $syslog
# Should-Start:         keystone neutron-server
# Should-Stop:          keystone neutron-server
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    f5-openstack-agent
# Description:          Provides the F5® OpenStack agent to configure BIG-IP®
### END INIT INFO

PROJECT_NAME=neutron
NAME=f5-oslbaasv2-agent
SERVICE=f5-oslbaasv2-agent
DAEMON="/usr/local/bin/${NAME}"
SCRIPTNAME="/etc/init.d/${NAME}"
NEUTRON_CONF="/etc/neutron/neutron.conf"
F5_AGENT_CONF="/etc/neutron/services/f5/f5-openstack-agent.ini"
STARTDAEMON_ARGS=""

[ -r "${F5_AGENT_CONF}" ] && DAEMON_ARGS="${DAEMON_ARGS} --config-file ${F5_AGENT_CONF}"
[ -r "${NEUTRON_CONF}" ] && DAEMON_ARGS="${DAEMON_ARGS} --config-file ${NEUTRON_CONF}"

PATH=/sbin:/user/sbin:/bin:/usr/bin

if [ -z "${SYSTEM_USER}" ]; then
    id ${PROJECT_NAME} >/dev/null 2>&1
    if [[ $? == 0 ]]; then
	SYSTEM_USER=${PROJECT_NAME}
	STARTDAEMON_ARGS=" --USER ${SYSTEM_USER}"
    else
	SYSTEM_USER=$(whoami)
    fi
    if [ "${SYSTEM_USER}" != "root" ]; then
	SYSTEM_GROUP=${SYSTEM_USER}
	STARTDAEMON_CHUID="--chuid ${SYSTEM_USER}"
    fi
fi

PIDFILE="/var/run/${PROJECT_NAME}/${NAME}.pid"
STARTDAEMON_ARGS=" --start --background --quiet $STARTDAEMON_CHUID --make-pidfile --pidfile ${PIDFILE}"
[ -x $DAEMON ] || exit 4

# If ran as root, create /var/lock/X, /var/run/X, /var/lib/X and /var/log/X as needed
for i in lock run log lib ; do
    mkdir -p /var/$i/${PROJECT_NAME}
    chown ${SYSTEM_USER} /var/$i/${PROJECT_NAME}
done

STARTDAEMON_ARGS=${STARTDAEMON_ARGS}" --chdir /var/lib/${PROJECT_NAME}"
. /lib/lsb/init-functions

LOCKFILE=/var/lock/neutron/${NAME}

# Manage log options: logfile and/or syslog, depending on user's choosing
LOGFILE="/var/log/${PROJECT_NAME}/${NAME}.log"
[ -r /etc/default/openstack ] && . /etc/default/openstack
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
[ "x$USE_SYSLOG" = "xyes" ] && DAEMON_ARGS="$DAEMON_ARGS --use-syslog"
[ "x$USE_LOGFILE" != "xno" ] && DAEMON_ARGS="$DAEMON_ARGS --log-file=$LOGFILE"

start() {
    echo -n $"Starting ${SERVICE}: "
    start_cmd="start-stop-daemon ${STARTDAEMON_ARGS} --exec ${DAEMON}  -- ${DAEMON_ARGS}"
    eval $start_cmd
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $LOCKFILE
    return $retval
}

stop() {
    echo -n $"Stopping ${SERVICE}: "
    start-stop-daemon --stop --quiet -p $PIDFILE --retry=TERM/30/KILL/5
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    stop
    start
}

reload() {
    restart
}

force_reload() {
    restart
}

rh_status() {
    if [ ! -f $PIDFILE ]; then
	return 3
    fi

    pid=$(cat $PIDFILE)
    if ! ps --no-headers p "$pid" | grep ${NAME} > /dev/null; then
	return 1
    fi

    return 0
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}


case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
        exit 2
esac
exit $?
