#!/bin/bash
#
# sccl_start_package Startet ein Paket im Script-Cluster
#
# Aufruf:
#
# sccl_start_package [--force] [-x <extrapars>] <resource> [<pidsig>]
#
# Die Resource <resource> wird gestartet, nachdem alle Abhaengigkeiten
# erfuellt sind. -R: Das Paket soll als Untergeordnete Resource gestartet werden.
#
########################################################################################
#
#echo $0 $*
#
if [[ "$1" == "--force" ]]
 then
  FORCE="--force"
  shift
else
  FORCE=""
fi
#
#
if [[ "$1" = "-x" ]]
 then
  X="-x $2"
  shift 2
else
  X=""
fi
#
. `dirname $0`/globals.functions
#
if [[ ! -f $RESOURCES ]]
 then
  exit 1
fi
#
PIDSIG=`date '+%y%m%d'`$$
#
UPIDSIG=${2:-0}
#
set `grep '^'$1'[[:blank:]]' $RESOURCES`''
if [[ -z "$1" ]]
 then
  echo "Das Paket $1 ist in der $RESOURCES nicht konfiguriert!"
  exit 1
fi
#
KURZNAME=$1
shift
LANGNAME=$1
shift
if [[ "$1" = "MULTI" ]]
 then
  MULTIFLAG=1
  MULTI=--multi
  shift
else
  MULTIFLAG=0
fi
#
#
# Testen, ob die Resource schon auf diesem Knoten laeuft
#
if ./sccl_test_res_on_node $KURZNAME
 then
  echo "$KURZNAME ($LANGNAME) laeuft schon auf $THISHOSTNAME."
  if [[ $UPIDSIG != 0 ]]                              # Unterresource?
   then
    set_lockdat $KURZNAME $KURZNAME $UPIDSIG        # dann nur Lockdatei setzen
    exit 0
  else
    exit 1
  fi
fi
#
# Laeuft noch nicht, dann ggf. starten
#
if [[ $MULTIFLAG = 0 ]]                               # darf nicht mehreren Knoten laufen?
 then
  if AKTNODE=`./sccl_get_aktnode $KURZNAME`         # aktuellen Knoten
   then
    echo "$KURZNAME ($LANGNAME) laeuft schon auf $AKTNODE."      # Fehler
    exit 3
  fi
fi
#
# Laeuft nicht im Cluster oder darf mehrfach gestartet werden
#
RES=""
#
while [[ $# -ge 1 ]]
 do
  if ! ./sccl_start_resource $FORCE $MULTI $X $1 $KURZNAME $PIDSIG    # einzelne Res. hochfahren
   then
    echo "Die Resource $1 zu $KURZNAME ($LANGNAME) ist nicht erfuellt."
    echo "Das Paket wird wieder beendet."
    ./sccl_stop_res_rev $KURZNAME $PIDSIG $RES       # Fehler, dann alle gestarteten
                                                     # Res. wieder stoppen
    exit 2
  fi
  RES="$RES $1"                                      # gestartete Res. merken
  shift
done
#
#
if [[ $UPIDSIG != 0 ]]
 then
  set_lockdat $KURZNAME $KURZNAME $UPIDSIG
else
  set_lockdat $KURZNAME $KURZNAME $PIDSIG
  echo $PAKETHEADER$LANGNAME >> $LOCKDIR/$KURZNAME$LOCKEXTENSION
fi
echo $PKGPIDSIGHEADER$PIDSIG >> $LOCKDIR/$KURZNAME$LOCKEXTENSION
echo $PKGRESHEADER`grep '^'$KURZNAME'[[:blank:]]' $RESOURCES` >> $LOCKDIR/$KURZNAME$LOCKEXTENSION
echo "$KURZNAME ($LANGNAME) ist auf dem Knoten $THISHOSTNAME gestartet."
