#!/bin/bash
#
# sccl_dist_config
#
# Konfiguration von diesem Knoten auf alle anderen uebertragen
##############################################################
#
. $(dirname $0)/globals.settings
#
unset EXCLUDE MASTER NODE replace FORCE
OUTCMD='head -1'
while getopts drmn:x:f? op; do
  case "$op" in
   d) DELFLAG=1;;
   m) MASTER=1
      replace='?replace=--replace';;
   n) NODE="`echo $OPTARG | tr '[:upper:]' '[:lower:]'`";;
   f) FORCE=1;;
   x) EXCLUDE="$OPTARG";;
   r) replace='?replace=--replace';;
   *) echo "usage: $MYPRG [-d] [-r] [-m] [-f] [-x <excludenode>] [-n <onlynode>] [files ...]"
      exit 1
  esac
done
#
shift $(( $OPTIND - 1))
#
if [[ -n "$MASTER" && -z "$NODE" ]]; then
  echo "Schalter -m darf nur mit -n genutzt werden"
  exit 1
fi
#
if [[ $# -eq 0 && -z "$FORCE" ]] && ! ./sccl_check_config -C; then
  exit 1
fi
#
if [[ -f /etc/sccl/sccl.conf ]]; then
  #
  if [[ "$STARTSTOPDIR" != /etc/sccl/* ]]; then
    echo "STARTSTOPDIR ist nicht unter /etc/sccl und wird nicht verteilt."
    STARTSTOPDIR=''
  elif [[ ! -d "$STARTSTOPDIR" ]]; then
    STARTSTOPDIR=''
  fi
  if [[ ! -f "$PACKAGES" ]]; then
    PACKAGES=''
  fi
  if [[ ! -f "$RESOURCES" ]]; then
    RESOURCES=''
  fi
  if [[ -n "$MASTER" ]]; then
    MASTERDATA="/etc/sccl/capwd.dat /etc/sccl/certs.conf /etc/sccl/certs/private/${CLUSTER}-cakey.pem /etc/sccl/certs/serial"
  else
    MASTERDATA=''
  fi
  if getent group sccl | grep -q 'sccl:.*:.*:.'; then
    if [[ $(stat -c '%G' /etc/sccl/certs/private) != 'sccl' ]]; then
      chgrp sccl /etc/sccl/certs/private
      chmod g+rx /etc/sccl/certs/private
    fi
    if [[ $(stat -c '%G' $U2WKEY) != 'sccl' ]]; then
      chgrp sccl $U2WKEY
      chmod g+r $U2WKEY
    fi
  fi
  if [[ -n "${NODE:-$NODES}" ]]; then
    if [[ $# -gt 0 ]]; then
      FILES=`while [[ $# -gt 0 ]]; do echo $1 | grep '^/etc/sccl/'; shift; done`
    else
      FILES="/etc/sccl/sccl.conf /etc/sccl/adminpwd.dat /etc/sccl/localadminpwd.dat /etc/sccl/userpwd.dat $PACKAGES $RESOURCES $STARTSTOPDIR $MASTERDATA"
      chmod og+r $PACKAGES $RESOURCES &>/dev/null
    fi
    USFILES=$(sed "s| /etc/sccl/adminpwd.dat | |g;s| /etc/sccl/capwd.dat | |;s| /etc/sccl/certs.conf | |;s| /etc/sccl/certs/private/${CLUSTER}-cakey.pem | |;s| /etc/sccl/certs/serial | |" <<<" $FILES ")
    if [[ -n "$FILES" ]]; then
      for i in ${NODE:-$NODES}; do
        if [[ "$i" != "$THISHOSTNAME" && "$i" != "$THISFQDN" && "$i" != "$EXCLUDE" ]]; then
          if [[ -n "$DELFLAG" ]]; then
            callnode $i "sccl_dist_config.s2w?delfiles=$FILES"
          else
            if grep -q "[[:blank:]]$i[[:blank:]]" <<<" $SECONDARYNODES $UNSECURENODES "; then
              if [[ -n "$(echo $USFILES)" ]]; then
                tar cfz - --exclude='.*' $USFILES 2>/dev/null |\
                  httpget -Sf -Sa $U2WCA -Sc $U2WCERT -Sk $U2WKEY -u 'admin' -pf /etc/sccl/adminpwd.dat -m- -mf config.tgz -mn CFG -s $i:$U2WPORT "sccl_dist_config.s2w$replace"
              fi
            else
              tar cfz - --exclude='.*' $FILES 2>/dev/null |\
                httpget -Sf -Sa $U2WCA -Sc $U2WCERT -Sk $U2WKEY -u 'admin' -pf /etc/sccl/adminpwd.dat -m- -mf config.tgz -mn CFG -s $i:$U2WPORT "sccl_dist_config.s2w$replace"
            fi
          fi
        fi
      done
    else
      echo "No files to dist"
    fi
  else
    echo "Node nicht definiert."
  fi
else
  echo "Cluster nicht konfiguriert."
fi
