
#!/bin/sh
# File	: noc_dns-hosts.sh
# By	: Maarten.deBoer@Atos.net
# Subject	: Script to update cDOT DNS entries
#(0.2)	: Added $1 & $2
#(0.3)	: From cdot_upd_ontap-dns.sh
#(0.4)	: Check 1st, then modify
#(0.5),240219	: From noc_dns-hosts_update.sh
#(0.6),240219	: Add --remove
#(0.7),240228	: Add HOSTSDIR
PGM=`basename $0|cut -d\. -f1`
VER="0.6"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
SSH="/usr/bin/ssh -n"
CSV="/tmp/${PGM}.csv"

HOSTSDIR="${HOME}/data/etc"

DO_UPD=""
DO_RPT=""
MAIL=""
MAILTO="maarten.deboer@atos.net"
DO_DELETE=""

CLUSTER="nlnaf102"
VSERVER="nlnafsmss12"

# usage.func
#
USAGE()
{
  echo "Usage: ${PGM} [<options>]"
  echo "  Version: ${VER}"
  echo "  options       :"
  echo "    -c          : Clustername (${CLUSTER})"
  echo "    -s          : Svm/vserver(filter) (${SFILTER})"
  echo "    -u|--upd    : Update"
  echo "    -r|--rpt    : Report"
  echo "    --delete    : DELETE"
  echo "    -m|--mail   : send Mail"
  echo "    -h|--help   : this help"
  echo "    -V          : Version"
  echo "    -x          : set -x"
  echo "    --mailto    : set MAILTO (${MAILTO})"
}
if [ "${RCRFILE}" != "" ] && [ -f ${RCFILE} ]; then
  echo "  RCFILE (${RCFILE}) found. Using it"
  . ${RCFILE}
fi  # RCFILE
while [ $# -gt 0 ]
  do
  case $1 in
    -c) CLUSTER="${2}"; shift ;;
    -s) VSERVER="${2}"; shift ;;
    --mailto) MAILTO="${2}"; MAIL=1 ; shift ;;
    --delete) DO_DELETE=1 ;;
    -u|--upd) DO_UPD=1 ;;
    -r|--rpt) DO_RPT=1 ;MAIL=1 ;;
    -h | --help) USAGE; exit 1 ;;
    -V) echo "${PGM}: v${VER}"; exit 2 ;;
    -x)  set -x ;;
    *)  echo "Option $1 not known."; USAGE; exit 1 ;;
  esac
    shift
done

HOSTS="${HOSTSDIR}/netapp-ontap_${VSERVER}.hosts"

echo "`date` ${PGM} v${VER} started."|tee -a ${LOG}
echo "  CSV=${CSV}"
echo "  DO_RPT=${DO_RPT}"
echo "  DO_UPD=${DO_UPD}"
echo "  CLUSTER=${CLUSTER}"
echo "  VSERVER=${VSERVER}"
echo "  HOSTS=${HOSTS}"
echo "  MAIL=${MAIL}"
echo "  MAILTO=${MAILTO}"
sleep 1

touch ${TMP}
echo "# vserver;address;hostname;aliases;" > ${CSV} 

if [ ${DO_UPD} ] || [ ${DO_DELETE} ]; then
  if [ ! -f ${HOSTS} ]; then
    echo "  HOSTS-file (${HOSTS} NOT found. Will do list only ..."|tee -a ${LOG}
    sleep 1
    DO_RPT=1
  else
    cat ${HOSTS} |grep -v ^#|while read LINE
    do
#  echo "${LINE}"
      echo ""
      IP_ADDR=`echo ${LINE}|awk '{print $1}'`
      HOST_NAME=`echo ${LINE}|awk '{print $2}'`

      if [ "${IP_ADDR}" != "" ] && [ "${HOST_NAME}" != "" ]; then
        echo "  IP_ADDR=${IP_ADDR} HOST_NAME=${HOST_NAME} (CLUSTER=${CLUSTER} VSERVER=${VSERVER})"
        
        if [ ${DO_UPD} ]; then
#          VSERVER_HOSTNAME=`${SSH} ${CLUSTER} "vserver services dns hosts show -vserver ${VSERVER} -hostname ${HOST_NAME}"| grep "${HOST_NAME}"`
          HOST_IP_ADDR=`${SSH} ${CLUSTER} "vserver services dns hosts show -vserver ${VSERVER} -address ${IP_ADDR}"| grep "${IP_ADDR}"`
#echo "VSERVER_HOSTNAME=${VSERVER_HOSTNAME}"

          if [ "${HOST_IP_ADDR}" = "" ]; then
            ${SSH} ${CLUSTER} "vserver services dns hosts create -vserver ${VSERVER} -address ${IP_ADDR} -hostname ${HOST_NAME}"
          else
            ${SSH} ${CLUSTER} "vserver services dns hosts modify -vserver ${VSERVER} -address ${IP_ADDR} -hostname ${HOST_NAME}"
          fi  # VSERVER_HOSTNAME}" = ""
        fi  # DO_UPD
        if [ ${DO_DELETE} ]; then
          ${SSH} ${CLUSTER} "vserver services dns hosts delete -vserver ${VSERVER} -address ${IP_ADDR} -hostname ${HOST_NAME}"
          EC=${?}
          echo "  Deleted (EC=${EC}) : ${IP_ADDR} ${HOST_NAME}"|tee -a ${LOG}
        fi  # DO_DELETE
      fi  # &&
    done  # LINE
  fi  # -f ${HOSTS}
fi  # DO_UPD

${SSH} ${CLUSTER} "vserver services dns hosts show -vserver ${VSERVER} -field vserver,address,hostname,alias"

if [ ${DO_RPT} ]; then
  ${SSH} ${CLUSTER} "set -showseparator \";\" ; vserver services dns hosts show -vserver ${VSERVER} -field vserver,address,hostname,alias" | grep "${VSERVER}">> ${TMP}
fi  # DO_RPT

if [ ${MAIL} ] && [ "${MAILTO}" != "" ]; then
  cat ${TMP} >> ${CSV}
  date | mailx -a ${CSV} -s ":${HOSTNAME}: DNS hosts info [${PGM} v${VER}]" ${MAILTO} 
  echo "  Mailed report (${CSV}) to ${MAILTO}" |tee -a ${LOG}
fi  # MAIL

rm ${TMP}
echo "`date` ${PGM} v${VER} finished."|tee -a ${LOG}
exit 0

