
#!/bin/sh
# File	: omi2zfs_mod.sh
# By	: Maarten.deBoer@atos.net, 241010,241030
# Subject	: Script to prepare the move from FSOD to ZSF for OMI. Mod. NFS-export RW=never
#(0.2),250107	: Add # Roll-back
#(0.3),250108	: added sort -u & FILTER
#(0.4),250109	: Added ACTION
#(0.5),250114	: Added VOL_ACTION
#(0.6),250130	: exclude default export
PGM=`basename $0|cut -d\. -f1`
VER="0.6"
LOG="${HOME}/log/${PGM}.log"
CSV="/tmp/${PGM}.csv"
SSH="/usr/bin/ssh -n"
DATA="${HOME}/data/omi2zfs.asc"

CLUSTER="nlnaf103"
#FILTER="omlnl"
FILTER="nlnafsomixx"
ACTION=""
#ACTION="rw_sys"
#ACTION="rw_never"
#ACTION="ro_never"
#ACTION="vol_offline"

if [ "${1}" != "" ]; then
  FILTER="${1}"
fi  # $2
if [ "${2}" != "" ]; then
  ACTION="${2}"
fi  # $1

cp /dev/null ${CSV}
echo "`date` ${PGM} v${VER} started."|tee -a ${LOG} 
echo "  ACTION(2)=${ACTION}"
echo "  CSV=${CSV}"
echo "  CLUSTER=${CLUSTER}"
echo "  FILTER(1)=${FILTER}"
sleep 1

cat ${DATA}|grep -v ^#|sort -u|grep "${FILTER}"|while read LINE
do
  VOLUME=`echo ${LINE}|cut -d\/ -f2`
  QTREE=`echo ${LINE}|cut -d\/ -f3`
  SVM_PART=`echo ${LINE}|cut -d\/ -f2|cut -d\_ -f1`

  CLUSTER=""
  if [ "${SVM_PART}" == "omi54" ] || [ "${SVM_PART}" == "omi56" ]; then
    CLUSTER="nlnaf102"
  fi
  if [ "${SVM_PART}" == "omi53" ] || [ "${SVM_PART}" == "omi55" ]; then
    CLUSTER="nlnaf103"
  fi
  VSERVER="nlnafs${SVM_PART}"
  EXPORT=`${SSH} ${CLUSTER} "qtree show -vserver ${VSERVER} -volume ${VOLUME} -qtree ${QTREE} -field export"|grep ${QTREE}|awk '{print $4}'`

  echo "  CLUSTER=${CLUSTER} VSERVER=${VSERVER} VOLUME=${VOLUME} QTREE=${QTREE} EXPORT=${EXPORT} ACTION=${ACTION}| VOL_ACTION=${VOL_ACTION}|"

# Mod. part
  if [ "${EXPORT}" != "" ]; then

    ${SSH} ${CLUSTER} "set -showseparator \";\" ; export-policy rule show -vserver ${VSERVER} -policy ${EXPORT} -field client,rule,rw"|grep -v "default"|grep "${FILTER}"|grep ${EXPORT}|while read LINE2
    do
      VSERVER=`echo ${LINE2}|awk -F\; '{print $1}'`
      RULEIDX=`echo ${LINE2}|awk -F\; '{print $3}'`
      CLIENT=`echo ${LINE2}|awk -F\; '{print $4}'`
      RW_RULE=`echo ${LINE2}|awk -F\; '{print $5}'`
      echo "    CLUSTER=${CLUSTER} VSERVER=${VSERVER} EXPORT=${EXPORT} RULEIDX=${RULEIDX} CLIENT=${CLIENT} RW_RULE=${RW_RULE}"|tee -a ${LOG}


# Set rw to never
      if [ "${ACTION}" = "rw_never" ]; then
#        ${SSH} ${CLUSTER} "export-policy rule modify -vserver ${VSERVER} -policy ${EXPORT} -client ${CLIENT} -rule ${RULEIDX} -rw never "
        EC=${?}
      fi  # rw_never

# Roll-Back (never -> sys)
      if [ "${ACTION}" = "rw_sys" ]; then
#        ${SSH} ${CLUSTER} "export-policy rule modify -vserver ${VSERVER} -policy ${EXPORT} -client ${CLIENT} -rule ${RULEIDX} -rw sys "
        EC=${?}
      fi  # rw_sys
    
      RW_RESULT=`${SSH} ${CLUSTER} "set -showseparator \";\" ; export-policy rule show -vserver ${VSERVER} -policy ${EXPORT} -client ${CLIENT} -rule ${RULEIDX} -field rw"|grep ${EXPORT}|awk -F\; '{print $4}'`
      echo "      RW_RESULT=${RW_RESULT}"|tee -a ${LOG}

# Set RO & SUPER also to never. When RW_RESULT=never
      if [ "${ACTION}" = "ro_never" ] && [ "${RW_RESULT}" = "never" ]; then
#        ${SSH} ${CLUSTER} "export-policy rule modify -vserver ${VSERVER} -policy ${EXPORT} -client ${CLIENT} -rule ${RULEIDX} -ro never -super none"
        EC=${?}
      fi  # ro_never

# When ro-export=never, then offline
      if [ "${ACTION}" = "vol_offline" ] && [ "${RW_RESULT}" = "never" ]; then
        echo "  ${VSERVER}/${VOLUME} will set offline "
        sleep 1
#        ${SSH} ${CLUSTER} "volume unmount -vserver ${VSERVER} -volume ${VOLUME}"
#        ${SSH} ${CLUSTER} "volume offline -vserver ${VSERVER} -volume ${VOLUME}"
        EC=${?}
        echo "  ${VSERVER}/${VOLUME} offline (${EC})"|tee -a ${LOG}
        sleep 1
      fi  # "never" & "vol_offline"

    done  # LINE2

    ${SSH} ${CLUSTER} "set -showseparator \";\" ;export-policy rule show -vserver ${VSERVER} -policy ${EXPORT} -field policy,rule,ro,rw,super,client,protocol" |tee -a ${CSV}
  fi  # ACTION <> "" && EXPORT <> ""


done  # LINE


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

