#!/bin/sh
### BEGIN INIT INFO
# Provides:          cobbler
# Required-Start:    $network $local_fs $remote_fs
# Required-Stop:     $network $local_fs $remote_fs
# Should-Start:      $named
# Should-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: network boot, install and update server
# Description:       Cobbler is a network install server. Cobbler supports PXE, virtualized
#                    installs, and reinstalling existing Linux machines. The last two modes use a
#                    helper tool, 'koan', that integrates with cobbler. Cobbler's advanced features
#                    include importing distributions from DVDs and rsync mirrors, kickstart
#                    templating, integrated yum mirroring, and built-in DHCP/DNS Management.
#                    Cobbler has a Python and XMLRPC API for integration with other applications.
#                    There is also a web interface.
### END INIT INFO

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin

DESC="OpenStack Compute API"
PROJECT_NAME=cobbler
NAME=cobbler
DAEMON=/usr/bin/cobblerd # Introduce the server's location here
SCRIPTNAME=/etc/init.d/${NAME}
SYSTEM_USER=root
SYSTEM_GROUP=root
PIDFILE=/var/run/${PROJECT_NAME}/${NAME}.pid
if [ "${SYSTEM_USER}" != "root" ] ; then
	STARTDAEMON_CHUID="--chuid ${SYSTEM_USER}:${SYSTEM_GROUP}"
fi
for i in run log ; do
	mkdir -p /var/$i/${PROJECT_NAME}
	chown ${SYSTEM_USER} /var/$i/${PROJECT_NAME}
done

# This defines init_is_upstart which we use later on (+ more...)
. /lib/lsb/init-functions

test -x $DAEMON || exit 0

# Include defaults if available
if [ -f /etc/default/$NAME ] ; then
	. /etc/default/$NAME
fi

do_start() {
	start-stop-daemon --start --quiet --background ${STARTDAEMON_CHUID} --make-pidfile --pidfile ${PIDFILE} --chdir /var/lib/${PROJECT_NAME} --startas $DAEMON \
		--test > /dev/null || return 1
	start-stop-daemon --start --quiet --background ${STARTDAEMON_CHUID} --make-pidfile --pidfile ${PIDFILE} --chdir /var/lib/${PROJECT_NAME} --startas $DAEMON \
		-- $DAEMON_ARGS || return 2
}

do_stop() {
	PID=`pgrep cobblerd`
	echo ${PID} >$PIDFILE
	start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE
	RETVAL=$?
	rm -f $PIDFILE
	return "$RETVAL"
}

reload_server() {
	PID=`pgrep cobblerd`
	echo ${PID} >$PIDFILE
	[ ! -f "$PIDFILE" ] && return 1
	pid=pidofproc $PIDFILE # This is the daemon's pid
	# Send a SIGHUP
	kill -1 $pid
	return $?
}

case "$1" in
start)
	init_is_upstart > /dev/null 2>&1 && exit 1
	log_daemon_msg "Starting $DESC" "$NAME"
	do_start
	case $? in
		0|1) log_end_msg 0 ;;
		2) log_end_msg 1 ;;
	esac
;;
stop)
	init_is_upstart > /dev/null 2>&1 && exit 0
	log_daemon_msg "Stopping $DESC" "$NAME"
	do_stop
	case $? in
		0|1) log_end_msg 0 ;;
		2) log_end_msg 1 ;;
	esac
;;
status)
	status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
;;
systemd-start)
	do_start
;;  
systemd-stop)
	do_stop
;;
reload)
	reload_server
;;
restart|force-reload)
	init_is_upstart > /dev/null 2>&1 && exit 1
	log_daemon_msg "Restarting $DESC" "$NAME"
	do_stop
	case $? in
	0|1)
		do_start
		case $? in
			0) log_end_msg 0 ;;
			1) log_end_msg 1 ;; # Old process is still running
			*) log_end_msg 1 ;; # Failed to start
		esac
	;;
	*) log_end_msg 1 ;; # Failed to stop
	esac
;;
*)
	echo "Usage: $SCRIPTNAME {start|stop|status|restart|reload|force-reload|systemd-start|systemd-stop}" >&2
	exit 3
;;
esac

exit 0
