#!/bin/ksh
set +x
# File      : proc_ssh_input.sh
# By       : Maarten.deBoer@Atos.net<mailto:Maarten.deBoer@Atos.net>, 18072=
4
# 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 disab=
le 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), A=
dded -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
#set -x
PGM=3D`basename $0|cut -d\. -f1`
VER=3D"0.33"
TMP=3D"/tmp/${PGM}.$$"
LOG=3D"${HOME}/log/${PGM}.log"
HBFILE=3D"${HOME}/data/heartbeat"
PROCFILE=3D"${HOME}/data/procfile"
CLUSTERS=3D"${HOME}/etc/clusters"
SSH=3D"/usr/bin/ssh -n"
OUT=3D"${TMP}.out"
LAST=3D"${HOME}/data/${PGM}.last"
STATUSENA=3D"${HOME}/data/${PGM}.enable"
STATUSDIS=3D"${HOME}/data/${PGM}.disable"
FSOD_CLUSTER_VSERVER_CSV=3D"/home/aodfm01a/export/fsod-clusters-vservers.cs=
v"
CMDFILE=3D"${HOME}/data/${PGM}.cmd"
INFO=3D"${HOME}/data/${PGM}.info"
DATADIR=3D"${HOME}/data"
# 14 days of retention of the DATADIR-data
DATADIRRET=3D14
# 14 days of retention of decommissioned qtrees
DAYRET=3D14
YEARDAY=3D`date '+%Y%j'`
SECUSTYLE=3D"unix"
XC=3D0
HOSTNAME=3D`hostname|cut -d\. -f1`
RCFILE=3D"${HOME}/etc/${PGM}.rc"

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


# VER=3D"0.1", <node>-04
# VER=3D"0.2", <node>-06
# VER=3D"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." =3D> EC=3D255
# "no connection" is also EC=3D255
{
  TMPERR=3D"/tmp/${PGM}.$$.tmperr"
 touch ${TMPERR}
  /usr/bin/ssh -n ${1} "${2}" 2> ${TMPERR}
  EC=3D${?}
  # Check if "ssh: connect to host 10.192.109.202 port 22: Connection refus=
ed" If so (EC2=3D0), the 2nd
  grep 'Connection refused' ${TMPERR}
  EC2=3D${?}
  if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
    sleep 1
    /usr/bin/ssh -n ${1}-01 "${2}" 2> ${TMPERR}
    EC=3D${?}
    grep 'Connection refused' ${TMPERR}
    EC2=3D${?}
    if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
      sleep 1
      /usr/bin/ssh -n ${1}-02 "${2}" 2> ${TMPERR}
      EC=3D${?}
      grep 'Connection refused' ${TMPERR}
      EC2=3D${?}
      if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
        sleep 1
        /usr/bin/ssh -n ${1}-03 "${2}" 2> ${TMPERR}
        EC=3D${?}
        grep 'Connection refused' ${TMPERR}
        EC2=3D${?}
        if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
          sleep 1
          /usr/bin/ssh -n ${1}-04 "${2}" 2> ${TMPERR}
          EC=3D${?}
          grep 'Connection refused' ${TMPERR}
          EC2=3D${?}
          if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
            sleep 1
            /usr/bin/ssh -n ${1}-05 "${2}" 2> ${TMPERR}
            EC=3D${?}
            grep 'Connection refused' ${TMPERR}
            EC2=3D${?}
            if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
              sleep 1
              /usr/bin/ssh -n ${1}-06 "${2}" 2> ${TMPERR}
              EC=3D${?}
              grep 'Connection refused' ${TMPERR}
              EC2=3D${?}
              if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
                sleep 1
                /usr/bin/ssh -n ${1}-07 "${2}" 2> ${TMPERR}
                EC=3D${?}
                grep 'Connection refused' ${TMPERR}
                EC2=3D${?}
                if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
                  sleep 1
                  /usr/bin/ssh -n ${1}-08 "${2}" 2> ${TMPERR}
                  EC=3D${?}
                  grep 'Connection refused' ${TMPERR}
                  EC2=3D${?}
                  if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
                    sleep 1
                    /usr/bin/ssh -n ${1}-09 "${2}" 2> ${TMPERR}
                    EC=3D${?}
                    grep 'Connection refused' ${TMPERR}
                    EC2=3D${?}
                    if [ ${EC} -ne 0 ] && [ ${EC2} -eq 0 ]; then
                      sleep 1
                      /usr/bin/ssh -n ${1}-10 "${2}" 2> ${TMPERR}
                      EC=3D${?}
                      grep 'Connection refused' ${TMPERR}
                      EC2=3D${?}
                      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> | ${PG=
M}.sh'"
  echo "      Like (remote): 'echo <text> | ssh <user>@<host>' OR 'cat <fil=
e> | ssh <user>@<host>'"
  echo "    syntax: '<cmd> ; <comment> ; <svm> ; <aggr>|* ; <volume>|* ; <q=
tree>|* ; <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>;*;<volum=
e>;<qtree>;)"
  echo "      - create-qtree (create-qtree;[<comment>];<svm>;*;<volume>;<qt=
ree>;;<n>[GB])"
  echo "      - quota-resize (quota-resize;[<comment>];<svm>;*;<volume>;<qt=
ree>;;<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=3D${?}
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=3D`echo ${LINE}|awk -F\; '{print $1}'`
  IN_COMMENT=3D`echo ${LINE}|awk -F\; '{print $2}'`
  IN_SVM=3D`echo ${LINE}|awk -F\; '{print $3}'`
  IN_AGGR=3D`echo ${LINE}|awk -F\; '{print $4}'`
  IN_VOL=3D`echo ${LINE}|awk -F\; '{print $5}'`
  IN_QTREE=3D`echo ${LINE}|awk -F\; '{print $6}'`
  IN_EXPORT_POLICY=3D`echo ${LINE}|awk -F\; '{print $7}'`
  IN_QSIZE=3D`echo ${LINE}|awk -F\; '{print $8}'`

  # do, when IN_CMD is not empty

  if [ "${IN_CMD}" !=3D "" ]; then
    case ${IN_CMD} in
      help)
        USAGE
        echo "  HELP: "|tee -a ${LOG} ${LAST}
        ;;
      version)  echo "  VERSION: ${VER} [${PGM} v${VER}]"|tee -a ${LOG} ${L=
AST} ;;
      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=3D${CLUSTER_FILTER}"|tee -a ${LAST}
        echo "    SVM_FILTER=3D${SVM_FILTER}"|tee -a ${LAST}
        echo "    AGGR_FILTER=3D${AGGR_FILTER}"|tee -a ${LAST}
        echo "    LIF_FILTER=3D${LIF_FILTER}"|tee -a ${LAST}
        echo "    VOL_FILTER=3D${VOL_FILTER}"|tee -a ${LAST}
        echo "    QTREE_FILTER=3D${QTREE_FILTER}"|tee -a ${LAST}
        if [ -f ${STATUSENA} ]; then
          echo "  STATUS: ENAbled(-file found). (actions, like (un)remove-e=
xport, 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)). (actio=
ns 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=3D`echo "${IN_SVM}"|grep "${SVM_FILTER}"`
          AGGR=3D`echo "${IN_AGGR}"|grep "${AGGR_FILTER}"`
          if [ "${IN_AGGR}" =3D "*" ]; then
            AGGR=3D"*"
          fi  # *
          VOL=3D`echo "${IN_VOL}"|grep "${VOL_FILTER}"`
          if [ "${IN_VOL}" =3D "*" ]; then
            VOL=3D"*"
          fi  # *
          QTREE=3D`echo "${IN_QTREE}"`
          EXPORT_POLICY=3D`echo "${IN_EXPORT_POLICY}"`
          if [ "${IN_EXPORT_POLICY}" =3D "*" ]; then
            EXPORT_POLICY=3D"*"
          fi  # *
          QSIZE=3D`echo "${IN_QSIZE}"`
          if [ "${IN_QSIZE}" =3D "*" ]; then
            QSIZE=3D"*"
          fi  # *

          echo "  LIST: of SVM=3D${SVM} (AGGR=3D${AGGR}) VOL=3D${VOL} (QTRE=
E=3D${QTREE}) (EXPORT_POLICY=3D${EXPORT_POLICY}) (QSIZE=3D${QSIZE}) "|tee -=
a ${LAST}
          # Check is SVM if not empty
          if [ "${SVM}" !=3D "" ] && [ "${VOL}" !=3D "" ]; then
# find the SVM at a cluster, using the CSV-file AND check against CLUSTER_F=
ILTER
            if [ -f ${FSOD_CLUSTER_VSERVER_CSV} ]; then
              CLUSTER=3D`grep "${SVM}" ${FSOD_CLUSTER_VSERVER_CSV}|awk -F\;=
 '{print $1}'|grep ${CLUSTER_FILTER}|head -1`
              if [ "${CLUSTER}" !=3D "" ]; then
                echo "    CLUSTER=3D${CLUSTER}"|tee -a ${LAST}
                # show aggr, when not empty
                if [ "${AGGR}" !=3D "" ]; 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;) ---------"|t=
ee -a ${LAST}
                  SSHCMD ${CLUSTER} "set -showseparator \";\" ; aggr show -=
aggregate ${AGGR} -field node,aggregate" | grep ${CLUSTER}|tee -a ${LAST}
                  EC=3D${?}
                  echo "---------- (EC=3D${EC}) ----------"|tee -a ${CMDFIL=
E} ${LAST}
                  echo ${EC} > ${TMP}.xc
                fi  # AGGR
                # show vol, when not empty
                if [ "${VOL}" !=3D "" ]; then
                  echo "SSHCMD ${CLUSTER} 'set -showseparator \";\" ; volum=
e 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=3D${?}
                  echo "---------- (EC=3D${EC}) ----------"|tee -a ${CMDFIL=
E} ${LAST}
                  echo ${EC} > ${TMP}.xc
                fi  # VOL
                # show qtree, when QTREE not empty
                if [ "${QTREE}" !=3D "" ]; then
                  echo "SSHCMD ${CLUSTER} 'set -showseparator \";\" ; qtree=
 show -vserver ${SVM} -volume ${VOL} -qtree ${QTREE} -field qtree,volume,ex=
port,security'|grep ${SVM}"|tee -a ${CMDFILE} ${LOG} ${LAST} > /dev/null
                  echo "---------- qtree (vserver;volume;qtree;security-sty=
le;export-policy) ----------"|tee -a ${LAST}
                  SSHCMD ${CLUSTER} "set -showseparator \";\" ; qtree show =
-vserver ${SVM} -volume ${VOL} -qtree ${QTREE} -field qtree,volume,export,s=
ecurity"|grep ${SVM}|tee -a ${LAST}
                  EC=3D${?}
                  echo "---------- (EC=3D${EC}) ----------"|tee -a ${CMDFIL=
E} ${LAST}

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

                if [ "${QSIZE}" !=3D "" ]; then
                  echo "SSHCMD ${CLUSTER} 'set -showseparator \";\" ; quota=
 policy rule show -vserver ${SVM} -volume ${VOL} -disk-limit ${QSIZE} -fiel=
d vserver,volume,target,disk-limit,file-limit'|grep ${SVM} " |tee -a ${CMDF=
ILE} ${LOG} ${LAST} > /dev/null
                  echo "---------- quota (vserver;policy-name;volume;type;t=
arget;qtree;disk-limit;file-limit;) ----------"|tee -a ${LAST}
                  SSHCMD ${CLUSTER} "set -showseparator \";\" ; quota polic=
y rule show -vserver ${SVM} -volume ${VOL} -target ${QTREE} -disk-limit ${Q=
SIZE} -field vserver,volume,target,disk-limit,file-limit"|grep ${SVM} |tee =
-a ${LAST}
                  EC=3D${?}
                  echo "---------- (EC=3D${EC}) ----------"|tee -a ${CMDFIL=
E} ${LAST}
                  echo ${EC} > ${TMP}.xc
                fi  # Size


              else
                echo "  ERROR(2): cDOT-cluster-name NOT found for SVM (${SV=
M}). 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_VS=
ERVER_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_A=
GGR}, ${IN_VOL}). Cannot proceed with 'list'. [${PGM} v${VER}]"|tee -a ${LO=
G} ${LAST}
            echo "4" > ${TMP}.xc
          fi  # SVM !=3D ""
        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=3D`echo "${IN_SVM}"|grep "${SVM_FILTER}"`
          if [ "${IN_SVM}" =3D "*" ]; then
            SVM=3D"*"
          fi  # *
          LIF=3D`echo "${IN_AGGR}"|grep "${LIF_FILTER}"`
          # Check if SVM & LIF if not empty
          if [ "${SVM}" !=3D "" ] && [ "${LIF}" !=3D "" ]; then
            echo "  SHOW-LIF: of SVM=3D${SVM}  LIF=3D${LIF}"|tee -a ${LAST}
# Get SVM-part from LIF-name
            SVM_PART=3D`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}" =3D "*" ]; then
                CLUSTER=3D`grep "${SVM_PART}" ${FSOD_CLUSTER_VSERVER_CSV}|a=
wk -F\; '{print $1}'|grep ${CLUSTER_FILTER}|head -1`
              else
                CLUSTER=3D`grep "${SVM}" ${FSOD_CLUSTER_VSERVER_CSV}|awk -F=
\; '{print $1}'|grep ${CLUSTER_FILTER}|head -1`
              fi  # if  "${SVM}" =3D "*"
              if [ "${CLUSTER}" !=3D "" ]; then
                echo "    CLUSTER=3D${CLUSTER}"|tee -a ${LAST}
# show-lif: cmd
#                echo "SSHCMD ${CLUSTER} 'set -showseparator \";\" ; networ=
k 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 inter=
face show -vserver ${SVM} -lif ${LIF} -field vserver,address"|grep ${LIF}|t=
ee -a ${LAST}
                EC=3D${?}
                echo "---------- (EC=3D${EC}) ----------"|tee -a ${CMDFILE}=
 ${LAST}
                echo ${EC} > ${TMP}.xc
              else
                echo "  ERROR(6): cDOT-cluster-name NOT found for SVM (${SV=
M}). 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_VS=
ERVER_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 pr=
oceed with 'show-lif'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
            echo "8" > ${TMP}.xc
          fi  # SVM !=3D ""

        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=3D`echo "${IN_SVM}"|grep "${SVM_FILTER}"`
        AGGR=3D""
        VOL=3D`echo "${IN_VOL}"|grep "${VOL_FILTER}"`
        QTREE=3D`echo "${IN_QTREE}"`
        EXPORT=3D`echo "${IN_EXPORT_POLICY}"`

        # Check if SVM , VOL, QTREE, EXPORT if not empty
        echo "  SVM=3D${SVM}  AGGR=3D${AGGR}  VOL=3D${VOL} QTREE=3D${QTREE}=
 EXPORT=3D${EXPORT} "|tee -a ${LAST}
        if [ "${SVM}" !=3D "" ] && [ "${VOL}" !=3D "" ] && [ "${QTREE}" !=
=3D "" ] && [ "${EXPORT}" !=3D "" ]; then
          echo "  REMOVE-EXPORT: of SVM=3D${SVM} VOL=3D${VOL} QTREE=3D${QTR=
EE} EXPORT=3D${EXPORT}"|tee -a ${LAST}
          if [ -f ${FSOD_CLUSTER_VSERVER_CSV} ]; then
            CLUSTER=3D`grep "${SVM}" ${FSOD_CLUSTER_VSERVER_CSV}|awk -F\; '=
{print $1}'|grep ${CLUSTER_FILTER}|head -1`
            if [ "${CLUSTER}" !=3D "" ]; then
              echo "    CLUSTER=3D${CLUSTER}"|tee -a ${LAST}
              SSHCMD ${CLUSTER} "set -showseparator \";\" ;qtree show -vser=
ver ${SVM} -volume ${VOL} -qtree ${QTREE} -export-policy ${EXPORT} -field e=
xport-policy" 1> ${TMP} 2>&1
              EC=3D${?}
              echo ${EC} > ${TMP}.xc
              if [ ${EC} -eq 0 ]; then
                echo "  saving info ..."
                DATI=3D`date +%Y-%m-%d-%H-%M-%S`
                DATAFILE=3D"${DATADIR}/${SVM}-${VOL}-${QTREE}_export-policy=
-rule_${DATI}.asc"
                echo "# DATI=3D${DATI}" > ${DATAFILE}
                echo "# CLUSTER=3D${CLUSTER}" >> ${DATAFILE}
                echo "# SVM=3D${SVM}" >> ${DATAFILE}
                echo "# VOL=3D${VOL}" >> ${DATAFILE}
                echo "# QTREE=3D${QTREE}" >> ${DATAFILE}
                echo "# EXPORT=3D${EXPORT}" >> ${DATAFILE}
                SSHCMD ${CLUSTER} "set -showseparator \";\" ; export-policy=
 rule show -vserver ${SVM} -policy ${EXPORT} -field policy,client"|grep ${S=
VM} 1>> ${DATAFILE}
                EC=3D${?}
                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} -po=
licyname none"
                  EC=3D${?}
# if no "none" policy (EC<>0) then create
                  echo ${EC} > ${TMP}.xc
echo "  EC=3D${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=3D${?}
# 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 ${V=
OL} -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=3D0
                echo "  ERROR(10): SVM,Volume,Qtree,Export-policy informati=
on NOT correct (${SVM} ${VOL} ${QTREE} ${EXPORT}). Cannot proceed with 'rem=
ove-export'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
                cat ${TMP} >> ${LAST}
                echo "10" > ${TMP}.xc
              fi  # EC=3D0
            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_VSE=
RVER_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 !=3D "" ...
          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 !=3D "" ...

# Clean-up of DATADIR
        ls -1 ${DATADIR}/${SVM}-${VOL}-${QTREE}_export-policy-rule_*.asc > =
${TMP}
        LINES=3D`cat ${TMP}|wc -l`
        REMLINES=3D`expr ${LINES} - ${DATADIRRET}`
        if [ ${REMLINES} -lt 0 ]; then
          REMLINES=3D0
        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=3D`echo "${IN_SVM}"|grep "${SVM_FILTER}"`
        AGGR=3D""
        VOL=3D`echo "${IN_VOL}"|grep "${VOL_FILTER}"`
        QTREE=3D`echo "${IN_QTREE}"`

        # Check if SVM , VOL, QTREE, EXPORT if not empty
        if [ "${SVM}" !=3D "" ] && [ "${VOL}" !=3D "" ] && [ "${QTREE}" !=
=3D "" ]; then
          echo "  UNREMOVE-EXPORT: of SVM=3D${SVM} VOL=3D${VOL} QTREE=3D${Q=
TREE} "|tee -a ${LAST}
          LASTFILE=3D`ls -1 ${DATADIR}/${SVM}-${VOL}-${QTREE}_export-policy=
-rule_*.asc|tail -1`
# Check for last datafile
          if [ "${LASTFILE}" !=3D "" ]; then
            if [ -f ${LASTFILE} ]; then
              CLUSTER=3D`grep "CLUSTER=3D" ${LASTFILE}|cut -d\=3D -f2`
              SVM=3D`grep "SVM=3D" ${LASTFILE}|cut -d\=3D -f2`
              VOL=3D`grep "VOL=3D" ${LASTFILE}|cut -d\=3D -f2`
              QTREE=3D`grep "QTREE=3D" ${LASTFILE}|cut -d\=3D -f2`
              EXPORT=3D`grep "EXPORT=3D" ${LASTFILE}|cut -d\=3D -f2`
              if [ "${CLUSTER}" !=3D "" ]; then
                echo "    CLUSTER=3D${CLUSTER} SVM=3D${SVM} VOL=3D${VOL} QT=
REE=3D${QTREE} with EXPORT=3D${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=3D${?}
                  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 be=
en 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=3D${?}
                    if [ ${EC} -eq 0 ]; then
                      SSHCMD ${CLUSTER} "qtree show -vserver ${SVM} -volume=
 ${VOL} -fields qtree" |grep _AUTO_|grep ${QTREE}|awk '{print $3}'|read NEW=
NAME
                      echo "  ${NEWNAME} exists. Modifying to Qtree name ag=
ain ..."

                      SSHCMD ${CLUSTER} "qtree rename -vserver ${SVM} -volu=
me ${VOL} -qtree ${NEWNAME} -newname ${QTREE}"
                      SSHCMD ${CLUSTER} "qtree modify -vserver ${SVM} -volu=
me ${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 (m=
odified) 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}" !=3D "" ]
            fi  # [ -f ${LASTFILE} ]
          else
            echo "  ERROR(17): A file with ${DATADIR}/${SVM}-${VOL}-${QTREE=
}_export-policy-rule NOT found. Cannot proceed with 'unremove-export'." |te=
e -a ${LOG} ${LAST}
            echo "17" > ${TMP}.xc

          fi  # [ "${LASTFILE}" !=3D "" ]
        else  # [ "${SVM}" !=3D "" ] && [ "${VOL}" !=3D "" ] && [ "${QTREE}=
" !=3D "" ]
          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 !=3D ""

        ;;

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

# Check if SVM , VOL, QTREE, EXPORT if not empty
          echo "  SVM=3D${SVM} VOL=3D${VOL} QTREE=3D${QTREE} QSIZE=3D${QSIZ=
E}GB"|tee -a ${LAST}
          if [ "${SVM}" !=3D "" ] && [ "${VOL}" !=3D "" ] && [ "${QTREE}" !=
=3D "" ] && [ "${QSIZE}" !=3D "" ]; then
            echo "  CREATE-QTREE: SVM=3D${SVM} VOL=3D${VOL} QTREE=3D${QTREE=
} QSIZE=3D${QSIZE} GB"|tee -a ${LAST}
# find the SVM at a cluster, using the CSV-file AND check against CLUSTER_F=
ILTER
            if [ -f ${FSOD_CLUSTER_VSERVER_CSV} ]; then
              CLUSTER=3D`grep "${SVM}" ${FSOD_CLUSTER_VSERVER_CSV}|awk -F\;=
 '{print $1}'|grep ${CLUSTER_FILTER}|head -1`
              if [ "${CLUSTER}" !=3D "" ]; then
                echo "    CLUSTER=3D${CLUSTER}"|tee -a ${LAST}
# Check if volume exists. Otherwise ERROR.
                SSHCMD ${CLUSTER} "volume show -vserver ${SVM} -volume ${VO=
L} -field volume " 1> /dev/null
                EC=3D${?}
                echo ${EC} > ${TMP}.xc
                if [ ${EC} -eq 0 ]; then
                  echo "    VOL=3D${VOL}"
# Check if Qtree already exists. If NOT (EC <> 0), then create
                  SSHCMD ${CLUSTER} "qtree show -vserver ${SVM} -volume ${V=
OL} -qtree ${QTREE} -field volume,security,export" 1> /dev/null
                  EC=3D${?}
                  if [ ${EC} -eq 0 ]; then
                    echo "  ERROR(20): Qtree (${QTREE}) exists. Cannot proc=
eed with '${IN_CMD}'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
                    echo "20" > ${TMP}.xc
                  else
                    POLICYNAME=3D`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 ${V=
OL} -new-size +${QSIZE}g"
                    SSHCMD ${CLUSTER} "volume quota policy rule create -vse=
rver ${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 ${V=
OL}"
                    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} ${L=
AST}
                  echo "21" > ${TMP}.xc
                fi  # ${EC} -eq 0
              else
                echo "  ERROR(22): cDOT-cluster-name NOT found for SVM (${S=
VM}). Cannot proceed with '${IN_CMD}'. [${PGM} v${VER}]"|tee -a ${LOG} ${LA=
ST}
                echo "22" > ${TMP}.xc
              fi  # CLUSTER
            else
              echo "  ERROR(23): FSOD_CLUSTER_VSERVER_CSV (${FSOD_CLUSTER_V=
SERVER_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_VO=
L}, ${IN_QSIZE}). Cannot proceed with '${IN_CMD}'. [${PGM} v${VER}]"|tee -a=
 ${LOG} ${LAST}
            echo "24" > ${TMP}.xc
          fi  # [ "${SVM}" !=3D "" ] && [ "${VOL}" !=3D "" ] && [ "${QTREE}=
" !=3D "" ]

        fi  # ENAbled
        ;;  # qtree-create

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

# Check if SVM , VOL, QTREE, EXPORT if not empty
          echo "  SVM=3D${SVM} VOL=3D${VOL} QTREE=3D${QTREE} QSIZE=3D${QSIZ=
E}GB"|tee -a ${LAST}
          if [ "${SVM}" !=3D "" ] && [ "${VOL}" !=3D "" ] && [ "${QTREE}" !=
=3D "" ] && [ "${QSIZE}" !=3D "" ]; then
            echo "  QUOTA-RESIZE: SVM=3D${SVM} VOL=3D${VOL} QTREE=3D${QTREE=
} QSIZE=3D${QSIZE} GB"|tee -a ${LAST}
# find the SVM at a cluster, using the CSV-file AND check against CLUSTER_F=
ILTER
            if [ -f ${FSOD_CLUSTER_VSERVER_CSV} ]; then
              CLUSTER=3D`grep "${SVM}" ${FSOD_CLUSTER_VSERVER_CSV}|awk -F\;=
 '{print $1}'|grep ${CLUSTER_FILTER}|head -1`
              if [ "${CLUSTER}" !=3D "" ]; then
                echo "    CLUSTER=3D${CLUSTER}"|tee -a ${LAST}
# Check if volume exists. Otherwise ERROR.
                SSHCMD ${CLUSTER} "volume show -vserver ${SVM} -volume ${VO=
L} -field volume " 1> /dev/null
                EC=3D${?}
                echo ${EC} > ${TMP}.xc
                if [ ${EC} -eq 0 ]; then
                  echo "    VOL=3D${VOL}"
# Check if Qtree exists. Otherwise ERROR.
                  SSHCMD ${CLUSTER} "qtree show -vserver ${SVM} -volume ${V=
OL} -qtree ${QTREE} -field volume,security,export" 1> /dev/null
                  EC=3D${?}
                  echo ${EC} > ${TMP}.xc
                  if [ ${EC} -eq 0 ]; then
# Check if Quota exists. Otherwise ERROR.
                    SSHCMD ${CLUSTER} "set -units GB ;volume quota policy r=
ule show -vserver ${SVM} -volume ${VOL} -target ${QTREE} -fields disk-limit=
" 1> /dev/null
                    EC=3D${?}
                    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-lim=
it" |grep ${SVM} |awk '{print $2";"$7}'  |read QUOTADEF
                      #ssh nlnaf102 "set -units GB ;volume quota policy rul=
e show -vserver nlnafsmss12 -volume mss12_vol01001 -target qtree3 -fields d=
isk-limit"|grep nlnafsmss12 |awk '{print $2";"$7}'  |read QUOTADEF
                        POLICYNAME=3D`echo "${QUOTADEF}"|awk -F";" '{print =
$1}'`
                        DISKLIMIT=3D`echo "${QUOTADEF}"|awk -F";" '{print $=
2}'`
                        OLD_QUOTA=3D`echo "${DISKLIMIT}"|awk -F"GB" '{print=
 $1}'`
                        if [ "${DISKLIMIT}" =3D "-" ] ; then
                          DISKLIMIT=3D`echo "${QSIZE}"`
                          OLD_QUOTA=3D"-1"
                        fi

                          let "NEWSIZE=3D ${QSIZE} - ${OLD_QUOTA}"
                          SSHCMD ${CLUSTER} "vol quota policy rule show -vs=
erver ${SVM} -volume ${VOL}"|grep Policy|awk '{print $4}'

                          SSHCMD ${CLUSTER} "vol size -vserver ${SVM} -volu=
me ${VOL} -new-size +${NEWSIZE}g"
                          SSHCMD ${CLUSTER} "volume quota policy rule modif=
y -vserver ${SVM} -policy-name ${POLICYNAME} -volume ${VOL} -type tree -tar=
get ${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=3D`echo "${SVM}"|awk -F"nlnafs" '{prin=
t $2}'`
                          SSHCMD ${CLUSTER} "volume quota policy rule creat=
e -vserver ${SVM} -policy-name ${POLICYNAME} -volume ${VOL} -type tree -tar=
get ${QTREE} -disk-limit ${QSIZE}g"
                          SSHCMD ${CLUSTER} "quota on -vserver ${SVM} -volu=
me ${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 VO=
LUME (${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} ${L=
AST}
                  echo "33" > ${TMP}.xc
                fi  # ${EC} -eq 0
              else
                echo "  ERROR(34): cDOT-cluster-name NOT found for SVM (${S=
VM}). Cannot proceed with '${IN_CMD}'. [${PGM} v${VER}]"|tee -a ${LOG} ${LA=
ST}
                echo "34" > ${TMP}.xc
              fi  # CLUSTER
            else
              echo "  ERROR(35): FSOD_CLUSTER_VSERVER_CSV (${FSOD_CLUSTER_V=
SERVER_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_VO=
L}, ${IN_QSIZE}). Cannot proceed with '${IN_CMD}'. [${PGM} v${VER}]"|tee -a=
 ${LOG} ${LAST}
            echo "36" > ${TMP}.xc
          fi  # [ "${SVM}" !=3D "" ] && [ "${VOL}" !=3D "" ] && [ "${QTREE}=
" !=3D "" ]

        fi  # ENAbled
        ;;  # quota_resize

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

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

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

#                echo "SSHCMD ${CLUSTER} 'volume create -vserver ${SVM} -vo=
lume ${NEW_VOLUME} -aggregate ${AGGREGATE} -size 1g -junction-path /${NEW_V=
OLUME} -state online -type RW -unix-permissions ---rwxr-xr-x -space-guarant=
ee none -snapshot-policy none -foreground true -percent-snapshot-space 0 -a=
utosize-grow-threshold-percent 85 -autosize-shrink-threshold-percent 75 -au=
tosize-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=3D`echo "${AGGREGATE}"|grep "n[0-9][0-9]a38[0=
-9][0-9]"`
                if  [ "${AFF_AGGREGATE}" !=3D "" ]
                then
                  SSHCMD ${CLUSTER} "volume efficiency on -vserver ${SVM} -=
volume ${NEW_VOLUME}"|tee -a ${LAST}
                  SSHCMD ${CLUSTER} "volume efficiency modify -vserver ${SV=
M} -volume ${NEW_VOLUME} -policy auto -compression true -inline-compression=
 true -inline-dedupe true  -cross-volume-inline-dedupe true -cross-volume-b=
ackground-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=3D${?}
                echo "---------- (EC=3D${EC}) ----------"|tee -a ${CMDFILE}=
 ${LAST}
                echo ${EC} > ${TMP}.xc
              else
                echo "  ERROR(41): cDOT-cluster-name NOT found for SVM (${S=
VM}). 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_V=
SERVER_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 filt=
er (${SVM_FILTER} at input (${IN_SVM}, ${IN_AGGR}). Cannot proceed with 'cr=
eate-volume'. [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
            echo "43" > ${TMP}.xc
          fi  # SVM !=3D ""

        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} =3D wrong command. Use 'help' for mor=
e info (`date +%Y-%m-%d-%H-%M-%S`) [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
         echo "25" > ${TMP}.xc
         ;;

    esac
  fi  # if .. !=3D ""

done

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


