
#!/bin/bash
# File	: anat_check.sh
# By	: Maarten.deBoer@Atos.net, 160425, 170203
# Subject	: Script to check BEFORE do
PGM="`basename $0|cut -d\. -f1`"
VER="0.1"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
INDIR="${HOME}/anat/in"
CMDDIR="${HOME}/anat/cmd"
DONEDIR="${HOME}/anat/done"
OUTDIR="${HOME}/anat/out"
SSH="/usr/bin/ssh -n"

# VAR's in transport-file
# TYPE= change
# ACTION= show, create, modify, delete
# SUBJECT= aggr, volume, qtree, quota
# CLUSTER=
# FILER=
# NODE=
# SVM=
# AGGR=
# VOLUME=
# QTREE=
# QUOTA=
# CUR_SIZE=
# NEW_SIZE=
# NFS_EXPORT=
# CIFS_SHARE=
# SDM_TICKET=
# RETURN_MSG=

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

cd ${INDIR}
ls -1 *.asc|while read FILE REST
do
  echo "${FILE} ..."

  TYPE=""
  READVAR="`grep ^TYPE= ${FILE}|cut -d\= -f2-99`"
  if [ "${READVAR}" != "" ]; then
    TYPE=${READVAR}
  fi
  ACTION=""
  READVAR="`grep ^ACTION= ${FILE}|cut -d\= -f2-99`"
  if [ "${READVAR}" != "" ]; then
    ACTION=${READVAR}
  fi
  SUBJECT=""
  READVAR="`grep ^SUBJECT= ${FILE}|cut -d\= -f2-99`"
  if [ "${READVAR}" != "" ]; then
    SUBJECT=${READVAR}
  fi
  CLUSTER=""
  READVAR="`grep ^CLUSTER= ${FILE}|cut -d\= -f2-99`"
  if [ "${READVAR}" != "" ]; then
    CLUSTER=${READVAR}
  fi
  SVM=""
  READVAR="`grep ^SVM= ${FILE}|cut -d\= -f2-99`"
  if [ "${READVAR}" != "" ]; then
    SVM=${READVAR}
  fi
  VOLUME=""
  READVAR="`grep ^VOLUME= ${FILE}|cut -d\= -f2-99`"
  if [ "${READVAR}" != "" ]; then
    VOLUME=${READVAR}
  fi
  QTREE=""
  READVAR="`grep ^QTREE= ${FILE}|cut -d\= -f2-99`"
  if [ "${READVAR}" != "" ]; then
    QTREE=${READVAR}
  fi
  CUR_SIZE=""
  READVAR="`grep ^CUR_SIZE= ${FILE}|cut -d\= -f2-99`"
  if [ "${READVAR}" != "" ]; then
    CUR_SIZE=${READVAR}
  fi
  NEW_SIZE=""
  READVAR="`grep ^NEW_SIZE= ${FILE}|cut -d\= -f2-99`"
  if [ "${READVAR}" != "" ]; then
    NEW_SIZE=${READVAR}
  fi

  echo "TYPE=${TYPE}"
  echo "ACTION=${ACTION}"
  echo "SUBJECT=${SUBJECT}"
  echo "CLUSTER=${CLUSTER}"
  echo "SVM=${SVM}"
  echo "VOLUME=${VOLUME}"
  echo "QTREE=${QTREE}"
  echo "CUR_SIZE=${CUR_SIZE}"
  echo "NEW_SIZE=${NEW_SIZE}"

  echo ".."

# Start check
  ${SSH} ${CLUSTER} 'hostname' 1> ${TMP} 2>&1
  EC=$?
  echo ${EC}
  FILE2="`echo ${FILE}|cut -d\. -f1`"
  cp ${TMP} ${OUTDIR}/${FILE2}_cluster.asc
  if [ ${EC} -eq 0 ]; then
    echo "CLUSTER=${CLUSTER}"
# Check SVM (vserver)
    ${SSH} ${CLUSTER} "vserver show -vserver ${SVM}" 1> ${TMP} 2>&1
    EC=$?
    echo ${EC}
    if [ ${EC} -eq 0 ]; then
      echo "SVM=${SVM}"
      cp ${TMP} ${OUTDIR}/${FILE2}_svm.asc
# Check Volume
      ${SSH} ${CLUSTER} "volume show -vserver ${SVM} -volume ${VOLUME}" 1> ${TMP} 2>&1
      EC=$?
      echo ${EC}
      if [ ${EC} -eq 0 ]; then
        echo "VOLUME=${VOLUME}"
        cp ${TMP} ${OUTDIR}/${FILE2}_volume.asc
# get SIZEing unit
        ANSW="`echo ${CUR_SIZE}|grep KB`"
        if [ "${ANSW}" != "" ]; then
          UNIT="KB"
        fi
        ANSW="`echo ${CUR_SIZE}|grep MB`"
        if [ "${ANSW}" != "" ]; then
          UNIT="MB"
        fi
        ANSW="`echo ${CUR_SIZE}|grep GB`"
        if [ "${ANSW}" != "" ]; then
          UNIT="GB"
        fi

        if [ "${SUBJECT}" = "volume" ]; then
          SIZE="`${SSH} ${CLUSTER} \"set -unit ${UNIT}; volume show -vserver ${SVM} -volume ${VOLUME} -field size\"|grep ${SVM}|awk '{print $3}' `"
          echo "SIZE=${SIZE}"
          if [ "${SIZE}" = "${CUR_SIZE}" ]; then
            echo "SIZE = CUR_SIZE"
            cp /dev/null ${CMDDIR}/${FILE2}.cmd
            echo "ssh ${CLUSTER} \"volume modify -vserver ${SVM} -volume ${VOLUME} -size ${NEW_SIZE}\" "|tee ${CMDDIR}/${FILE2}.cmd
          else
            echo "  WRONG SIZE(${SIZE}) <> CUR_SIZE(${CUR_SIZE})"
            RETURN_MSG="SIZE(${SIZE}) <> CUR_SIZE(${CUR_SIZE})"
          fi  # SIZE
        fi  # SUBJECT=volume

# Mod Quota, so check Qtree as well
        if [ "${SUBJECT}" = "quota" ]; then
          echo "QTREE=${QTREE}"
          ${SSH} ${CLUSTER} "qtree show -vserver ${SVM} -volume ${VOLUME} -qtree ${QTREE}" 1> ${TMP} 2>&1
          EC=$?
          echo ${EC}
          if [ ${EC} -eq 0 ]; then
            echo "QTREE=${QTREE}"
            cp ${TMP} ${OUTDIR}/${FILE2}_qtree.asc
# Check Quota
            SIZE="`${SSH} ${CLUSTER} \"set -unit ${UNIT}; quota report -vserver ${SVM} -volume ${VOLUME} -tree ${QTREE} -field disk-limit\"|grep ${VOLUME}|awk '{print $4}' `"
            echo "SIZE=${SIZE}"
            if [ "${SIZE}" = "${CUR_SIZE}" ]; then
              echo "SIZE = CUR_SIZE"
# Get quota-policy
              QPOL_NAME="`${SSH} ${CLUSTER} \"volume quota policy rule show -vserver ${SVM} -volume ${VOLUME} -fields policy-name\" |grep ${VOLUME}|awk '{print $2}'`"
              echo ${QPOL_NAME}

              cp /dev/null ${CMDDIR}/${FILE2}.cmd
              echo "ssh ${CLUSTER} \"volume quota policy rule modify -vserver ${SVM} -volume ${VOLUME} -policy-name ${QPOL_NAME} -type tree -target ${QTREE} -disk-limit ${NEW_SIZE}\" "|tee ${CMDDIR}/${FILE2}.cmd
         

            else
              echo "  WRONG SIZE(${SIZE}) <> CUR_SIZE(${CUR_SIZE})"
              RETURN_MSG="SIZE(${SIZE}) <> CUR_SIZE(${CUR_SIZE})"
            fi  # SIZE
          else
            RETURN_MSG="${QTREE}: `cat ${TMP}`"
          fi  # QTREE
        fi  # SUBJECT=quota


      else
        RETURN_MSG="${VOLUME}: `cat ${TMP}`"
      fi  # VOL
    else
      RETURN_MSG="${SVM}: `cat ${TMP}`"
    fi  # SVM
  else
    # No access to CLUSTER
    RETURN_MSG="${CLUSTER}: `cat ${TMP}`"
  fi  # CLUSTER

# Output
  OUTFILE=${OUTDIR}/${FILE}
  echo "# `date` ${PGM} v${VER}" > ${OUTDIR}/${FILE}
  echo "TYPE=${TYPE}" >> ${OUTFILE}
  echo "ACTION=${ACTION}" >> ${OUTFILE}
  echo "SUBJECT=${SUBJECT}" >> ${OUTFILE}
  echo "CLUSTER=${CLUSTER}" >> ${OUTFILE}
  echo "SVM=${SVM}" >> ${OUTFILE}
  echo "VOLUME=${VOLUME}" >> ${OUTFILE}
  echo "QTREE=${QTREE}" >> ${OUTFILE}
  echo "CUR_SIZE=${CUR_SIZE}" >> ${OUTFILE}
  echo "NEW_SIZE=${NEW_SIZE}" >> ${OUTFILE}
  echo "RETURN_MSG=${RETURN_MSG}" >> ${OUTFILE}

  
done  # ls -1


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

