
#!/bin/sh
# File	: noc_volume_offline_remove.sh
# By	: Maarten.deBoer@Atos.net, 240205, 240227
# Subject	: Script to remove offline volumes at NetappOntap via Cli
PGM="`basename $0|cut -d\. -f1`"
VER="0.1"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
SSH="/usr/bin/ssh -n"
MAIL=""
MAILTO="maarten.deboer@atos.net"
CLUSTERS="${HOME}/etc/clusters"
CSV="/tmp/${PGM}.csv"
DATA="${HOME}/data/netapp_vol_offline.csv"
CFILTER="[?]*"
HOSTNAME=`hostname |cut -d\. -f2`
#EXCLFILE="${HOME}/etc/${PGM}.excl"
EXCLFILE="${HOME}/etc/noc_volume_offline.excl"
NETAPP_ENV="nl-fsod"
RCFILE="${HOME}/etc/${PGM}.rc"
DO_REMOVE=""

USAGE()
{
  echo "Usage: $PGM [options] "
  echo "  Version: ${VER}"
  echo "  options:"
  echo "    -c          : Cluster filter (${CFILTER})"
  echo "    -e|--etc    : Etc/clusters-file (${CLUSTERS})"
  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})"
  echo "    --do_remove : Remove the offline volumes"
}
DATE_NR=`date +%Y%m%d`
if [ -f ${RCFILE} ]; then
  echo "  RCFILE (${RCFILE}) found. Using "|tee -a ${LOG}
  . ${RCFILE}
fi  # RCFILE
# Check options
while [ $# -gt 0 ]
  do
  case ${1} in
    -d | --date_nr) DATE_NR=${2}; shift ;;
    -e | --etc) CLUSTERS=${2}; shift ;;
    -m | --mail) MAIL=1 ;;
    --mailto) MAILTO=$2; MAIL=1; shift ;;
    --do_remove) DO_REMOVE=1 ;;
    -h | --help) USAGE; exit 1 ;;
    -c) CFILTER=${2}; shift ;;
    -V) echo "${PGM}: v${VER}"; exit 3 ;;
    -x)  set -x ;;
    *)  echo "Option ${1} not known."; USAGE; exit 1 ;;
  esac
    shift
done

echo "`date` ${PGM} v${VER} started."|tee -a ${LOG}
echo "Result of volume remove(s) with VARs:" > ${TMP}
echo "CLUSTERS=${CLUSTERS}" |tee -a ${TMP}
echo "CFILTER=${CFILTER}" |tee -a ${TMP}
echo "DATA=${DATA}" |tee -a ${TMP}
echo "EXCLFILE=${EXCLFILE}" |tee -a ${TMP}
echo "MAIL=${MAIL}" |tee -a ${TMP}
echo "MAILTO=${MAILTO}" |tee -a ${TMP}
echo "NETAPP_ENV=${NETAPP_ENV}" |tee -a ${TMP}
echo "DO_REMOVE=${DO_REMOVE}" |tee -a ${TMP}
echo "DATE_NR=${DATE_NR}" |tee -a ${TMP}
sleep 1

echo "Volumes:" >> ${TMP}

# Check is DATA-file. If not exit
if [ ! -f ${DATA} ]; then
  echo "  DATAfile (${DATA} NOT found. Exiting ..."|tee -a ${LOG}
  exit 4
fi
# Check Exclude-file. If not create
if [ ! -f ${EXCLFILE} ]; then
  echo "  EXCLudeFILE (${EXCLFILE}) NOT found. Creating ..."|tee -a ${LOG}
  touch ${EXCLFILE}
fi

for CLUSTER in `cat ${CLUSTERS}|grep -v ^#|grep "${CFILTER}"`
do
  echo "  CLUSTER=${CLUSTER}"
  ${SSH} ${CLUSTER} "set -showseparator \";\" ; volume show -state offline -fields vserver,aggregate,volume,size,state"|grep offline|grep -vf ${EXCLFILE}|grep -v ^#|while read LINE
  do
    VSERVER=`echo ${LINE}|awk -F\; '{print $1}'`
    VOLUME=`echo ${LINE}|awk -F\; '{print $2}'`
#    echo "    LINE=${LINE} VSERVER=${VSERVER} VOLUME=${VOLUME}"
    echo "    VSERVER=${VSERVER} VOLUME=${VOLUME}"

# Check if volume is in DATA-file and exclude from .excl-file
    ANSW="`grep ${VOLUME} ${DATA}|grep -v ^#|grep ${VSERVER}`"
    if [ "${ANSW}" != "" ]; then
      REM_AFTER=`echo ${ANSW}|awk -F\; '{print $7}'|sed 's/-//g'`
      echo "      ANSW=${ANSW} VOLUME=${VOLUME} REM_AFTER=${REM_AFTER}"
      echo "      VOLUME=${VOLUME} REM_AFTER=${REM_AFTER} (DATE_NR=${DATE_NR})"
      if [ ${DATE_NR} -gt ${REM_AFTER} ]; then
        echo "        VOLUME=${VOLUME} will be removed (DATE_NR=${DATE_NR} > REM_AFTER=${REM_AFTER})"|tee -a ${LOG} ${TMP}
        if [ ${DO_REMOVE} ]; then
          ${SSH} ${CLUSTER} "volume delete -vserver ${VSERVER} -volume ${VOLUME}"
          EC=${?}
          if [ ${EC} -lt 0 ]; then
            echo "        CLUSTER=${CLUSTER} VOLUME=${VOLUME} IS removed. EC=${EC}"|tee -a ${LOG} ${TMP}
          else
            echo "        CLUSTER=${CLUSTER} VOLUME=${VOLUME} NOT removed. EC=${EC}"|tee -a ${LOG} ${TMP}
          fi  # EC > 0
        else
          echo "    DO_REMOVE (--do_remove) NOT set. So, NO removes done."|tee -a ${LOG} ${TMP}
        fi  # DO_REMOVE
      fi  # REM_AFTER > DATE_NR
    
#    # This volume is not in DATA-file. So add
#      DATE=`date +%Y-%m-%d`
#      REMOVE_DATE=`date +%Y-%m-%d  --date="+ ${REM_AFTER}"`
#      echo "${CLUSTER};${VSERVER};${AGGREGATE};${VOLUME};${SIZE};${DATE};${REMOVE_DATE};" |tee -a ${DATA}
#      echo "${CLUSTER};${VSERVER};${AGGREGATE};${VOLUME};${SIZE};${DATE};${REMOVE_DATE};" >> ${TMP}
#    else
#      echo "${ANSW};" |tee -a ${TMP}

    fi  # ANSW

  done  # while read
done  # for FILER

if [ ${MAIL} ]; then
  cat ${TMP} |mailx -s ":${HOSTNAME}: ${NETAPP_ENV} removed volumes [${PGM} v${VER}]" ${MAILTO}
  echo "  Mailed to ${MAILTO}"|tee -a ${LOG}
fi  # MAIL

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

