
#/bin/sh
# File	: cdot_nfs-export_config.sh
# By	: Maarten de Boer@Atos.net, 221230
# Subject	: Script to create NFS-export onto cDOT
PGM=`basename $0|cut -d\. -f1`
VER="0.1"
LOG="${HOME}/log/${PGM}.log"
SSH="/usr/bin/ssh -n"
RCFILE="${HOME}/etc/${PGM}.rc"

DATAFILE="${HOME}/data/${PGM}.csv"
CFILTER="tlenlfas8040"
#SFILTER="[?]*"
SFILTER="tnl02"
VFILTER="[?]*"

USAGE()
{
  echo "Usage: ${PGM} [<options>]"
  echo "  Version: ${VER}"
  echo "  options       :"
  echo "    -c          : Clusterfilter (${CFILTER})"
  echo "    -d          : Datafile (${DATAFILE})"
  echo "    -s          : SVMfilter (${SFILTER})"
  echo "    -v          : Volume-filter (${VFILTER})"
  echo "    -h|--help   : this help"
  echo "    -V          : Version"
  echo "    -x          : set -x"
}
if [ -f ${RCFILE} ]; then
  echo "  RCFILE (${RCFILE}) found. Using it"
  . ${RCFILE}
fi  # RCFILE
while [ $# -gt 0 ]
  do
  case $1 in
    -c) CFILTER="${2}"; shift ;;
    -s) SFILTER="${2}"; shift ;;
    -d) DATAFILE="${2}"; shift ;;
    -h | --help) USAGE; exit 1 ;;
    -V) echo "${PGM}: v${VER}"; exit 2 ;;
    -x)  set -x ;;
    *)  echo "Option $1 not known."; USAGE; exit 1 ;;
  esac
    shift
done

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

if [ ! -f ${DATAFILE} ]; then
  echo "  DATAFILE (${DATAFILE}) NOT found. Exiting ..."
  exit 3
fi
echo "  Config NFS-exports: CFILTER=${CFILTER} SFILTER=${SFILTER} VFILTER=${VFILTER}"
echo "Press [ENTER]"
read INPUT

# DATAFILE
# cluster;SVM;volume;qtree;export_name;NFS-exports;
cat ${DATAFILE}|grep -v ^#|grep "${CFILTER}"|grep "${SFILTER}"|grep "${VFILTER}"|while read LINE
do
  CLUSTER=`echo ${LINE}|awk -F\; '{print $1}'`
  VSERVER=`echo ${LINE}|awk -F\; '{print $2}'`
  VOLUME=`echo ${LINE}|awk -F\; '{print $3}'`
  QTREE=`echo ${LINE}|awk -F\; '{print $4}'`
  EXP_NAME=`echo ${LINE}|awk -F\; '{print $5}'`
  EXPORTS=`echo ${LINE}|awk -F\; '{print $6}'`

  echo "  CLUSTER=${CLUSTER} VSERVER=${VSERVER} VOLUME=${VOLUME} QTREE=${QTREE} EXP_NAME=${EXP_NAME} EXPORTS=${EXPORTS} "|tee -a ${LOG}


# 0. Enable NFS at SVM
  SVM_NFS_V3=`${SSH} ${CLUSTER} "vserver nfs show -vserver ${VSERVER} -field v3"| grep "${VSERVER}"`
  if [ "${SVM_NFS_V3}" = "" ]; then
    ${SSH} ${CLUSTER} "vserver nfs modify -vserver ${VSERVER} -v3 enabled"
    ${SSH} ${CLUSTER} "vserver nfs on -vserver ${VSERVER}"


  fi  # SVM_NFS_V3}" = ""
  ${SSH} ${CLUSTER} "vserver nfs show -vserver ${VSERVER} "



# 1. Create Export policy
  SVM_EXP_POL=`${SSH} ${CLUSTER} "export-policy show -vserver ${VSERVER}"| grep "${EXP_NAME}"`
  if [ "${SVM_EXP_POL}" = "" ]; then
    echo "    1. Create NFS-export Policy (${EXP_NAME}) at ${VSERVER}"|tee -a ${LOG}
    ${SSH} ${CLUSTER} "export-policy create -vserver ${VSERVER} -policyname ${EXP_NAME} "
    ${SSH} ${CLUSTER} "export-policy rule create -vserver ${VSERVER} -policyname ${EXP_NAME} -ruleindex 1 -clientmatch \"0.0.0.0/0\" -protocol any -rorule sys -rwrule never -anon 65534 -superuser none -allow-suid false -allow-dev false "
  fi  # SVM_EXP_POL}" = ""
  ${SSH} ${CLUSTER} "export-policy rule show -vserver ${VSERVER} -policyname ${EXP_NAME}"


# 2. Mod. Export policy
  echo "    2. Create NFS-export Policy (${EXP_NAME}) with ${EXPORTS} at ${VSERVER}"|tee -a ${LOG}
  ${SSH} ${CLUSTER} "export-policy rule create -vserver ${VSERVER} -policyname ${EXP_NAME} -clientmatch ${EXPORTS} -protocol nfs3 -rorule sys -rwrule sys -anon 65534 -superuser sys -allow-suid true -allow-dev false "

  ${SSH} ${CLUSTER} "export-policy rule show -vserver ${VSERVER} -policyname ${EXP_NAME}"

done  # DATAFILE


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

