# based on skeleton from Debian GNU/Linux
### BEGIN INIT INFO
# Provides: ganeti
-# Required-Start: $syslog $remote_fs xend
-# Required-Stop: $syslog $remote_fs xend
+# Required-Start: $syslog $remote_fs
+# Required-Stop: $syslog $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
-# Short-Description: Ganeti Xen Cluster Manager
-# Description: Ganeti Xen Cluster Manager
+# 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
+GANETIRUNDIR="@LOCALSTATEDIR@/run/ganeti"
+
+GANETI_DEFAULTS_FILE="@SYSCONFDIR@/default/ganeti"
+
+NODED="ganeti-noded"
+NODED_ARGS=""
+
+MASTERD="ganeti-masterd"
+MASTERD_ARGS=""
+
+CONFD="ganeti-confd"
+CONFD_ARGS=""
+
+RAPI="ganeti-rapi"
+RAPI_ARGS=""
+
+SCRIPTNAME="@SYSCONFDIR@/init.d/ganeti"
+
+test -f "@PREFIX@/sbin/$NODED" || exit 0
. /lib/lsb/init-functions
+if [ -s $GANETI_DEFAULTS_FILE ]; then
+ . $GANETI_DEFAULTS_FILE
+fi
+
check_config() {
for fname in \
- "@LOCALSTATEDIR@/lib/ganeti/ssconf_node_pass" \
"@LOCALSTATEDIR@/lib/ganeti/server.pem"
do
if ! [ -f "$fname" ]; then
done
}
-master_action() {
- log_action_begin_msg "ganeti-master"; $MASTER "$1"
- RC=$?
+check_exitcode() {
+ RC=$1
case $RC in
0)
log_action_end_msg 0
esac
}
+start_action() {
+ # called as start_action daemon-name
+ local daemon="$1"; shift
+ log_action_begin_msg "$daemon"
+ start-stop-daemon --start --quiet \
+ --pidfile "${GANETIRUNDIR}/${daemon}.pid" \
+ --startas "@PREFIX@/sbin/$daemon" \
+ --oknodo \
+ -- "$@"
+ check_exitcode $?
+}
+
+stop_action() {
+ # called as stop_action daemon-name
+ local daemon="$1"
+ log_action_begin_msg "$daemon"
+ start-stop-daemon --stop --quiet --oknodo \
+ --retry 30 --pidfile "${GANETIRUNDIR}/${daemon}.pid"
+ check_exitcode $?
+}
+
+maybe_do() {
+ requested="$1"; shift
+ action="$1"; shift
+ target="$1"
+ if [ -z "$requested" -o "$requested" = "$target" ]; then
+ $action "$@"
+ fi
+}
+
+if [ -n "$2" -a \
+ "$2" != "$NODED" -a \
+ "$2" != "$MASTERD" -a \
+ "$2" != "$RAPI" ]; then
+ log_failure_msg "Unknown daemon '$2' requested"
+ exit 1
+fi
+
case "$1" in
start)
- log_daemon_msg "Starting $DESC" "$NAME"
+ log_daemon_msg "Starting $DESC" "$2"
check_config
- if start-stop-daemon --start --quiet --exec $NODED; then
- log_end_msg 0
- else
- log_end_msg 1
- fi
- master_action start
- ;;
+ maybe_do "$2" start_action $NODED $NODED_ARGS
+ maybe_do "$2" start_action $MASTERD $MASTERD_ARGS
+ maybe_do "$2" start_action $CONFD $CONFD_ARGS
+ maybe_do "$2" start_action $RAPI $RAPI_ARGS
+ ;;
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"
+ maybe_do "$2" stop_action $RAPI
+ maybe_do "$2" stop_action $CONFD
+ maybe_do "$2" stop_action $MASTERD
+ maybe_do "$2" stop_action $NODED
+ ;;
restart|force-reload)
- log_daemon_msg "Reloading $DESC"
- start-stop-daemon --stop --quiet --oknodo --retry 30 --name $NAME
+ maybe_do "$2" stop_action $RAPI
+ maybe_do "$2" stop_action $CONFD
+ maybe_do "$2" stop_action $MASTERD
+ maybe_do "$2" stop_action $NODED
check_config
- start-stop-daemon --start --quiet --exec $NODED
- log_end_msg $?
-
- $MASTER stop
- master_action start
- ;;
+ maybe_do "$2" start_action $NODED $NODED_ARGS
+ maybe_do "$2" start_action $MASTERD $MASTERD_ARGS
+ maybe_do "$2" start_action $CONFD $CONFD_ARGS
+ maybe_do "$2" start_action $RAPI $RAPI_ARGS
+ ;;
*)
log_success_msg "Usage: $SCRIPTNAME {start|stop|force-reload|restart}"
exit 1
- ;;
+ ;;
esac
exit 0