#!/bin/sh
# ganeti node daemon starter script
# based on skeleton from Debian GNU/Linux
### BEGIN INIT INFO
# Provides:          ganeti
# Required-Start:    $syslog $remote_fs
# Required-Stop:     $syslog $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Ganeti Cluster Manager
# Description:       Ganeti Cluster Manager
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
DESC="Ganeti cluster"

DAEMON_UTIL=/usr/lib/ganeti/daemon-util

SCRIPTNAME="/etc/init.d/ganeti"

test -f "$DAEMON_UTIL" || exit 0

. /lib/lsb/init-functions

check_exitcode() {
    RC=$1

    if errmsg=$($DAEMON_UTIL check-exitcode $RC)
    then
        log_action_end_msg 0 "$errmsg"
    else
        log_action_end_msg 1 "$errmsg"
    fi
}

start_action() {
    # called as start_action daemon-name
    local daemon="$1"
    log_action_begin_msg "$daemon"
    $DAEMON_UTIL start "$@"
    check_exitcode $?
}

stop_action() {
    # called as stop_action daemon-name
    local daemon="$1"
    log_action_begin_msg "$daemon"
    $DAEMON_UTIL stop "$@"
    check_exitcode $?
}

maybe_do() {
    requested="$1"; shift
    action="$1"; shift
    target="$1"
    if [ -z "$requested" -o "$requested" = "$target" ]; then
        $action "$@"
    fi
}

start_all() {
    for fname in \
        "/var/lib/ganeti/ssconf_hypervisor"
    do
        if [ -f "$fname" ]; then
            log_end_msg 0
            log_warning_msg "Configuration not upgraded to 2.0, will not run."
            exit 1
        fi
    done

    if ! $DAEMON_UTIL check-config; then
        log_warning_msg "Incomplete configuration, will not run."
        exit 0
    fi

    for i in $($DAEMON_UTIL list-start-daemons); do
        maybe_do "$1" start_action $i
    done
}

stop_all() {
    for i in $($DAEMON_UTIL list-stop-daemons); do
        maybe_do "$1" stop_action $i
    done
}

if [ -n "$2" ] && ! errmsg=$($DAEMON_UTIL is-daemon-name "$2" 2>&1); then
    log_failure_msg "$errmsg"
    exit 1
fi

case "$1" in
    start)
        log_daemon_msg "Starting $DESC" "$2"
        start_all "$2"
        ;;
    stop)
        log_daemon_msg "Stopping $DESC" "$2"
        stop_all "$2"
        ;;
    restart|force-reload)
        log_daemon_msg "Restarting $DESC" "$2"
        stop_all "$2"
        start_all "$2"
        ;;
    *)
        log_success_msg "Usage: $SCRIPTNAME {start|stop|force-reload|restart}"
        exit 1
        ;;
esac

exit 0
