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

whatami=cloud-external-ipallocator

# set environment variables

SHORTNAME="$whatami"
PIDFILE=/var/run/"$whatami".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: $whatami {start|stop|restart|condrestart|status|help}"
	RETVAL=3
esac

exit $RETVAL

