#!/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
