
#!/bin/ksh
#set -x
# File	: proc_ssh_ansible.sh
# By	: Maarten.deBoer@Atos.net,180724, 221109
# Subject	: Script to receive info from SSH for Ansible-playbooks (from SAP-ART)
#(0.1),221109	: Copied from proc_ssh_input.sh, VOLUME
#(0.2),221110	: QTREE, QUOTA
#(0.3),221110	: NFS_EXPORT
#(0.4),221110	: SHOW-VOLUME
#set -x
PGM=`basename $0|cut -d\. -f1`
VER="0.4"
TMP="/tmp/${PGM}.$$"
BASE="${HOME}"
LOG="${BASE}/log/${PGM}.log"
HBFILE="${BASE}/data/heartbeat"
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="${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"
PLAYBOOK_DIR="/home/ansible/GIT/netapp-storage-container"
DATI=`date +%Y%m%d-%H%M%S`
SSH="/usr/bin/ssh -n"

# !! Can be set in RC-file !!
#CLUSTER_FILTER="nlnaf[1-9][0-9][0-9]"
CLUSTER_FILTER="nlnaf[1][0][23]"
#SVM_FILTER="nlnafs[a-z][a-z][a-z][0-9][0-9]"
SVM_FILTER="nlnafsmss1[89]"
#AGGR_FILTER="n[0-9][0-9][ace][0-9][0-9][0-9][0-9]"
AGGR_FILTER="n02a4001"
LIF_FILTER="[a-z][a-z][a-z][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]"
VOL_FILTER="mss1[89]_vol[0-9][0-9][0-9][0-9][0-9]"
QTREE_FILTER="[a-zA-Z0-9]*"
QTREE_STYLE_FILTER="unix|ntfs"
VOL_SIZE_FILTER="[0-9]"
QUOTA_DISK_LIMIT_FILTER="[0-9]"
QTREE_EXPORT_ADDR_FILTER="^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\/[0-9]{1,3}$"


USAGE_ONTAP()
{
  echo "  USAGE of the JSON-string:"
  echo "  JSON-string : {\"<variable1>\":\"<value1>\", \"<variable2>\":\"<value2>\" ...  } "
  echo "    variables: \"ansible_ontap\" "
  echo "    values: "
  echo "      \"help\" "
  echo "      \"version\" "
  echo "      \"volume-update\" "
  echo "  [${PGM} v${VER}]"
}

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: 'JSON-string : {\"<variable>\":\"<value>\", ...  } '"
  echo "      var: \"cmd\" "
  echo "      values: \"help\" "
  echo "        \"version\" "
  echo "        \"heartbeat\" "
  echo "        \"status\" "
  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:
# 'JSON-string : {\"<variable>\":\"<value>\", ...  } '"
# 'JSON-string : {\"ANSIBLE_ONTAP\":\"volume\", ...  } '"

#DEVICETYPE=`echo ${JSON_STR}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i DEVICETYPE|awk -F\: '{print $2}'|sed 's/"//g'`


grep -v ^# |while read LINE
do
  echo "--LINE:${LINE}" >> ${LAST}
#  echo "--LINE:${LINE}"

  PROC_CMD=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i PROC_CMD|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'`
  ANSIBLE_ONTAP=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i ANSIBLE_ONTAP|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'`
  SSH_ONTAP=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i SSH_ONTAP|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'`

#  echo "--LINE:${LINE} PROC_CMD=${PROC_CMD} ANSIBLE_ONTAP=${ANSIBLE_ONTAP}"

  # do, when IN_CMD is not empty

  if [ "${PROC_CMD}" != "" ]; then
    case ${PROC_CMD} in
      help)
        USAGE
        echo "  HELP: "|tee -a ${LOG} ${LAST}
        echo "2" > ${TMP}.xc
        ;;
      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 "4" > ${TMP}.xc
          echo "  STATUS: DISabled(-file found) (ERROR(4)). (NOthing, also list, is allowed) [${PGM} v${VER}] @ ${HOSTNAME}"|tee -a ${LOG} ${LAST}
        fi
        if [ ! -f ${STATUSENA} ] && [ ! -f ${STATUSDIS} ]; then
          echo "4" > ${TMP}.xc
          echo "  STATUS: NO (enable/disable-file)found (ERROR(4)). (actions are accepted. But NOT executed) [${PGM} v${VER}] @ ${HOSTNAME}"|tee -a ${LOG} ${LAST}
        fi
        ;;

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

    esac
  fi  # PROC_CMD

# ------------------------------------------------------------

  if [ "${ANSIBLE_ONTAP}" != "" ]; then
    case ${ANSIBLE_ONTAP} in
      help)
        USAGE_ONTAP
        echo "  ANSIBLE_ONTAP:HELP: "|tee -a ${LOG} ${LAST}
        echo "2" > ${TMP}.xc
        ;;
      version)  echo "  VERSION: ${VER} [${PGM} v${VER}]"|tee -a ${LOG} ${LAST} ;;
      volume-update)
        echo "  ANSIBLE_ONTAP:volume-update"|tee -a ${LOG} ${LAST}
        CLUSTERNAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i CLUSTERNAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|grep -E -o "${CLUSTER_FILTER}"`
        SVM_NAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i SVM_NAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|grep -E -o "${SVM_FILTER}"`
        VOL_NAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i VOL_NAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|grep -E -o "${VOL_FILTER}"`
        AGGR_NAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i AGGR_NAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|grep -E -o "${AGGR_FILTER}"`
        VOL_SIZE=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i VOL_SIZE|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|grep -E -o "${VOL_SIZE_FILTER}"`
        VOL_TYPE=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i VOL_TYPE|awk -F\: '{print $2}'|sed 's/"//g'|tr '[a-z]' '[A-Z]'|egrep 'RW'`
        VOL_STOR_CLASS=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i VOL_STOR_CLASS|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'`
        VOL_COMMENT=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i VOL_COMMENT|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'`
        VOL_COMMENT="${VOL_COMMENT} by ${PGM} v${VER} at ${HOSTNAME} at ${DATI}"
        VOL_COMMENT=`echo ${VOL_COMMENT}|sed 's/ /_/g'`

        echo "    CLUSTERNAME=${CLUSTERNAME} SVM_NAME=${SVM_NAME} VOL_NAME=${VOL_NAME} AGGR_NAME=${AGGR_NAME} VOL_SIZE=${VOL_SIZE} VOL_TYPE=${VOL_TYPE} VOL_STOR_CLASS=${VOL_STOR_CLASS} VOL_COMMENT=${VOL_COMMENT} "|tee -a ${LOG} ${LAST}

        if [ "${CLUSTERNAME}" != "" ] && [ "${SVM_NAME}" != "" ] && [ "${VOL_NAME}" != "" ] && [ ${AGGR_NAME} != "" ] && [ "${VOL_SIZE}" != "" ] && [ "${VOL_TYPE}" != "" ] && [ "${VOL_STOR_CLASS}" != "" ] && [ "${VOL_COMMENT}" != "" ]; then
          echo "    ANSIBLE PLAYBOOK -e nao_clustername=${CLUSTERNAME} -e nao_svm_name=${SVM_NAME} -e nao_vol_name=${VOL_NAME} -e nao_vol_aggr_name=${AGGR_NAME} -e nao_vol_stor_class=${VOL_STOR_CLASS} -e nao_vol_size=${VOL_SIZE} -e nao_vol_size_unit=gb -e nao_vol_type=${VOL_TYPE} -e nao_vol_comment=\"${VOL_COMMENT}\" "

          source /var/lib/awx/venv/ansible/bin/activate
          ansible-playbook ${PLAYBOOK_DIR}/netapp-ontap_volume_create-update.yml -e nao_clustername=${CLUSTERNAME} -e nao_svm_name=${SVM_NAME} -e nao_vol_name=${VOL_NAME} -e nao_vol_aggr_name=${AGGR_NAME} -e nao_vol_stor_class=${VOL_STOR_CLASS} -e nao_vol_size=${VOL_SIZE} -e nao_vol_size_unit=gb -e nao_vol_type=${VOL_TYPE} -e nao_vol_comment="${VOL_COMMENT}"
          EC=${?}
          echo "ExitCode=${EC}"

        fi  # [ " " != "" ...
        ;;

      qtree-update)
        echo "  ANSIBLE_ONTAP:qtree-update"|tee -a ${LOG} ${LAST}
        CLUSTERNAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i CLUSTERNAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|grep -E -o "${CLUSTER_FILTER}"`
        SVM_NAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i SVM_NAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|grep -E -o "${SVM_FILTER}"`
        VOL_NAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i VOL_NAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|grep -E -o "${VOL_FILTER}"`

        QTREE_NAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i QTREE_NAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'`
        QTREE_STYLE=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i QTREE_STYLE|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|sed 's/ //g'|egrep "${QTREE_STYLE_FILTER}"`
        QTREE_STRING="{\"${QTREE_NAME}\":{\"nao_qtree_security_style\":\"${QTREE_STYLE}\"}}"

        echo "    CLUSTERNAME=${CLUSTERNAME} SVM_NAME=${SVM_NAME} VOL_NAME=${VOL_NAME} QTREE_STRING=${QTREE_STRING} "|tee -a ${LOG} ${LAST}
        if [ "${CLUSTERNAME}" != "" ] && [ "${SVM_NAME}" != "" ] && [ "${VOL_NAME}" != "" ] && [ "${QTREE_STRING}" != "" ]; then
          echo "    ANSIBLE PLAYBOOK -e nao_clustername=${CLUSTERNAME} -e nao_svm_name=${SVM_NAME} -e nao_vol_name=${VOL_NAME} -e nao_qtree_string=${QTREE_STRING} "
          source /var/lib/awx/venv/ansible/bin/activate
          ansible-playbook ${PLAYBOOK_DIR}/netapp-ontap_qtree_create-update-loop.yml -e nao_clustername=${CLUSTERNAME} -e nao_svm_name=${SVM_NAME} -e nao_vol_name=${VOL_NAME} -e nao_qtree_string="${QTREE_STRING}"
          EC=${?}
          echo "ExitCode=${EC}"

        fi  # [ "${CLUSTERNAME}" != "" ] ...
        ;;

      quota-update)
        echo "  ANSIBLE_ONTAP:quota-update"|tee -a ${LOG} ${LAST}
        CLUSTERNAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i CLUSTERNAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|grep -E -o "${CLUSTER_FILTER}"`
        SVM_NAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i SVM_NAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|grep -E -o "${SVM_FILTER}"`
        VOL_NAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i VOL_NAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|grep -E -o "${VOL_FILTER}"`

        QTREE_NAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i QTREE_NAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'`
        QUOTA_DISK_LIMIT=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i QUOTA_DISK_LIMIT|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|sed 's/ //g'|grep -E -o "${QUOTA_DISK_LIMIT_FILTER}"`
        if [ "${QTREE_NAME} != "" ] && [ "${QUOTA_DISK_LIMIT} != "" ]; then
          QTREE_STRING="{\"${QTREE_NAME}\":{\"nao_quota_disk_limit\":\"${QUOTA_DISK_LIMIT}GB\"}}"
        else
          QTREE_STRING=""
        fi

        echo "    CLUSTERNAME=${CLUSTERNAME} SVM_NAME=${SVM_NAME} VOL_NAME=${VOL_NAME} QTREE_STRING=${QTREE_STRING} "|tee -a ${LOG} ${LAST}
        if [ "${CLUSTERNAME}" != "" ] && [ "${SVM_NAME}" != "" ] && [ "${VOL_NAME}" != "" ] && [ "${QTREE_STRING}" != "" ]; then
          echo "    ANSIBLE PLAYBOOK:quota-update -e nao_clustername=${CLUSTERNAME} -e nao_svm_name=${SVM_NAME} -e nao_vol_name=${VOL_NAME} -e nao_qtree_string=${QTREE_STRING} "
          source /var/lib/awx/venv/ansible/bin/activate
          ansible-playbook ${PLAYBOOK_DIR}/netapp-ontap_quota_create-update-loop.yml -e nao_clustername=${CLUSTERNAME} -e nao_svm_name=${SVM_NAME} -e nao_vol_name=${VOL_NAME} -e nao_qtree_string="${QTREE_STRING}"
          EC=${?}
          echo "ExitCode=${EC}"

        fi  # [ "${CLUSTERNAME}" != "" ] ...
        ;;

      nfs-export-update)
        echo "  ANSIBLE_ONTAP:nfs-export-update"|tee -a ${LOG} ${LAST}
        CLUSTERNAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i CLUSTERNAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|grep -E -o "${CLUSTER_FILTER}"`
        SVM_NAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i SVM_NAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|grep -E -o "${SVM_FILTER}"`
        VOL_NAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i VOL_NAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|grep -E -o "${VOL_FILTER}"`

        QTREE_NAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i QTREE_NAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'`
        QTREE_EXPORT_POLICY=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i QTREE_EXPORT_POLICY|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|sed 's/ //g'` 
        QTREE_EXPORT_ADDR=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i QTREE_EXPORT_ADDR|awk -F\: '{print $2}'|sed 's/"//g'|sed 's/ //g'|grep -E -o "${QTREE_EXPORT_ADDR_FILTER}"`
#        QTREE_EXPORT_ADDR=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i QTREE_EXPORT_ADDR|awk -F\: '{print $2}'|sed 's/"//g'|sed 's/ //g'`
# Check regex at regex101.com

        echo "    QTREE_EXPORT_POLICY=${QTREE_EXPORT_POLICY} QTREE_EXPORT_ADDR=${QTREE_EXPORT_ADDR}"

        if [ "${QTREE_NAME}" != "" ] && [ "${QTREE_EXPORT_POLICY}" != "" ] && [ "${QTREE_EXPORT_ADDR}" != "" ]; then
          QTREE_STRING="{\"${QTREE_NAME}\":{\"nao_qtree_export_policy\":\"${QTREE_EXPORT_POLICY}\",\"nao_export_policy_client_match\":\"${QTREE_EXPORT_ADDR}\"}}"
        else
          QTREE_STRING=""
        fi

        echo "    CLUSTERNAME=${CLUSTERNAME} SVM_NAME=${SVM_NAME} VOL_NAME=${VOL_NAME} QTREE_STRING=${QTREE_STRING} "|tee -a ${LOG} ${LAST}
        if [ "${CLUSTERNAME}" != "" ] && [ "${SVM_NAME}" != "" ] && [ "${VOL_NAME}" != "" ] && [ "${QTREE_STRING}" != "" ]; then
          echo "    ANSIBLE PLAYBOOK:nfs-export-update -e nao_clustername=${CLUSTERNAME} -e nao_svm_name=${SVM_NAME} -e nao_vol_name=${VOL_NAME} -e nao_qtree_string=${QTREE_STRING} "

          source /var/lib/awx/venv/ansible/bin/activate
          ansible-playbook ${PLAYBOOK_DIR}/netapp-ontap_export_create-update-loop.yml -e nao_clustername=${CLUSTERNAME} -e nao_svm_name=${SVM_NAME} -e nao_vol_name=${VOL_NAME} -e nao_qtree_string="${QTREE_STRING}"
          EC=${?}
          echo "ExitCode=${EC}"

        fi  # [ "${CLUSTERNAME}" != "" ] ...
        ;;



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

    esac
  fi  # ANSIBLE_ONTAP

# ------------------------------------------------------------

  if [ "${SSH_ONTAP}" != "" ]; then
    case ${SSH_ONTAP} in

      volume-show)
        echo "---------- SSH_ONTAP:volume-show ----------"|tee -a ${LOG} ${LAST}
        CLUSTERNAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i CLUSTERNAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|grep -E -o "${CLUSTER_FILTER}"`
        SVM_NAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i SVM_NAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|grep -E -o "${SVM_FILTER}"`
        VOL_NAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i VOL_NAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|grep -E -o "${VOL_FILTER}"`
        if [ "${CLUSTERNAME}" != "" ] && [ "${SVM_NAME}" != "" ] && [ "${VOL_NAME}" != "" ]; then
          ${SSH} ${CLUSTERNAME} "set -showseparator \";\";volume show -vserver ${SVM_NAME} -volume ${VOL_NAME} -field vserver,volume,aggregate,total,used,autosize-mode"|grep ${SVM_NAME}
          EC=${?}
          echo "---------- (EC=${EC}) ----------"
          echo "${EC}" > ${TMP}.xc

        fi  # [ "${CLUSTERNAME}" != "" ] ...
        ;;

      qtree-show)
        echo "---------- SSH_ONTAP:qtree-show ----------"|tee -a ${LOG} ${LAST}
        CLUSTERNAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i CLUSTERNAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|grep -E -o "${CLUSTER_FILTER}"`
        SVM_NAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i SVM_NAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|grep -E -o "${SVM_FILTER}"`
        VOL_NAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i VOL_NAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|grep -E -o "${VOL_FILTER}"`
        if [ "${CLUSTERNAME}" != "" ] && [ "${SVM_NAME}" != "" ] && [ "${VOL_NAME}" != "" ]; then
          ${SSH} ${CLUSTERNAME} "set -showseparator \";\"; qtree show -vserver ${SVM_NAME} -volume ${VOL_NAME} -field vserver,volume,qtree,export"| grep ${SVM_NAME}
          EC=${?}
          echo "---------- (EC=${EC}) ----------"
          echo "${EC}" > ${TMP}.xc

        fi  # [ "${CLUSTERNAME}" != "" ] ...
        ;;

      quota-report)
        CLUSTERNAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i CLUSTERNAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|grep -E -o "${CLUSTER_FILTER}"`
        SVM_NAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i SVM_NAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|grep -E -o "${SVM_FILTER}"`
        VOL_NAME=`echo ${LINE}|grep ^{|sed 's/^{//g'|sed 's/}$//g'|tr ',' '\n'|grep -i VOL_NAME|awk -F\: '{print $2}'|sed 's/"//g'|tr '[A-Z]' '[a-z]'|grep -E -o "${VOL_FILTER}"`
        echo "---------- SSH_ONTAP:qtree-report (${CLUSTERNAME}:${SVM_NAME}:${VOL_NAME}) ----------"|tee -a ${LOG} ${LAST}
        if [ "${CLUSTERNAME}" != "" ] && [ "${SVM_NAME}" != "" ] && [ "${VOL_NAME}" != "" ]; then
          ${SSH} ${CLUSTERNAME} "set -showseparator \";\"; quota report -vserver ${SVM_NAME} -volume ${VOL_NAME} -field vserver,volume,tree,disk-limit,disk-used" | grep ${SVM_NAME}
          EC=${?}
          echo "---------- (EC=${EC}) ----------"
          echo "${EC}" > ${TMP}.xc

        fi  # [ "${CLUSTERNAME}" != "" ] ...
        ;;




# WILDCARD
      *)echo "  ERROR(99): ${SSH_ONTAP} : \"ssh_ontap\" has wrong value. Use \"ssh_ontap\":\"help\" for more info (`date +%Y-%m-%d-%H-%M-%S`) [${PGM} v${VER}]"|tee -a ${LOG} ${LAST}
        echo "99" > ${TMP}.xc
        ;;
    esac
  fi  #SSH_ONTAP





done  # while read LINE

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}

