
#!/bin/ksh
#set -x
# File	: proc_ssh_input.sh
# By	: Maarten.deBoer@Atos.net<mailto:Maarten.deBoer@Atos.net>, 180724
# Subject	: Script to receive info from SSH
#(0.2),180724	: Added heartbeat
#(0.3),180725	: Added, ${TMP}, FILTERS
#(0.4),180725	: Added CLUSTERS to find the SVM
#(0.5),180726	: Added COMMENT in 2nd position
#(0.6),180726	: Remove ^# before while & check stdin
#(0.7),180726	: Added VERSION, Mod. 'list'
#(0.8),180726	: Added (cDOT).cmd file in data/, QTREE_FILTER
#(0.9),180731	: Changed aggr. Can also be left out
#(0.10),180913   : Mod. Enabling the LIST command
#(0.11),180913   : Mod. `date` in LOG
#(0.12),180913   : Add show-lif
#(0.13),180913   : Add export-policy (list)
#(0.14),180913   : Add remove-export
#(0.15),180918   : Add unremove-export
#(0.16),180919   : Add clean-up of data-dir
#(0.17),180919   : Add create Qtree
#(0.18),180925   : Add XC (eXit Code)
#(0.19),181015   : Add ENABLE(file) for (un)remove. DISABLE(file) for disable everything
#(0.20),181101   : Mod. ENABLE: Enable commands. When not ENABLEd; command will be done WITHOUT execution. So it LOOKS like it is OK.
#(0.21),181101   : Updated show-lif
#(0.22),181213   : Added SSHCMD()
#(0.23),181213   : Added HOSTNAME (at STATUS)
#(0.24),190108   : Mod "- lif ... " ${EC}
#(0.25),190115   : Some XC updates
#(0.26),190122   : Some mod's/updates. Added at func SSHCMD() retrun ${EC}
#(0.27),190402   : Show Filters added at status, exit 0 at heartbeat
#(0.28),190402   : Added usage of RC-file
#(0.29),190402   : Some mod's in USAGE (help-text), Mod. QSIZE(Was SIZE), Added -disk-limit ${QSIZE}
#(0.30),190731   : Add quota_resize and bin/ksh
#(0.31),200205   : Change qtree size output
#(0.32),200821   : Add create volume
#(0.33),201002   : Add qtree create settings
#(0.34),220701	: Upd after recovery
#(0.35),220719	: Added LOG for SSHCMD
#(0.36),220719	: Mod's
#set -x
PGM=`basename $0|cut -d\. -f1`
VER="0.36"
TMP="/tmp/${PGM}.$$"
BASE="${HOME}/aoduser"
LOG="${BASE}/log/${PGM}.log"
HBFILE="${BASE}/data/heartbeat"
PROCFILE="${BASE}/data/procfile"
CLUSTERS="${BASE}/etc/clusters"
SSH="/usr/bin/ssh -n"
OUT="${TMP}.out"
LAST="${BASE}/data/${PGM}.last"
STATUSENA="${BASE}/data/${PGM}.enable"
STATUSDIS="${BASE}/data/${PGM}.disable"
#FSOD_CLUSTER_VSERVER_CSV="/home/aodfm01a/export/fsod-clusters-vservers.csv"
FSOD_CLUSTER_VSERVER_CSV="${BASE}/export/fsod-clusters-vservers.csv"
CMDFILE="${BASE}/data/${PGM}.cmd"
INFO="${BASE}/data/${PGM}.info"
DATADIR="${BASE}/data"
# 14 days of retention of the DATADIR-data
DATADIRRET=14
# 14 days of retention of decommissioned qtrees
DAYRET=14
YEARDAY=`date '+%Y%j'`
SECUSTYLE="unix"
XC=0
HOSTNAME=`hostname|cut -d\. -f1`
RCFILE="${BASE}/etc/${PGM}.rc"
SSHCMDLOG="${BASE}/log/${PGM}_sshcmd.log"

# !! Can be set in RC-file !!
CLUSTER_FILTER="nlnaf[1-9][0-9][0-9]"
SVM_FILTER="nlnafs[a-z][a-z][a-z][0-9][0-9]"
#SVM_FILTER="nlnafsmss[0-9][0-9]"
AGGR_FILTER="n[0-9][0-9][ace][0-9][0-9][0-9][0-9]"
LIF_FILTER="[a-z][a-z][a-z][0-9][0-9]-*"
#LIF_FILTER="mss[0-9][0-9][-]*"
VOL_FILTER="[a-z][a-z][a-z][0-9][0-9]_vol[0-9][0-9][0-9][0-9][0-9]"
QTREE_FILTER="[a-zA-Z0-9]*"


# VER="0.1", <node>-04
# VER="0.2", <node>-06
# VER="0.3", <node>-10
SSHCMD()
# 1: Filername 2:Command-string
# When issue with connection to cluster, try the nodes (-01 & -02)
# "There are no entries matching your query." => EC=255
# "no connection" is also EC=255
{
  TMPERR="/tmp/${PGM}.$$.tmperr"
  touch ${TMPERR}
  echo "`date` ${1}: ${2}" >> ${SSHCMDLOG} 
  /usr/bin/ssh -n ${1} "${2}" 2> ${TMPERR}
  EC=${?}
  # Check if "ssh: connect to host 10.192.109.202 port 22: Connection refused" If so (EC2=0), the 2nd
  grep 'Connection refused' ${TMPERR}
  EC2=${?}
  if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
    sleep 1
    /usr/bin/ssh -n ${1}-01 "${2}" 2> ${TMPERR}
    EC=${?}
    grep 'Connection refused' ${TMPERR}
    EC2=${?}
    if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
      sleep 1
      /usr/bin/ssh -n ${1}-02 "${2}" 2> ${TMPERR}
      EC=${?}
      grep 'Connection refused' ${TMPERR}
      EC2=${?}
      if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
        sleep 1
        /usr/bin/ssh -n ${1}-03 "${2}" 2> ${TMPERR}
        EC=${?}
        grep 'Connection refused' ${TMPERR}
        EC2=${?}
        if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
          sleep 1
          /usr/bin/ssh -n ${1}-04 "${2}" 2> ${TMPERR}
          EC=${?}
          grep 'Connection refused' ${TMPERR}
          EC2=${?}
          if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
            sleep 1
            /usr/bin/ssh -n ${1}-05 "${2}" 2> ${TMPERR}
            EC=${?}
            grep 'Connection refused' ${TMPERR}
            EC2=${?}
            if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
              sleep 1
              /usr/bin/ssh -n ${1}-06 "${2}" 2> ${TMPERR}
              EC=${?}
              grep 'Connection refused' ${TMPERR}
              EC2=${?}
              if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
                sleep 1
                /usr/bin/ssh -n ${1}-07 "${2}" 2> ${TMPERR}
                EC=${?}
                grep 'Connection refused' ${TMPERR}
                EC2=${?}
                if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
                  sleep 1
                  /usr/bin/ssh -n ${1}-08 "${2}" 2> ${TMPERR}
                  EC=${?}
                  grep 'Connection refused' ${TMPERR}
                  EC2=${?}
                  if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
                    sleep 1
                    /usr/bin/ssh -n ${1}-09 "${2}" 2> ${TMPERR}
                    EC=${?}
                    grep 'Connection refused' ${TMPERR}
                    EC2=${?}
                    if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
                      sleep 1
                      /usr/bin/ssh -n ${1}-10 "${2}" 2> ${TMPERR}
                      EC=${?}
                      grep 'Connection refused' ${TMPERR}
                      EC2=${?}
                      if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
                        echo  "`date` ${PGM} ERROR with communication to ${1}. Connection to -01 .. -10 failed too."|tee -a ${LOG}
                      fi  # -10
                    fi  # -09
                  fi  # -08
                fi  # -07
              fi  # -06
            fi  # -05
          fi  # -04
        fi  # -03
      fi  # -02
    fi  # -01
  fi  #
  rm ${TMPERR}
  return ${EC}
}

USAGE()
{
  echo "  USAGE:"
  echo "    input using stdin. "
  echo "      Like (local): 'echo <text> | ${PGM}.sh' OR 'cat <file> | ${PGM}.sh'"
  echo "      Like (remote): 'echo <text> | ssh <user>@<host>' OR 'cat <file> | ssh <user>@<host>'"
  echo "    syntax: '<cmd> ; <comment> ; <svm> ; <aggr>|* ; <volume>|* ; <qtree>|* ; <export-policy>|* ; <new-quota-size>|* ; '"
  echo "    cmd:"
  echo "      - help"
  echo "      - version"
  echo "      - heartbeat"
  echo "      - status"
  echo "      - list (list;[<comment>];<svm>;[<aggr>|*];<volume>|*;[<qtree> |*];[<export-policy>|*];[<quota-size>|*];)"
  echo "      - show-lif (show-lif;[<comment>];<svm>|*;<lif>)"
  echo "      - remove-export (remove-export;[<comment>];<svm>;*;<volume>;<qtree>;<export-policy>)"
  echo "      - unremove-export (unremove-export;[<comment>];<svm>;*;<volume>;<qtree>;)"
  echo "      - create-qtree (create-qtree;[<comment>];<svm>;*;<volume>;<qtree>;;<n>[GB])"
  echo "      - quota-resize (quota-resize;[<comment>];<svm>;*;<volume>;<qtree>;;<n>[GB])"
  echo "      - create-volume (create-volume;[<comment>];<svm>;<class>[gold|silver|bronze])"
  echo "  [${PGM} v${VER}]"
}


# If a (local)tty (interactive, 0), then exit
tty -s
EC=${?}
if [ ${EC} -eq 0 ]; then
# Check remote (ssh) interactive
  echo "  ERROR(1): ${PGM} is NOT interactive. Use stdin for input [${PGM} =
v${VER}]. Exiting ..."
  echo "1" > ${TMP}.xc
  echo
  USAGE
  exit 1
fi

# empty ${LAST} before start
cp /dev/null ${LAST}
echo "`date +%Y-%m-%d' '%H:%M:%S` ${PGM} v${VER} started."|tee -a ${LOG} ${LAST}
touch ${TMP} ${OUT} ${TMP}.xc
echo "255" > ${TMP}.xc
# Check existance RC-file
if [ -f ${RCFILE} ]; then
  echo "  RCfile (${RCFILE}) found. Reading ..."|tee -a ${LOG}
  . ${RCFILE}
fi
# Empty CMD-file
cp /dev/null ${CMDFILE}

# Layout:
# <cmd> ; <comment> ; <svm> ; <aggr> ; <volume> ; <qtree> ; <export-policy> ; <new_size> ;
# - help
# - hear
# - list
# - remove
# - unremove;
# - qtree-create
# - qtree-remove

grep -v ^# |while read LINE
do
  echo "--LINE:${LINE}" >> ${LAST}
  IN_CMD=`echo ${LINE}|awk -F\; '{print $1}'`
  IN_COMMENT=`echo ${LINE}|awk -F\; '{print $2}'`
  IN_SVM=`echo ${LINE}|awk -F\; '{print $3}'`
  IN_AGGR=`echo ${LINE}|awk -F\; '{print $4}'`
  IN_VOL=`echo ${LINE}|awk -F\; '{print $5}'`
  IN_QTREE=`echo ${LINE}|awk -F\; '{print $6}'`
  IN_EXPORT_POLICY=`echo ${LINE}|awk -F\; '{print $7}'`
  IN_QSIZE=`echo ${LINE}|awk -F\; '{print $8}'`

  # do, when IN_CMD is not empty

  if [ "${IN_CMD}" != "" ]; then
    case ${IN_CMD} in
      help)
        USAGE
        echo "  HELP: "|tee -a ${LOG} ${LAST}
        ;;
      version)  echo "  VERSION: ${VER} [${PGM} v${VER}]"|tee -a ${LOG} ${LAST} ;;
      heartbeat)  echo "  HEARTBEAT: OK (`date +%Y-%m-%d-%H-%M-%S`) [${PGM}=
 v${VER}]"|tee -a ${LOG} ${LAST}|tee ${HBFILE}
          echo "0" > ${TMP}.xc
        ;;
      status)
        echo "  Filters:"|tee -a ${LAST}
        echo "    CLUSTER_FILTER=${CLUSTER_FILTER}"|tee -a ${LAST}
        echo "    SVM_FILTER=${SVM_FILTER}"|tee -a ${LAST}
        echo "    AGGR_FILTER=${AGGR_FILTER}"|tee -a ${LAST}
        echo "    LIF_FILTER=${LIF_FILTER}"|tee -a ${LAST}
        echo "    VOL_FILTER=${VOL_FILTER}"|tee -a ${LAST}
        echo "    QTREE_FILTER=${QTREE_FILTER}"|tee -a ${LAST}
        if [ -f ${STATUSENA} ]; then
          echo "  STATUS: ENAbled(-file found). (actions, like (un)remove-export, are executed) [${PGM} v${VER}] @ ${HOSTNAME}"|tee -a ${LOG} ${LAST}
          echo "0" > ${TMP}.xc
        fi
        if [ -f ${STATUSDIS} ]; then
          echo "  STATUS: DISabled(-file found) (ERROR(14)). (NOthing, also list, is allowed) [${PGM} v${VER}] @ ${HOSTNAME}"|tee -a ${LOG} ${LAST}
          echo "14" > ${TMP}.xc
        fi
        if [ ! -f ${STATUSENA} ] && [ ! -f ${STATUSDIS} ]; then
          echo "  STATUS: NO (enable/disable-file)found (ERROR(14)). (actions are accepted. But NOT executed) [${PGM} v${VER}] @ ${HOSTNAME}"|tee -a ${LOG} ${LAST}
          echo "14" > ${TMP}.xc
        fi
        ;;
# LIST
      list)
        # Check 1st if NOT DISabled
        if [ ! -f ${STATUSDIS} ]; then
          # Checks against FILTERs
          SVM=`echo "${IN_SVM}"|grep "${SVM_FILTER}"`
          AGGR=`echo "${IN_AGGR}"|grep "${AGGR_FILTER}"`
          if [ "${IN_AGGR}" = "*" ]; then
            AGGR="*"
          fi  # *
          VOL=`echo "${IN_VOL}"|grep "${VOL_FILTER}"`
          if [ "${IN_VOL}" = "*" ]; then
            VOL="*"
          fi  # *
          QTREE=`echo "${IN_QTREE}"`
          EXPORT_POLICY=`echo "${IN_EXPORT_POLICY}"`
          if [ "${IN_EXPORT_POLICY}" = "*" ]; then
            EXPORT_POLICY="*"
          fi  # *
          QSIZE=`echo "${IN_QSIZE}"`
          if [ "${IN_QSIZE}" = "*" ]; then
            QSIZE="*"
          fi  # *

          echo "  LIST: of SVM=${SVM} (AGGR=${AGGR}) VOL=${VOL} (QTREE=${QTREE}) (EXPORT_POLICY=${EXPORT_POLICY}) (QSIZE=${QSIZE}) "|tee - ${LAST}
          # Check is SVM if not empty
          if [ "${SVM}" != "" ] && [ "${VOL}" != "" ]; then
# find the SVM at a cluster, using the CSV-file AND check against CLUSTER_FILTER
            if [ -f ${FSOD_CLUSTER_VSERVER_CSV} ]; then
              CLUSTER=`grep "${SVM}" ${FSOD_CLUSTER_VSERVER_CSV}|awk -F\; '{print $1}'|grep ${CLUSTER_FILTER}|head -1`
              if [ "${CLUSTER}" != "" ]; then
                echo "    CLUSTER=${CLUSTER}"|tee -a ${LAST}
                # show aggr, when not empty
                if [ "${AGGR}" != "" ]; then
                  echo "SSHCMD ${CLUSTER} 'set -showseparator \";\" ; aggr show -aggregate ${AGGR} -field node,aggregate' | grep ${CLUSTER}"|tee -a ${CMDFILE} ${LOG} ${LAST} > /dev/null
                  echo "---------- aggr (aggregate;node;node;) ---------"|tee -a ${LAST}
                  SSHCMD ${CLUSTER} "set -showseparator \";\" ; aggr show -aggregate ${AGGR} -field node,aggregate" | grep ${CLUSTER}|tee -a ${LAST}
                  EC=${?}
                  echo "---------- (EC=${EC}) ----------"|tee -a ${CMDFILE} ${LAST}
                  echo ${EC} > ${TMP}.xc
                fi  # AGGR
                # show vol, when not empty
                if [ "${VOL}" != "" ]; then
                  echo "SSHCMD ${CLUSTER} 'set -showseparator \";\" ; volume show -vserver ${SVM} -volume ${VOL} -field volume' | grep ${SVM}"|tee -a ${CMDFILE} ${LOG} ${LAST} > /dev/null
                  echo "---------- volume (vserver;volume) ---------"|tee -a ${LAST}
                  SSHCMD ${CLUSTER} "set -showseparator \";\" ; volume show -vserver ${SVM} -volume ${VOL} -field volume" | grep ${SVM}|tee -a ${LAST}
                  EC=${?}
                  echo "---------- (EC=${EC}) ----------"|tee -a ${CMDFILE} ${LAST}
                  echo ${EC} > ${TMP}.xc
                fi  # VOL
                # show qtree, when QTREE not empty
                if [ "${QTREE}" != "" ]; then
                  echo "SSHCMD ${CLUSTER} 'set -showseparator \";\" ; qtree show -vserver ${SVM} -volume ${VOL} -qtree ${QTREE} -field qtree,volume,export,security'|grep ${SVM}"|tee -a ${CMDFILE} ${LOG} ${LAST} > /dev/null
                  echo "---------- qtree (vserver;volume;qtree;security-style;export-policy) ----------"|tee -a ${LAST}
                  SSHCMD ${CLUSTER} "set -showseparator \";\" ; qtree show -vserver ${SVM} -volume ${VOL} -qtree ${QTREE} -field qtree,volume,export,security"|grep ${SVM}|tee -a ${LAST}
                  EC=${?}
                  echo "---------- (EC=${EC}) ----------"|tee -a ${CMDFILE} ${LAST}

                  echo ${EC} > ${TMP}.xc
                fi  # QTREE
# Export-policy
                if [ "${EXPORT_POLICY}" != "" ]; then
                  echo "SSHCMD ${CLUSTER} 'set -showseparator \";\" ; export-policy rule show -vserver ${SVM} -policy ${EXPORT_POLICY} -field policy,client'|grep ${SVM}"|tee -a ${CMDFILE} ${LOG} ${LAST} > /dev/null
                  echo "---------- export-policy (vserver;policyname;ruleindex;clientmatch;) ----------"|tee -a ${LAST}
                  SSHCMD ${CLUSTER} "set -showseparator \";\" ; export-policy rule show -vserver ${SVM} -policy ${EXPORT_POLICY} -field policy,client" |grep ${SVM}|tee -a ${LAST}
                  EC=${?}
                  echo "---------- (EC=${EC}) ----------"|tee -a ${CMDFILE} ${LAST}
                  echo ${EC} > ${TMP}.xc
                fi  # Export-policy
# Qtree (Quota) size
#$ ssh nlnaf102 'set -showseparator ";" ;quota policy rule show -vserver nlnafsmss12 -vol * -qtree * -field vserver,volume,qtree,disk'

                if [ "${QSIZE}" != "" ]; then
                  echo "SSHCMD ${CLUSTER} 'set -showseparator \";\" ; quota policy rule show -vserver ${SVM} -volume ${VOL} -disk-limit ${QSIZE} -field vserver,volume,target,disk-limit,file-limit'|grep ${SVM} " |tee -a ${CMDFILE} ${LOG} ${LAST} > /dev/null
                  echo "---------- quota (vserver;policy-name;volume;type;target;qtree;disk-limit;file-limit;) ----------"|tee -a ${LAST}
                  SSHCMD ${CLUSTER} "set -showseparator \";\" ; quota policy rule show -vserver ${SVM} -volume ${VOL} -target ${QTREE} -disk-limit ${QSIZE} -field vserver,volume,target,disk-limit,file-limit"|grep ${SVM} |tee -a ${LAST}
                  EC=${?}
                  echo "---------- (EC=${EC}) ----------"|tee -a ${CMDFILE} ${LAST}
                  echo ${EC} > ${TMP}.xc
                fi  # Size


              else
                echo "  ERROR(2): cDOT-cluster-name NOT found for SVM (${SVM}). Cannot proceed with 'list'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
                echo "2" > ${TMP}.xc
              fi  # CLUSTER
            else
              echo "  ERROR(3): FSOD_CLUSTER_VSERVER_CSV (${FSOD_CLUSTER_VSERVER_CSV}) NOT found. Cannot proceed with 'list'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
              echo "3" > ${TMP}.xc
            fi  # FSOD_CLUSTER_VSERVER_CSV
          else
            echo "  ERROR(4): Var SVM or VOL is empty. Maybe due to filters (${SVM_FILTER}, ${AGGR_FILTER}, ${VOL_FILTER}) at input (${IN_SVM}, ${IN_AGGR}, ${IN_VOL}). Cannot proceed with 'list'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
            echo "4" > ${TMP}.xc
          fi  # SVM != ""
        else
          echo "  ERROR(5): ${PGM} NOT ENAbled. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
          echo "5" > ${TMP}.xc
        fi  # ENAbled
        ;;
# show-lif
      show-lif)
        # Check 1st if NOT DISabled
        if [ ! -f ${STATUSDIS} ]; then
          # Checks against FILTERs
          SVM=`echo "${IN_SVM}"|grep "${SVM_FILTER}"`
          if [ "${IN_SVM}" = "*" ]; then
            SVM="*"
          fi  # *
          LIF=`echo "${IN_AGGR}"|grep "${LIF_FILTER}"`
          # Check if SVM & LIF if not empty
          if [ "${SVM}" != "" ] && [ "${LIF}" != "" ]; then
            echo "  SHOW-LIF: of SVM=${SVM}  LIF=${LIF}"|tee -a ${LAST}
# Get SVM-part from LIF-name
            SVM_PART=`echo ${LIF}|cut -d\- -f1`
# If SVM is *, then use LIF for getting CLUSTERNAME. Else use SVM name
            if [ -f ${FSOD_CLUSTER_VSERVER_CSV} ]; then
              if [ "${SVM}" = "*" ]; then
                CLUSTER=`grep "${SVM_PART}" ${FSOD_CLUSTER_VSERVER_CSV}|awk -F\; '{print $1}'|grep ${CLUSTER_FILTER}|head -1`
              else
                CLUSTER=`grep "${SVM}" ${FSOD_CLUSTER_VSERVER_CSV}|awk -F\; '{print $1}'|grep ${CLUSTER_FILTER}|head -1`
              fi  # if  "${SVM}" = "*"
              if [ "${CLUSTER}" != "" ]; then
                echo "    CLUSTER=${CLUSTER}"|tee -a ${LAST}
# show-lif: cmd
#                echo "SSHCMD ${CLUSTER} 'set -showseparator \";\" ; network interface show -vserver ${SVM} -lif ${LIF} -field vserver,address'|grep ${LIF}"|tee -a ${CMDFILE} ${LOG} ${LAST}
                echo "---------- lif (vserver;server;lif;vif;address;) ----------"|tee -a ${LAST} 
SSHCMD ${CLUSTER} "set -showseparator \";\" ; network interface show -vserver ${SVM} -lif ${LIF} -field vserver,address"|grep ${LIF}|tee -a ${LAST}
                EC=${?}
                echo "---------- (EC=${EC}) ----------"|tee -a ${CMDFILE} ${LAST}
                echo ${EC} > ${TMP}.xc
              else
                echo "  ERROR(6): cDOT-cluster-name NOT found for SVM (${SVM}). Cannot proceed with 'list'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
                echo "6" > ${TMP}.xc
              fi  # CLUSTER
            else
              echo "  ERROR(7): FSOD_CLUSTER_VSERVER_CSV (${FSOD_CLUSTER_VSERVER_CSV}) NOT found. Cannot proceed with 'list'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
              echo "7" > ${TMP}.xc
            fi  # FSOD_CLUSTER_VSERVER_CSV
          else
            echo "  ERROR(8): Var SVM or LIF is empty. Maybe due to filters (${SVM_FILTER}, ${LIF_FILTER}) at input (${IN_SVM}, ${IN_AGGR}). Cannot proceed with 'show-lif'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
            echo "8" > ${TMP}.xc
          fi  # SVM != ""

        else
          echo "  ERROR(9): ${PGM} NOT ENAbled. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
          echo "9" > ${TMP}.xc
        fi  # ENAbled
        ;;

# remove-export
      remove-export)
        # Checks against FILTERs
        SVM=`echo "${IN_SVM}"|grep "${SVM_FILTER}"`
        AGGR=""
        VOL=`echo "${IN_VOL}"|grep "${VOL_FILTER}"`
        QTREE=`echo "${IN_QTREE}"`
        EXPORT=`echo "${IN_EXPORT_POLICY}"`

        # Check if SVM , VOL, QTREE, EXPORT if not empty
        echo "  SVM=${SVM}  AGGR=${AGGR}  VOL=${VOL} QTREE=${QTREE} EXPORT=${EXPORT} "|tee -a ${LAST}
        if [ "${SVM}" != "" ] && [ "${VOL}" != "" ] && [ "${QTREE}" != "" ] && [ "${EXPORT}" != "" ]; then
          echo "  REMOVE-EXPORT: of SVM=${SVM} VOL=${VOL} QTREE=${QTREE} EXPORT=${EXPORT}"|tee -a ${LAST}
          if [ -f ${FSOD_CLUSTER_VSERVER_CSV} ]; then
            CLUSTER=`grep "${SVM}" ${FSOD_CLUSTER_VSERVER_CSV}|awk -F\; ' {print $1}'|grep ${CLUSTER_FILTER}|head -1`
            if [ "${CLUSTER}" != "" ]; then
              echo "    CLUSTER=${CLUSTER}"|tee -a ${LAST}
              SSHCMD ${CLUSTER} "set -showseparator \";\" ;qtree show -vserver ${SVM} -volume ${VOL} -qtree ${QTREE} -export-policy ${EXPORT} -field export-policy" 1> ${TMP} 2>&1
              EC=${?}
              echo ${EC} > ${TMP}.xc
              if [ ${EC} -eq 0 ]; then
                echo "  saving info ..."
                DATI=`date +%Y-%m-%d-%H-%M-%S`
                DATAFILE="${DATADIR}/${SVM}-${VOL}-${QTREE}_export-policy -rule_${DATI}.asc"
                echo "# DATI=${DATI}" > ${DATAFILE}
                echo "# CLUSTER=${CLUSTER}" >> ${DATAFILE}
                echo "# SVM=${SVM}" >> ${DATAFILE}
                echo "# VOL=${VOL}" >> ${DATAFILE}
                echo "# QTREE=${QTREE}" >> ${DATAFILE}
                echo "# EXPORT=${EXPORT}" >> ${DATAFILE}
                SSHCMD ${CLUSTER} "set -showseparator \";\" ; export-policy rule show -vserver ${SVM} -policy ${EXPORT} -field policy,client"|grep ${SVM} 1>> ${DATAFILE}
                EC=${?}
                echo ${EC} > ${TMP}.xc
# Check 1st if ENAbled
                if [ -f ${STATUSENA} ]; then
# Removing the export-rule
# By changing to none
                  SSHCMD ${CLUSTER} "export-policy show -vserver ${SVM} -policyname none"
                  EC=${?}
# if no "none" policy (EC<>0) then create
                  echo ${EC} > ${TMP}.xc
echo "  EC=${EC}"
                  if [ ${EC} -ne 0 ]; then
                    echo "  Creating export-policy none at ${SVM} ..."
                    SSHCMD ${CLUSTER} "export-policy create -vserver ${SVM} -policyname none"
                  fi  # ${EC} -ne 0
                  SSHCMD ${CLUSTER} "export-policy rule show -vserver ${SVM} -policyname none"
                  EC=${?}
# if no "none" policy (EC<>0) then create
                  echo ${EC} > ${TMP}.xc
                  if [ ${EC} -ne 0 ]; then
                    SSHCMD ${CLUSTER} "export-policy rule create -vserver ${SVM} -policyname none -clientmatch 255.255.255.255/32 -rorule sys -rwrule none -superuser none -protocol any "
                  fi  # ${EC} -ne 0
                  SSHCMD ${CLUSTER} "qtree modify -vserver ${SVM} -volume ${VOL} -qtree ${QTREE} -export-policy none"
                  echo "  DONE:"
                  SSHCMD ${CLUSTER} "qtree rename -vserver ${SVM} -volume ${VOL} -qtree ${QTREE} -newname ${QTREE}_AUTO_${YEARDAY}_${IN_COMMENT}"
                  echo "  DONE: qtree renamed "
                  SSHCMD ${CLUSTER} "qtree show -vserver ${SVM} -volume ${VOL} -qtree ${QTREE}_AUTO_${YEARDAY}_${IN_COMMENT} -field export"
##                SSHCMD ${CLUSTER} "export-policy rule show -vserver ${SVM} -policy ${EXPORT} -field policy,client"
                  echo "0" > ${TMP}.xc
                else  # ENAbled
                  echo "  OK. But NOT ENAbled. So not executed."
                  echo "0" > ${TMP}.xc
                fi  # ENAbled
              else  # EC=0
                echo "  ERROR(10): SVM,Volume,Qtree,Export-policy information NOT correct (${SVM} ${VOL} ${QTREE} ${EXPORT}). Cannot proceed with 'remove-export'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
                cat ${TMP} >> ${LAST}
                echo "10" > ${TMP}.xc
              fi  # EC=0
            else
              echo "  ERROR(11): cDOT-cluster-name NOT found for SVM (${SVM}). Cannot proceed with 'list'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
              echo "11" > ${TMP}.xc
            fi  # CLUSTER
          else
            echo "  ERROR(12): FSOD_CLUSTER_VSERVER_CSV (${FSOD_CLUSTER_VSERVER_CSV}) NOT found. Cannot proceed with 'list'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
            echo "12" > ${TMP}.xc
          fi  # FSOD_CLUSTER_VSERVER_CSV
        else  # SVM != "" ...
          echo "  ERROR(13): Var SVM, VOL, QTREE & EXPORT are empty. Maybe due to filters (${SVM_FILTER}, ${VOL_FILTER}) at input (${IN_SVM}, ${IN_VOL}, ${IN_QTREE}, ${IN_EXPORT_POLICY}). Cannot proceed with 'remove-export'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
          echo "13" > ${TMP}.xc
        fi  # SVM != "" ...

# Clean-up of DATADIR
        ls -1 ${DATADIR}/${SVM}-${VOL}-${QTREE}_export-policy-rule_*.asc > ${TMP}
        LINES=`cat ${TMP}|wc -l`
        REMLINES=`expr ${LINES} - ${DATADIRRET}`
        if [ ${REMLINES} -lt 0 ]; then
          REMLINES=0
        fi
        cat ${TMP}|head -${REMLINES}|while read LINE
        do
          echo "  Cleaning-up data-file: ${LINE}"|tee -a ${LOG}
          rm ${LINE}
        done  # rm lines

#        else
#          echo "  ERROR(14): ${PGM} NOT ENAbled. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
#          echo "14" > ${TMP}.xc
#
#        fi  # ENAbled
        ;;


# UNremove-export
      unremove-export)
        # Checks against FILTERs
        SVM=`echo "${IN_SVM}"|grep "${SVM_FILTER}"`
        AGGR=""
        VOL=`echo "${IN_VOL}"|grep "${VOL_FILTER}"`
        QTREE=`echo "${IN_QTREE}"`

        # Check if SVM , VOL, QTREE, EXPORT if not empty
        if [ "${SVM}" != "" ] && [ "${VOL}" != "" ] && [ "${QTREE}" != "" ]; then
          echo "  UNREMOVE-EXPORT: of SVM=${SVM} VOL=${VOL} QTREE=${QTREE} "|tee -a ${LAST}
          LASTFILE=`ls -1 ${DATADIR}/${SVM}-${VOL}-${QTREE}_export-policy -rule_*.asc|tail -1`
# Check for last datafile
          if [ "${LASTFILE}" != "" ]; then
            if [ -f ${LASTFILE} ]; then
              CLUSTER=`grep "CLUSTER=" ${LASTFILE}|cut -d\= -f2`
              SVM=`grep "SVM=" ${LASTFILE}|cut -d\= -f2`
              VOL=`grep "VOL=" ${LASTFILE}|cut -d\= -f2`
              QTREE=`grep "QTREE=" ${LASTFILE}|cut -d\= -f2`
              EXPORT=`grep "EXPORT=" ${LASTFILE}|cut -d\= -f2`
              if [ "${CLUSTER}" != "" ]; then
                echo "    CLUSTER=${CLUSTER} SVM=${SVM} VOL=${VOL} QTREE=${QTREE} with EXPORT=${EXPORT} found ..."|tee -a ${LAST}

# Check 1st if ENAbled
                if [ -f ${STATUSENA} ]; then
# Check is EXPORT policy exists
                  SSHCMD ${CLUSTER} "export-policy rule show -vserver ${SVM} -policyname ${EXPORT}" 1> /dev/null 2>&1
                  EC=${?}
                  if [ ${EC} -eq 0 ]; then
# Export policy exists
                    echo "  ${EXPORT} exists. Modifying to Qtree again ..."
# Now check if export "none" exists onto Qtree. If not, then has already been modyfied
##                    SSHCMD ${CLUSTER} "qtree show -vserver ${SVM} -volume ${VOL} -qtree ${QTREE} -export-policy none -field export" 1>/dev/null 2>&1
                    SSHCMD ${CLUSTER} "qtree show -vserver ${SVM} -volume ${VOL} -qtree ${QTREE}_AUTO_* -export-policy none -field export" 1>/dev/null 2>&1
                    EC=${?}
                    if [ ${EC} -eq 0 ]; then
                      SSHCMD ${CLUSTER} "qtree show -vserver ${SVM} -volume ${VOL} -fields qtree" |grep _AUTO_|grep ${QTREE}|awk '{print $3}'|read NEWNAME
                      echo "  ${NEWNAME} exists. Modifying to Qtree name again ..."

                      SSHCMD ${CLUSTER} "qtree rename -vserver ${SVM} -volume ${VOL} -qtree ${NEWNAME} -newname ${QTREE}"
                      SSHCMD ${CLUSTER} "qtree modify -vserver ${SVM} -volume ${VOL} -qtree ${QTREE} -export-policy ${EXPORT}"
                      echo "  DONE: "
                      SSHCMD ${CLUSTER} "qtree show -vserver ${SVM} -volume ${VOL} -qtree ${QTREE} -export-policy * -field export"
                      echo "0" > ${TMP}.xc
                    else
                      echo "  ERROR(15): An EXPORT has alread been added (modified) to the Qtree. Because 'none' does not exist)"|tee -a ${LOG} ${LAST}
                      echo "15" > ${TMP}.xc
                    fi  # [ ${EC} -eq 0 ]
                  else
                    echo "  ERROR(16): EXPORT (${EXPORT}) NOT found. Cannot proceed with 'unremove-export'." |tee -a ${LOG} ${LAST}
                    echo "16" > ${TMP}.xc
                  fi  # [ ${EC} -eq 0 ]

                else
                  echo "  OK. But NOT ENAbled. So not executed."
                  echo "0" > ${TMP}.xc
                fi  # ENAbled

              fi  # [ "${CLUSTER}" != "" ]
            fi  # [ -f ${LASTFILE} ]
          else
            echo "  ERROR(17): A file with ${DATADIR}/${SVM}-${VOL}-${QTREE}_export-policy-rule NOT found. Cannot proceed with 'unremove-export'." |tee -a ${LOG} ${LAST}
            echo "17" > ${TMP}.xc

          fi  # [ "${LASTFILE}" != "" ]
        else  # [ "${SVM}" != "" ] && [ "${VOL}" != "" ] && [ "${QTREE}" != "" ]
          echo "  ERROR(18): Var SVM, VOL, QTREE & EXPORT are empty. Maybe due to filters (${SVM_FILTER}, ${VOL_FILTER}) at input (${IN_SVM}, ${IN_VOL}, ${IN_QTREE}, ${IN_EXPORT_POLICY}). Cannot proceed with 'unremove-export'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
          echo "18" > ${TMP}.xc

        fi  # SVM != ""

        ;;

# Qtree-create
      create-qtree)
        # Check 1st if ENAbled
        if [ -f ${STATUSENA} ]; then
          # Checks against FILTERs
          SVM=`echo "${IN_SVM}"|grep "${SVM_FILTER}"`
          AGGR=""
          VOL=`echo "${IN_VOL}"|grep "${VOL_FILTER}"`
          QTREE=`echo "${IN_QTREE}"`
          QSIZE=`echo "${IN_QSIZE}"|cut -d' ' -f1`

# Check if SVM , VOL, QTREE, EXPORT if not empty
          echo "  SVM=${SVM} VOL=${VOL} QTREE=${QTREE} QSIZE=${QSIZE}GB"|tee -a ${LAST}
          if [ "${SVM}" != "" ] && [ "${VOL}" != "" ] && [ "${QTREE}" != "" ] && [ "${QSIZE}" != "" ]; then
            echo "  CREATE-QTREE: SVM=${SVM} VOL=${VOL} QTREE=${QTREE} QSIZE=${QSIZE} GB"|tee -a ${LAST}
# find the SVM at a cluster, using the CSV-file AND check against CLUSTER_FILTER
            if [ -f ${FSOD_CLUSTER_VSERVER_CSV} ]; then
              CLUSTER=`grep "${SVM}" ${FSOD_CLUSTER_VSERVER_CSV}|awk -F\; '{print $1}'|grep ${CLUSTER_FILTER}|head -1`
              if [ "${CLUSTER}" != "" ]; then
                echo "    CLUSTER=${CLUSTER}"|tee -a ${LAST}
# Check if volume exists. Otherwise ERROR.
                SSHCMD ${CLUSTER} "volume show -vserver ${SVM} -volume ${VOL} -field volume " 1> /dev/null
                EC=${?}
                echo ${EC} > ${TMP}.xc
                if [ ${EC} -eq 0 ]; then
                  echo "    VOL=${VOL}"
# Check if Qtree already exists. If NOT (EC <> 0), then create
                  SSHCMD ${CLUSTER} "qtree show -vserver ${SVM} -volume ${VOL} -qtree ${QTREE} -field volume,security,export" 1> /dev/null
                  EC=${?}
                  if [ ${EC} -eq 0 ]; then
                    echo "  ERROR(20): Qtree (${QTREE}) exists. Cannot proceed with '${IN_CMD}'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
                    echo "20" > ${TMP}.xc
                  else
                    POLICYNAME=`echo "${SVM}"|awk -F"nlnafs" '{print $2}' `
                    SSHCMD ${CLUSTER} "qtree create -vserver ${SVM} -volume ${VOL} -qtree ${QTREE} -security-style ${SECUSTYLE}"
                    SSHCMD ${CLUSTER} "vol size -vserver ${SVM} -volume ${VOL} -new-size +${QSIZE}g"
                    SSHCMD ${CLUSTER} "volume quota policy rule create -vserver ${SVM} -policy-name ${POLICYNAME} -volume ${VOL} -type tree -target ${QTREE} -disk-limit ${QSIZE}g"
                    SSHCMD ${CLUSTER} "quota off -vserver ${SVM} -volume ${VOL}"
                    SSHCMD ${CLUSTER} "quota on -vserver ${SVM} -volume ${VOL}"
                    SSHCMD ${CLUSTER} "qtree show -vserver ${SVM} -volume ${VOL} -qtree ${QTREE} -field volume,security,export"

                  fi  # [ ${EC} -eq 0 ]

                else
                  echo "  ERROR(21): volume ${VOL} NOT found at the SVM (${SVM}). Cannot proceed with '${IN_CMD}'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
                  echo "21" > ${TMP}.xc
                fi  # ${EC} -eq 0
              else
                echo "  ERROR(22): cDOT-cluster-name NOT found for SVM (${SVM}). Cannot proceed with '${IN_CMD}'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
                echo "22" > ${TMP}.xc
              fi  # CLUSTER
            else
              echo "  ERROR(23): FSOD_CLUSTER_VSERVER_CSV (${FSOD_CLUSTER_VSERVER_CSV}) NOT found. Cannot proceed with '${IN_CMD}'. [${PGM} v${VER}]"| tee -a ${LOG} ${LAST}
              echo "23" > ${TMP}.xc
            fi  # FSOD_CLUSTER_VSERVER_CSV
          else
            echo "  ERROR(24): Var SVM, VOL, QTREE & QSIZE are empty. Maybe due to filters (${SVM_FILTER}, ${VOL_FILTER}) at input (${IN_SVM}, ${IN_VOL}, ${IN_QSIZE}). Cannot proceed with '${IN_CMD}'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
            echo "24" > ${TMP}.xc
          fi  # [ "${SVM}" != "" ] && [ "${VOL}" != "" ] && [ "${QTREE}" != "" ]

        fi  # ENAbled
        ;;  # qtree-create

# Quota-resize
      quota-resize)
        # Check 1st if ENAbled
        if [ -f ${STATUSENA} ]; then
         # Checks against FILTERs
          SVM=`echo "${IN_SVM}"|grep "${SVM_FILTER}"`
          AGGR=""
          VOL=`echo "${IN_VOL}"|grep "${VOL_FILTER}"`
          QTREE=`echo "${IN_QTREE}"`
          QSIZE=`echo "${IN_QSIZE}"|cut -d' ' -f1`

# Check if SVM , VOL, QTREE, EXPORT if not empty
          echo "  SVM=${SVM} VOL=${VOL} QTREE=${QTREE} QSIZE=${QSIZE}GB"|tee -a ${LAST}
          if [ "${SVM}" != "" ] && [ "${VOL}" != "" ] && [ "${QTREE}" != "" ] && [ "${QSIZE}" != "" ]; then
            echo "  QUOTA-RESIZE: SVM=${SVM} VOL=${VOL} QTREE=${QTREE} QSIZE=${QSIZE} GB"|tee -a ${LAST}
# find the SVM at a cluster, using the CSV-file AND check against CLUSTER_FILTER
            if [ -f ${FSOD_CLUSTER_VSERVER_CSV} ]; then
              CLUSTER=`grep "${SVM}" ${FSOD_CLUSTER_VSERVER_CSV}|awk -F\; '{print $1}'|grep ${CLUSTER_FILTER}|head -1`
              if [ "${CLUSTER}" != "" ]; then
                echo "    CLUSTER=${CLUSTER}"|tee -a ${LAST}
# Check if volume exists. Otherwise ERROR.
                SSHCMD ${CLUSTER} "volume show -vserver ${SVM} -volume ${VOL} -field volume " 1> /dev/null
                EC=${?}
                echo ${EC} > ${TMP}.xc
                if [ ${EC} -eq 0 ]; then
                  echo "    VOL=${VOL}"
# Check if Qtree exists. Otherwise ERROR.
                  SSHCMD ${CLUSTER} "qtree show -vserver ${SVM} -volume ${VOL} -qtree ${QTREE} -field volume,security,export" 1> /dev/null
                  EC=${?}
                  echo ${EC} > ${TMP}.xc
                  if [ ${EC} -eq 0 ]; then
# Check if Quota exists. Otherwise ERROR.
                    SSHCMD ${CLUSTER} "set -units GB ;volume quota policy rule show -vserver ${SVM} -volume ${VOL} -target ${QTREE} -fields disk-limit" 1> /dev/null
                    EC=${?}
                    echo ${EC} > ${TMP}.xc
                    if [ ${EC} -eq 0 ]; then

                      SSHCMD ${CLUSTER} "set -units GB ;volume quota policy rule show -vserver ${SVM} -volume ${VOL} -target ${QTREE} -fields disk-limit" |grep ${SVM} |awk '{print $2";"$7}'  |read QUOTADEF
                      #ssh nlnaf102 "set -units GB ;volume quota policy rule show -vserver nlnafsmss12 -volume mss12_vol01001 -target qtree3 -fields disk-limit"|grep nlnafsmss12 |awk '{print $2";"$7}'  |read QUOTADEF
                        POLICYNAME=`echo "${QUOTADEF}"|awk -F";" '{print $1}'`
                        DISKLIMIT=`echo "${QUOTADEF}"|awk -F";" '{print $2}'`
                        OLD_QUOTA=`echo "${DISKLIMIT}"|awk -F"GB" '{print $1}'`
                        if [ "${DISKLIMIT}" = "-" ] ; then
                          DISKLIMIT=`echo "${QSIZE}"`
                          OLD_QUOTA="-1"
                        fi

                          let "NEWSIZE= ${QSIZE} - ${OLD_QUOTA}"
                          echo "    NEW(volume)SIZE=${NEWSIZE}"
                          NEWSIZESTR="+${NEWSIZE}g"
                          if [ ${NEWSIZE} -lt 0 ]; then
                            NEWSIZESTR="${NEWSIZE}g"
                          fi  # <
                          SSHCMD ${CLUSTER} "volume quota policy rule show -vserver ${SVM} -volume ${VOL}"|grep Policy|awk '{print $4}' 
# Do volumes size only when "NEWSIZE <> 0
                          if [ ${NEWSIZE} -ne 0 ]; then
                            echo "      NEWSIZESTR=${NEWSIZESTR}"
                            SSHCMD ${CLUSTER} "volume size -vserver ${SVM} -volume ${VOL} -new-size ${NEWSIZESTR}"
                          fi
                          SSHCMD ${CLUSTER} "volume quota policy rule modify -vserver ${SVM} -policy-name ${POLICYNAME} -volume ${VOL} -type tree -target ${QTREE} -disk-limit ${QSIZE}g"
                          SSHCMD ${CLUSTER} "quota resize -vserver ${SVM} -volume ${VOL}"
                          SSHCMD ${CLUSTER} "df -g ${VOL}"
                          sleep 3
                          SSHCMD ${CLUSTER} "quota report -vserver ${SVM} -volume ${VOL}"

                    else
                      echo "  ERROR(31): Quota (${QSIZE}) NOT found at the QTREE (${SVOL}). Cannot proceed with '${IN_CMD}'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
                          POLICYNAME=`echo "${SVM}"|awk -F"nlnafs" '{print $2}'`
                          SSHCMD ${CLUSTER} "volume quota policy rule create -vserver ${SVM} -policy-name ${POLICYNAME} -volume ${VOL} -type tree -target ${QTREE} -disk-limit ${QSIZE}g"
                          SSHCMD ${CLUSTER} "quota on -vserver ${SVM} -volume ${VOL}"
                      echo "  Try to run script again... "|tee -a ${LOG} ${LAST}
                      echo "31" > ${TMP}.xc
                    fi  # [ ${EC} -eq 0 ]
                  else
                    echo "  ERROR(32): Qtree (${QTREE}) NOT found at the VOLUME (${SVOL}). Cannot proceed with '${IN_CMD}'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
                    echo "32" > ${TMP}.xc
                  fi  # [ ${EC} -eq 0 ]
                else
                  echo "  ERROR(33): volume ${VOL} NOT found at the SVM (${SVM}). Cannot proceed with '${IN_CMD}'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
                  echo "33" > ${TMP}.xc
                fi  # ${EC} -eq 0
              else
                echo "  ERROR(34): cDOT-cluster-name NOT found for SVM (${SVM}). Cannot proceed with '${IN_CMD}'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
                echo "34" > ${TMP}.xc
              fi  # CLUSTER
            else
              echo "  ERROR(35): FSOD_CLUSTER_VSERVER_CSV (${FSOD_CLUSTER_VSERVER_CSV}) NOT found. Cannot proceed with '${IN_CMD}'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
              echo "35" > ${TMP}.xc
            fi  # FSOD_CLUSTER_VSERVER_CSV
          else
            echo "  ERROR(36): Var SVM, VOL, QTREE & QSIZE are empty. Maybe due to filters (${SVM_FILTER}, ${VOL_FILTER}) at input (${IN_SVM}, ${IN_VOL}, ${IN_QSIZE}). Cannot proceed with '${IN_CMD}'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
            echo "36" > ${TMP}.xc
          fi  # [ "${SVM}" != "" ] && [ "${VOL}" != "" ] && [ "${QTREE}" != "" ]

        fi  # ENAbled
        ;;  # quota_resize

# Create-volume
      create-volume)
        # Check 1st if NOT DISabled
        if [ ! -f ${STATUSDIS} ]; then
          # Checks against FILTERs
          SVM=`echo "${IN_SVM}"|grep "${SVM_FILTER}"`
          CUSTCODE=`echo "${SVM}"|cut -c7-`
          if [ "${IN_SVM}" = "*" ]; then
            SVM="*"
          fi  # *
          CLASS=`echo "${IN_AGGR}" | tr '[:upper:]' '[:lower:]'`
          # Check if SVM & CLASS if not empty
          if [ "${SVM}" != "" ] && [ "${CLASS}" != "" ]; then
            echo "  CREATE-VOLUME: of SVM=${SVM}  CLASS=${CLASS}"|tee -a ${LAST}

# find the SVM at a cluster, using the CSV-file AND check against CLUSTER_FILTER
            if [ -f ${FSOD_CLUSTER_VSERVER_CSV} ]; then
              CLUSTER=`grep "${SVM}" ${FSOD_CLUSTER_VSERVER_CSV}|awk -F\; '{print $1}'|grep ${CLUSTER_FILTER}|head -1`
              if [ "${CLUSTER}" != "" ]; then
                echo "    CLUSTER=${CLUSTER}"|tee -a ${LAST}
# Check if class exists. Otherwise ERROR.
                for CLASS in `echo $CLASS | tr '[:upper:]' '[:lower:]'`
                do
                  if  [ ${CLASS} == "platina" ]
                  # Platina is only SSD
                  then AGGRCLASS="n[0-9][0-9]a38[0-9][0-9]"
                  elif  [ ${CLASS} == "gold" ]
                  # Gold is SAS and also SSD
                  then AGGRCLASS="n[0-9][0-9]a[013][6928][0-9][0-9]"
                  elif [ ${CLASS} == "silver" ]
                  then AGGRCLASS="n[0-9][0-9]a20[0-9][0-9]"
                  elif [ ${CLASS} == "bronze" ]
                  then  AGGRCLASS="n[0-9][0-9][ace][348]0[0-9][0-9]"
                  else
                    EC=${?}
                    echo ${EC} > ${TMP}.xc
                    if [ ${EC} -eq 0 ]; then
                      echo "Error CLASS=${CLASS}"
                    fi
                  fi
                done
                echo ${AGGRCLASS}

# create-volume: cmd
                for COUNT in `SSHCMD ${CLUSTER} "vol show -vserver ${SVM}" |grep vol01|grep -v vol0199|awk '{print $2}'|tail -1|cut -c11-`
                do
                  if  [ ${COUNT} -lt 1600 ]
                  then COUNT="1601"
                  else
                   COUNT=`expr ${COUNT} + 1`
                  fi
                  NEW_VOLUME="${CUSTCODE}_vol0${COUNT}"
                done

                CAPACITY=`SSHCMD ${CLUSTER} "df -g -A" |grep ${AGGRCLASS}|grep -v snapshot |awk '{print $5}'|sort|head -1`
                AGGREGATE=`SSHCMD ${CLUSTER} "df -g -A" |grep ${AGGRCLASS} |grep -v snapshot |grep ${CAPACITY} |awk '{print $1}'`
                if  [ "${IN_COMMENT}" == "" ]
                then IN_COMMENT="automation"
                fi

#                echo "SSHCMD ${CLUSTER} 'volume create -vserver ${SVM} -volume ${NEW_VOLUME} -aggregate ${AGGREGATE} -size 1g -junction-path /${NEW_VOLUME} -state online -type RW -unix-permissions ---rwxr-xr-x -space-guarantee none -snapshot-policy none -foreground true -percent-snapshot-space 0 -autosize-grow-threshold-percent 85 -autosize-shrink-threshold-percent 75 -autosize-mode grow_shrink -max-autosize 5000g -comment ${IN_COMMENT}' "|tee -a ${CMDFILE} ${LOG} ${LAST}
                SSHCMD ${CLUSTER} "volume create -vserver ${SVM} -volume ${NEW_VOLUME} -aggregate ${AGGREGATE} -size 1g -junction-path /${NEW_VOLUME} -state online -type RW -unix-permissions ---rwxr-xr-x -space-guarantee none -snapshot-policy none -foreground true -percent-snapshot-space 0 -autosize -grow-threshold-percent 85 -autosize-shrink-threshold-percent 75 -autosize- mode grow_shrink -max-autosize 5000g -comment ${IN_COMMENT}"|tee -a ${LAST}
                SSHCMD ${CLUSTER} "volume modify -vserver ${SVM} -volume ${NEW_VOLUME} -qos-policy-group ${SVM}_${CLASS} "|tee -a ${LAST}

                AFF_AGGREGATE=`echo "${AGGREGATE}"|grep "n[0-9][0-9]a38[0=
-9][0-9]"`
                if  [ "${AFF_AGGREGATE}" != "" ]
                then
                  SSHCMD ${CLUSTER} "volume efficiency on -vserver ${SVM} -volume ${NEW_VOLUME}"|tee -a ${LAST}
                  SSHCMD ${CLUSTER} "volume efficiency modify -vserver ${SVM} -volume ${NEW_VOLUME} -policy auto -compression true -inline-compression true -inline-dedupe true  -cross-volume-inline-dedupe true -cross-volume-background-dedupe true"|tee -a ${LAST}
                  SSHCMD ${CLUSTER} "volume efficiency start -vserver ${SVM} -volume ${NEW_VOLUME} -scan-old-data true"|tee -a ${LAST}
                fi

                echo "New created volume:"
                echo ${NEW_VOLUME}
                EC=${?}
                echo "---------- (EC=${EC}) ----------"|tee -a ${CMDFILE} ${LAST}
                echo ${EC} > ${TMP}.xc
              else
                echo "  ERROR(41): cDOT-cluster-name NOT found for SVM (${SVM}). Cannot proceed with 'list'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
                echo "41" > ${TMP}.xc
              fi  # CLUSTER
            else
              echo "  ERROR(42): FSOD_CLUSTER_VSERVER_CSV (${FSOD_CLUSTER_VSERVER_CSV}) NOT found. Cannot proceed with 'list'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
              echo "42" > ${TMP}.xc
            fi  # FSOD_CLUSTER_VSERVER_CSV
          else
            echo "  ERROR(43): Var SVM or CLASS is empty. Maybe due to filter (${SVM_FILTER} at input (${IN_SVM}, ${IN_AGGR}). Cannot proceed with 'create-volume'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
            echo "43" > ${TMP}.xc
          fi  # SVM != ""

        else
          echo "  ERROR(44): ${PGM} NOT ENAbled. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
          echo "44" > ${TMP}.xc
        fi  # ENAbled
        ;;


# WILDCARD
      *) echo "  ERROR(25): ${IN_CMD} = wrong command. Use 'help' for more info (`date +%Y-%m-%d-%H-%M-%S`) [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
         echo "25" > ${TMP}.xc
         ;;

    esac
  fi  # if .. != ""

done

rm ${TMP}
XC=`cat ${TMP}.xc`
echo "`date +%Y-%m-%d' '%H:%M:%S` ${PGM} v${VER} finished (XC=${XC})."|tee -a ${LOG} ${LAST}
exit ${XC}


