#!/bin/bash
#
# sccl_start_node Startet einen Knoten des Script-Clusters
#
# Aufruf:
#
# sccl_start_node [-b|-B] [-r] [--cleanstart] [<node>]
#
# Alle Pakete, die in der Datei pakete eingetragen sind und fuer die der aktuelle
# Knoten als erstes aufgelistet ist, wird das jeweilige Paket gestartet.
#
# --cleanstart: /clusterlocks bereinigen und Pakete starten,
#               wenn "node.DISABLED" nicht gesetzt (nur lokal)
#
########################################################################################
#
. $(dirname $0)/globals.settings
#
unset SAVESTATEFLAG CLEANSTART backgroundflag 
while getopts bBI:er-:? op; do
  case "$op" in
   b) backgroundflag=1;;
   B) backgroundflag=2;;
   r) SAVESTATEFLAG=1;;
   I) export scclinitiated="$OPTARG";;
   -) case "$OPTARG" in
       cleanstart) CLEANSTART='--cleanstart';;
       *) echo "usage: $MYPRG [-b|-B] [-r] [--cleanstart] [<node>]"
          exit 1;;
      esac;;
   *) echo "usage: $MYPRG [-b|-B] [-r] [--cleanstart] [<node>]"
      exit 1;;
  esac
done
shift $(( $OPTIND - 1))
#
if [[ $# -gt 0 ]]; then
  callnode $1 "sccl_start_node.s3w?backgroundflag=${backgroundflag:+-B}&savestate=${SAVESTATEFLAG:+-r}&clean=$CLEANSTART&initiated=${scclinitiated:-$THISHOSTNAME}"
elif [[ "$backgroundflag" = "1" ]]; then
  callnode 127.0.0.1 "sccl_start_node.s3w?backgroundflag=-B&savestate=${SAVESTATEFLAG:+-r}&clean=$CLEANSTART&initiated=${scclinitiated:-$THISHOSTNAME}" || ./sccl_start_node &>/var/tmp/sccl_start_node_2.log &
elif [[ "$backgroundflag" = "2" ]]; then
  ./sccl_start_node_bg ${SAVESTATEFLAG:+-r} &>/var/tmp/sccl_start_node.log &
else
  if [[ -n "$CLEANSTART" ]]; then
    rm -f "$LOCKDIR"/*_lock "$LOCKDIR"/*_progress
  fi
  touch "$LOCKDIR/node._progress"
  [[ -f "$LOCKDIR/node.STOPPED" ]] && rm "$LOCKDIR/node.STOPPED"
  if [[ ! -f $PACKAGES ]]; then
    echo "Error: $PACKAGES not found" >&2
    exit 1
  fi
  unset SAVED
  if [[ -f "$LOCKDIR"/node.DISABLED ]]; then
    echo "Die Clusterdienste sollen nicht gestartet werden."
    exit 0
  elif [[ "$SAVESTATEFLAG" = 1 && -s "$LOCKDIR/savestate.LASTSTATE" ]]; then
    SAVED=" $(echo $(<"$LOCKDIR/savestate.LASTSTATE")) "
  fi
  if [[ -t 1 ]]; then
    for i in $(awk -v SAVED="$SAVED" '!/^#/ && (","$2"," ~ ",'$THISHOSTNAME'," || ","$2"," ~ ",'$THISFQDN'," || ($2 == "+" && SAVED ~ " "$1" ")) { print $1 }' $PACKAGES); do
      ./sccl_start $i
    done
  else
    for i in $(awk -v SAVED="$SAVED" '!/^#/ && (","$2"," ~ ",'$THISHOSTNAME'," || ","$2"," ~ ",'$THISFQDN'," || ($2 == "+" && SAVED ~ " "$1" ")) { print $1 }' $PACKAGES); do
      ./sccl_start_bg ${SAVESTATEFLAG:+--boot} $i THISNODE
    done
  fi
  [[ -f "$LOCKDIR/savestate.LASTSTATE" ]] && rm "$LOCKDIR/savestate.LASTSTATE"
  [[ -f "$LOCKDIR/node._progress" ]] && rm "$LOCKDIR/node._progress"
fi
