
#/bin/sh
# File	: cdot_rpt_vserver-svm.sh
# By	: Maarten de Boer@Atos.net, 231003
# Subject	: Script to report vserver (SVM) seetings
PGM=`basename $0|cut -d\. -f1`
VER="0.1"
TMP="/tmp/${PGM}.$$"
CSV="/tmp/${PGM}.csv"
LOG="${HOME}/log/${PGM}.log"
SSH="/usr/bin/ssh -n"
RCFILE="${HOME}/etc/${PGM}.rc"
CLUSTERS="${HOME}/etc/clusters"
MAIL=""
MAILTO="maarten.deboer@atos.net"
HOSTNAME=`hostname |cut -d\. -f1`

# Cluster Filter
CFILTER="[?]*"
# Svm Filter
SFILTER="[?]*"

USAGE()
{
  echo "Usage: ${PGM} [<options>]"
  echo "  Version: ${VER}"
  echo "  options        :"
  echo "    -c|--cluster : Clusterfilter (${CFILTER})"
  echo "    -s|--svm     : SvmFilter (${SFILTER})"
  echo "    -h|--help    : this help"
  echo "    -V           : Version"
  echo "    -x           : set -x"
}
if [ -f ${RCFILE} ]; then
  echo "  RCFILE (${RCFILE}) found. Using it"
  . ${RCFILE}
fi  # RCFILE
while [ $# -gt 0 ]
  do
  case $1 in
    -c | --cluster) CFILTER="${2}"; shift ;;
    -s | --svm) SFILTER="${2}"; shift ;;
    --mailto) MAILTO="${2}"; MAIL=1; shift ;;
    -m) 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

echo "`date` ${PGM} v${VER} started."|tee -a ${LOG} ${TMP}.mail
echo "  CLUSTERS=${CLUSTERS}" |tee -a ${TMP}.mail
echo "  CFILTER=${CFILTER}" |tee -a ${TMP}.mail
echo "  SFILTER=${SFILTER}" |tee -a ${TMP}.mail
echo "  MAIL=${MAIL}" |tee -a ${TMP}.mail
echo "  MAILTO=${MAILTO}" |tee -a ${TMP}.mail
sleep 1

if [ ! -f ${CLUSTERS} ]; then
  echo "  NO clusters-file (${CLUSTERS}) found. Exiting ..."|tee -a ${LOG}
  exit 3
fi 

touch ${TMP}
#echo "# Vserver;Root Volume;Aggregate;Root Volume Security Style;Default Volume Language Code;Comment;Vserver Admin State;Vserver Operational State;Allowed Protocols;IPspace Name;" > ${TMP}
echo "# CLUSTER;VSERVER;SVM_INTERFACE_NAME;ROOT_VOLUME;ROOT_VOLUME_AGGR;IPSPACE;SVM_ADDRESS;SVM_NETMASK;SVM_GATEWAY;SVM_HOME_NODE;SVM_HOME_PORT;COMMENT;ROOT_VOLUME_SECU_STYLE;DEF_VOLUME_LANGUAGE;ADMIN_STATE;OPER_STATE;ALLOWED_PROTS;" > ${TMP}

cat ${CLUSTERS}|grep -v ^#|grep ${CFILTER}|while read CLUSTER
do
  echo "  CLUSTER=${CLUSTER}"

# vserver;rootvolume;aggregate;rootvolume-security-style;language;comment;admin-state;operational-state;allowed-protocols;ipspace;

  ${SSH} ${CLUSTER} "set -showseparator \";\" ;vserver show -admin-state running -field vserver,operational-state"|grep "${SFILTER}"|grep running|awk -F\; '{print $1}'|while read VSERVER
  do
    echo "    VSERVER=${VSERVER}"

# vserver/SVM part
    ${SSH} ${CLUSTER} "set -showseparator \";\" ;vserver show -vserver ${VSERVER} -field vserver,rootvolume,aggregate,ipspace,comment,rootvolume-security-style,language,allowed-protocols,admin-state,operational-state"|grep running|while read LINE
    do
#      echo "    LINE=${LINE}"
      ROOT_VOLUME=`echo ${LINE}|awk -F\; '{print $2}'`
      ROOT_VOLUME_AGGR=`echo ${LINE}|awk -F\; '{print $3}'`
      ROOT_VOLUME_SECU_STYLE=`echo ${LINE}|awk -F\; '{print $4}'`
      DEF_VOLUME_LANGUAGE=`echo ${LINE}|awk -F\; '{print $5}'`
      COMMENT=`echo ${LINE}|awk -F\; '{print $6}'`
      VSERVER_ADMIN_STATE=`echo ${LINE}|awk -F\; '{print $7}'`
      VSERVER_OPER_STATE=`echo ${LINE}|awk -F\; '{print $8}'`
      ALLOWED_PROTS=`echo ${LINE}|awk -F\; '{print $9}'`
      IPSPACE_NAME=`echo ${LINE}|awk -F\; '{print $10}'`

# nlxfsd18:/home/ansible/automation/data/in/nl-fsod-svm_env.csv
# NAO_CLUSTERNAME;NAO_SVM_NAME;NAO_SVM_INTERFACE_NAME;NAO_SVM_ROOT_VOLUME;NAO_SVM_ROOT_VOLUME_AGGREGATE;NAO_IPSPACE;NAO_SVM_ADDRESS;NAO_SVM_NETMASK;NAO_SVM_GATEWAY;NAO_SVM_HOME_NODE;NAO_SVM_HOME_PORT;CH-NR

      echo "${CLUSTER};${VSERVER};;${ROOT_VOLUME};${ROOT_VOLUME_AGGR};${IPSPACE_NAME};;;;;;${COMMENT};${ROOT_VOLUME_SECU_STYLE};${DEF_VOLUME_LANGUAGE};${VSERVER_ADMIN_STATE};${VSERVER_OPER_STATE};${ALLOWED_PROTS};" |tee -a ${TMP}
    done  # LINE

# Network part
    ${SSH} ${CLUSTER} "set -showseparator \";\" ;network interface show -vserver ${VSERVER} -field vserver,address,netmask,ipspace,home-port,home-node,comment,status-admin,status-oper"| grep ${VSERVER}| while read IF_LINE
    do
      echo "    IF_LINE=${IF_LINE}"
#nlnafsenv03;nlnafsenv03;env03;env03;192.168.25.7;255.255.255.0;env01-ipspace;
      LIF=`echo ${IF_LINE}|awk -F\; '{print $3}'`
      ADDRESS=`echo ${IF_LINE}|awk -F\; '{print $5}'`
      NETMASK=`echo ${IF_LINE}|awk -F\; '{print $6}'`
      HOME_NODE=`echo ${IF_LINE}|awk -F\; '{print $7}'`
      HOME_PORT=`echo ${IF_LINE}|awk -F\; '{print $8}'`
      STATUS_ADMIN=`echo ${IF_LINE}|awk -F\; '{print $9}'`
      STATUS_OPER=`echo ${IF_LINE}|awk -F\; '{print $10}'`
      IF_COMMENT=`echo ${IF_LINE}|awk -F\; '{print $11}'`
      IPSPACE=`echo ${IF_LINE}|awk -F\; '{print $12}'`

# Def GW
      DEFAULT_GW=`${SSH} ${CLUSTER} "set -showseparator \";\" ;network route show -vserver ${VSERVER} -destination 0.0.0.0/0 -field vserver,gateway" | grep ${VSERVER}|awk -F\; '{print $3}'`

#      echo "${CLUSTER};${VSERVER};${LIF};${ADDRESS};${NETMASK}"|tee -a ${TMP}
      echo "${CLUSTER};${VSERVER};${LIF};;;${IPSPACE};${ADDRESS};${NETMASK};${DEFAULT_GW};${HOME_NODE};${HOME_PORT};${IF_COMMENT};;;${STATUS_ADMIN};${STATUS_OPER};;" |tee -a ${TMP}
    done  # IF_LINE


  done  # VSERVER

done  # CLUSTERS

if [ -s ${TMP} ] && [ ${MAIL} ]; then
  date >> ${TMP}.mail
  cp ${TMP} ${CSV}
  cat ${TMP}.mail | mailx -a ${CSV} -s ":${HOSTNAME}: vserver/SVM report [${PGM} v${VER}]" "${MAILTO}"
  echo "  Mailed to ${MAILTO}"|tee -a ${LOG}
fi  # MAIL

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

