#!/bin/bash
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

# chkconfig: 35 99 10
# description: Cloud Agent

# WARNING: if this script is changed, then all other initscripts MUST BE changed to match it as well

. /etc/rc.d/init.d/functions

# set environment variables

SHORTNAME="$(basename $(readlink -f $0))"
PIDFILE=/var/run/"$SHORTNAME".pid
LOCKFILE=/var/lock/subsys/"$SHORTNAME"
LOGFILE=/var/log/cloudstack/ipallocator/ipallocator.log
PROGNAME="External IPAllocator"

unset OPTIONS
[ -r /etc/sysconfig/"$SHORTNAME" ] && source /etc/sysconfig/"$SHORTNAME"
DAEMONIZE=/usr/bin/cloud-daemonize
PROG=/usr/bin/cloud-external-ipallocator.py
OPTIONS=8083

start() {
        echo -n $"Starting $PROGNAME: "
	if hostname --fqdn >/dev/null 2>&1 ; then
		daemon --check=$SHORTNAME --pidfile=${PIDFILE} "$DAEMONIZE" \
			-n "$SHORTNAME" -p "$PIDFILE" -l "$LOGFILE" "$PROG" $OPTIONS
		RETVAL=$?
		echo
	else
		failure
		echo
		echo The host name does not resolve properly to an IP address.  Cannot start "$PROGNAME". > /dev/stderr
		RETVAL=9
	fi
	[ $RETVAL = 0 ] && touch ${LOCKFILE}
	return $RETVAL
}

stop() {
	echo -n $"Stopping $PROGNAME: "
	killproc -p ${PIDFILE} $SHORTNAME # -d 10 $SHORTNAME
	RETVAL=$?
	echo
	[ $RETVAL = 0 ] && rm -f ${LOCKFILE} ${PIDFILE}
}


# See how we were called.
case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  status)
        status -p ${PIDFILE} $SHORTNAME
	RETVAL=$?
	;;
  restart)
	stop
	sleep 3
	start
	;;
  condrestart)
	if status -p ${PIDFILE} $SHORTNAME >&/dev/null; then
		stop
		sleep 3
		start
	fi
	;;
  *)
	echo $"Usage: $SHORTNAME {start|stop|restart|condrestart|status|help}"
	RETVAL=3
esac

exit $RETVAL
