
#!/bin/sh
# File	: cdot_get-port-vlan-overview.sh
# By	: Maarten.deBoer@atos.net, 170102
# Subject	: Script to get port-overview
#(0.2)	: Added IFGRP -> Bubble translation, FILTER, MAIL, changed sh-name
PGM="`basename $0|cut -d\. -f1`"
VER="0.2"
TMP="/tmp/${PGM}.$$.csv"
LOG="${HOME}/log/${PGM}.log"
SSH="/usr/bin/ssh -n"
MAILTO="maarten.deboer@atos.net"
ETC="${HOME}/etc/${PGM}"
CLUSTERS="${HOME}/etc/clusters"
FILTER="[?]*"
MAIL=""

FILE="/tmp/${PGM}.show"

echo "`date` ${PGM}. v${VER} started"|tee -a ${LOG}
touch ${TMP}

#  MAIN
USAGE()
{
  echo "Usage: ${PGM} [options] "
  echo "  Version: ${VER}"
  echo "  options     :"
  echo "    -d        : Delete inputfile (${FILE})"
  echo "    -e|--etc  : Etc/cluster-file (${CLUSTERS})"
  echo "    -f        : clustername Filter (${FILTER})"
  echo "    -h        : this help"
  echo "    -m|--mail : send Mail"
  echo "    -V        : Version"
  echo "    -x        : set -x"
  echo "    --mailto  : change MAILTO address & do send mail (${MAILTO})"
}
# Check options
while [ $# -gt 0 ]
  do
  case ${1} in
    -d) DELETE=1 ;;
    -e | --etc) CLUSTERS=${2}; shift ;;
    -m | --mail) MAIL=1 ;;
    --mailto) MAILTO=$2; MAIL=1; shift ;;
    -h | --help) USAGE; exit 1 ;;
    -f) FILTER=${2}; shift ;;
    -V) echo "${PGM}: v${VER}"; exit 3 ;;
    -x)  set -x ;;
    *)  echo "Option ${1} not known."; USAGE; exit 1 ;;
  esac
    shift
done

echo "DELETE=${DELETE}"
echo "CLUSTERS=${CLUSTERS}"
echo "ETC=${ETC}"
echo "FILTER=${FILTER}"
echo "MAIL=${MAIL}"
echo "MAILTO=${MAILTO}"
sleep 1

if [ ! -f ${ETC} ]; then
  echo "  No ${ETC} found. Creating empty one..."|tee -a ${LOG}
  touch ${ETC}
fi

if [ ! -f ${FILE} ]; then
  echo "  Getting info ..."
  for CLUSTER in `cat ${CLUSTERS}|grep ${FILTER}|grep -v ^#|awk '{print $1}'`
  do
    echo "${CLUSTER} ..."
    ${SSH} ${CLUSTER}  "set -showseparator \";\" ; set -delimiter; ;network port show -fields node,port,link,type,ifgrp-node,ifgrp-port,vlan-node,vlan-port,vlan-tag,broadcast-domain" >> ${FILE}
  done  # CLUSTERS
fi  # FILE

echo "  Analyzing ..."

# ${FILE}
# node        port  link type     ifgrp-node ifgrp-port vlan-node vlan-port vlan-tag broadcast-domain

echo "# CLUSTER; NODE; PORT; LINK; IFGRP; VLANs; BroDOMAIN; REMARKS" > ${TMP}

for CLUSTER in `cat ${CLUSTERS}|grep ${FILTER}|grep -v ^#|awk '{print $1}'`
do
  grep ${CLUSTER} ${FILE}|awk -F\; '{print $1}'|sort -u|while read NODE REST
  do
    grep ${NODE} ${FILE}|grep physical|while read LINE
    do
      PORT="`echo ${LINE}|awk -F\; '{print $2}'`"
      LINK="`echo ${LINE}|awk -F\; '{print $3}'`"
      TYPE="`echo ${LINE}|awk -F\; '{print $4}'`"
      IFGRP="`echo ${LINE}|awk -F\; '{print $6}'`"
      BDOMAIN="`echo ${LINE}|awk -F\; '{print $10}'`"
      IFGRP2="`echo ${LINE}|awk -F\; '{print $6}'|sed 's/a//g'|sed 's/b//g'`"
      REMARKS=""
      if [ "${IFGRP2}" != "" ]; then
        REMARKS="`grep a${IFGRP2} ${ETC}|grep -v ^#|head -1|awk -F\; '{print $2}'`"
      fi
#      echo "${CLUSTER};${NODE};${PORT};${IFGRP};"
      if [ "${IFGRP}" != "-" ]; then
        VLANS="`grep ${NODE} ${FILE}|grep vlan|grep ${IFGRP}|awk -F\; '{print $9}'`"
        VLANS2="`echo ${VLANS} |awk 'BEGIN {RS=""}; {; t=0; while (++t<=NF) {printf "%s ", $t}; printf "\n"; }'file `"

        echo "${CLUSTER};${NODE};${PORT};;${IFGRP};${VLANS2};${BDOMAIN};${REMARKS};"|tee -a ${TMP}
      else  # IFGRP
        if [ "${LINK}" = "up" ]; then
          echo "${CLUSTER};${NODE};${PORT};${TYPE};;;${BDOMAIN};${REMARKS};"|tee -a ${TMP}
        fi  # LINK
      fi  #  IFGRP
    done  # PORT
  done  # NODE
done  # CLUSTER

echo "MAIL=${MAIL}"

if [ ${MAIL} ]; then
  date | mailx -a ${TMP} -s "cDOT; IfGrp + VLANs overview [${PGM} v${VER}]" ${MAILTO}
  echo "  Mailed to ${MAILTO}"|tee -a ${LOG}
fi  # MAIL

rm ${TMP}
exit 0

