#!/bin/bash
#
# ansible-tower
#
# chkconfig: - 20 80
# description: support init to manage tower and its related services

### BEGIN INIT INFO
# Required-Start: $local_fs $remote_fs $network $named
# Required-Stop: $local_fs $remote_fs $network
# Should-Start: distcache
# Should-Stop:
# Default-Start:
# Default-Stop:
# Short-Description: support init to manage tower and its related services
# Description: Ansible Tower provides an easy-to-use UI and dashboard, role-based access control and more for your Ansible initiative
### END INIT INFO

# Default configured services
if [ -e /etc/debian_version ]; then
    TOWER_CONFIG="/etc/default/ansible-tower"
else
    TOWER_CONFIG="/etc/sysconfig/ansible-tower"
fi

# Load default configuration
[ -e "${TOWER_CONFIG}" ] && . "${TOWER_CONFIG}"

service_action() {
    SERVICES=$TOWER_SERVICES

    # Should MongoDB be managed by this script?
    # We only manage MongoDB if the license uses it.
    tower-manage uses_mongo > /dev/null 2> /dev/null
    if [ $? == 0 ]; then
        SERVICES="$SERVICES mongod"
    fi

    for svc in ${SERVICES}; do
        service ${svc} $1
        this_return=$?
        if [ $this_return -gt $worst_return ]; then
            worst_return=$this_return
        fi
        # Allow supervisor time to cleanup child pids (ubuntu only)
        if [[ ${svc} == supervisor* && ${1} == stop && -e /etc/debian_version ]]; then
	        S_PID=$(pidof -x supervisord)
            echo "Waiting to allow supervisor time to cleanup ... pid ${S_PID}"
            if [ "${S_PID}" ]; then
                i=0
                while kill -0 "${S_PID}" 2> /dev/null; do
                    if [ $i = '60' ]; then
                        break;
                    else
                        if [ $i == '0' ]; then
                            echo -n " ... waiting"
                        else
                            echo -n "."
                        fi
                        i=$(($i+1))
                        sleep 1
                    fi
                done
            fi
        fi
    done
}

worst_return=0
case "$1" in
    start)
	echo "Starting Tower"
	service_action start
	;;
    stop)
	echo "Stopping Tower"
	service_action stop
	;;
    restart)
	echo "Restarting Tower"
	service_action stop
	service_action start
	;;
    status)
	echo "Showing Tower Status"
	service_action status
	;;
    *)
	echo "Usage: $0 {start|stop|restart|status}"
esac
exit $worst_return
