Merge branch 'devel-2.5'
[ganeti-local] / doc / examples / ganeti.initd.in
index 9faba73..cd137bd 100644 (file)
 #!/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"
-NAME=ganeti-noded
-NODED=@PREFIX@/sbin/ganeti-noded
-MASTER=@PREFIX@/sbin/ganeti-master
-SCRIPTNAME=@SYSCONFDIR@/init.d/ganeti
 
-test -f $NODED || exit 0
+DAEMON_UTIL=@PKGLIBDIR@/daemon-util
+
+SCRIPTNAME="@SYSCONFDIR@/init.d/ganeti"
+
+test -f "$DAEMON_UTIL" || exit 0
 
 . /lib/lsb/init-functions
 
-check_config() {
-    for fname in \
-        "@LOCALSTATEDIR@/lib/ganeti/ssconf_node_pass" \
-        "@LOCALSTATEDIR@/lib/ganeti/server.pem"
-    do
-        if ! [ -f "$fname" ]; then
-            log_end_msg 0
-            log_warning_msg "Config $fname not there, will not run."
-            exit 0
-        fi
+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() {
+    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
 }
 
-master_action() {
-    log_action_begin_msg "ganeti-master"; $MASTER "$1"
-    RC=$?
-    case $RC in
-        0)
-            log_action_end_msg 0
-            ;;
-        11)
-            log_action_end_msg 0 "not master"
-            ;;
-        *)
-            log_action_end_msg 1 "exit code $RC"
-            ;;
-    esac
+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" "$NAME"
-        check_config
-        if start-stop-daemon --start --quiet --exec $NODED; then
-            log_end_msg 0
-        else
-            log_end_msg 1
-        fi
-        master_action start
-    ;;
+        log_daemon_msg "Starting $DESC" "$2"
+        start_all "$2"
+        ;;
     stop)
-        log_daemon_msg "Stopping $DESC" "$NAME"
-        if start-stop-daemon --stop --quiet --name $NAME; then
-            log_end_msg 0
-        else
-            log_end_msg 1
-        fi
-        master_action stop
-    ;;
+        log_daemon_msg "Stopping $DESC" "$2"
+        stop_all "$2"
+        ;;
     restart|force-reload)
-        log_daemon_msg "Reloading $DESC"
-        start-stop-daemon --stop --quiet --oknodo --retry 30 --name $NAME
-        check_config
-        start-stop-daemon --start --quiet --exec $NODED
-        log_end_msg $?
-
-        $MASTER stop
-        master_action start
-     ;;
+        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
-
-# vim: set sw=4 sts=4 et foldmethod=marker :