#!/bin/bash
#
# sccl_restart stoppt und startet ein Paket im Script-Cluster
#
# Aufruf:
#
# sccl_restart [--simulate|--force|--clear] [--norst] <paketname>[,<paketname2>,...] [<node>]
#
# Das Paket <paketname> wird auf dem Knoten <node> gestartet, wenn angegeben,
# sonst auf dem lokalen Knoten
#
########################################################################################
#
. $(dirname $0)/globals.settings
#
unset FORCE CLEAR SCCLINITIGNORE SIMULATE CALLEXT
while getopts I:i:-:? op; do
  case "$op" in
   I) export scclinitiated="$OPTARG";;
   i) SCCLINITIGNORE="$OPTARG";;
   -) case "$OPTARG" in
       force)    FORCE='--force';;
       clear)    CLEAR='--clear';;
       simulate) SIMULATE='--simulate'
                 CALLEXT='_simulate';;
       norst) export SCCLNORST='--norst';;
       *)        echo "usage: $MYPRG [--simulate|--force|--clear] [--norst] [-i <initignore>] <packages> [<node>]"
                 exit 1;;
      esac;;
   ?) echo "usage: $MYPRG [--simulate|--force|--clear] [--norst] [-i <initignore>] <packages> [<node>]"
      exit 1;;
  esac
done
#
shift $(( $OPTIND - 1))
#
# ist [<node>] angegeben? wenn ja, dann sccl_restart auf $2 ausfuehren
if [[ $# -lt 1 || $# -gt 2 ]]; then
  echo "usage: $MYPRG [--simulate|--force|--clear] [--norst] [-i <initignore>] <paketname>[,<paketname2>,...] [<node>]"
  exit 1
fi
#
PACKS=$1
#
if [[ "$2" = "THISNODE" ]]; then
  trap '' 1 2 3 6
  export SCCLINITIGNORE="$SCCLINITIGNORE"
  unset STPACKS
  for i in $(sed -rn "s/^(${PACKS//,/|})[[:blank:]].*/\\1/p" $PACKAGES | tac); do
    export PACKAGE="$i"
    if [[ "$SCCLINITIGNORE" != "$i:$THISHOSTNAME" ]] && ./sccl_test_res $i; then
      if ./sccl_stop ${SIMULATE:-$FORCE} ${SCCLINITIGNORE:+-i $SCCLINITIGNORE} $i THISNODE; then
        STPACKS="$STPACKS${STPACKS:+,}$i"
      fi
    fi
  done
  if [[ -n "$STPACKS" ]]; then
    sleep 3
  fi
  for i in $(sed -rn "s/^(${STPACKS//,/|})[[:blank:]].*/\\1/p" $PACKAGES); do
    export PACKAGE="$i"
    ./sccl_start_bg ${SIMULATE:-$FORCE} $i
  done
elif [[ -n "$2" ]]; then
  NODE=$(tr '[:upper:]' '[:lower:]' <<<$2)
  callnode ${NODE:-$THISHOSTNAME} "sccl_restart$CALLEXT.s3w?force=$FORCE&norst=$SCCLNORST&clear=$CLEAR&paket=$1&initignore=$SCCLINITIGNORE&initiated=${scclinitiated:-$THISHOSTNAME}"
elif NODE=`sccl_get_actnode $1`; then
  if [[ $NODE == *" "* ]]; then
    echo "Das Paket $1 laeuft mehrfach im Cluster, der Knoten muss angegeben werden."
    exit 1
  fi
  callnode $NODE "sccl_restart$CALLEXT.s3w?force=$FORCE&norst=$SCCLNORST&clear=$CLEAR&paket=$1&initignore=$SCCLINITIGNORE&initiated=${scclinitiated:-$THISHOSTNAME}"
else
  echo "Das Paket $1 ist im Cluster nicht aktiv."
  exit 1
fi
