
#/bin/sh
# File	: cdot_volume-qtree-quota_config.sh
# By	: Maarten de Boer@Atos.net, 221222
# Subject	: Script to create volumes onto cDOT
#(0.2),221229	: Mod's check & FILTERs
#(0.3),221230	: Additions
#(0.4),221230	: Mod's; VFILTER, when volume exist, then mod
#(0.5),230104	: Add Stor.Class
PGM=`basename $0|cut -d\. -f1`
VER="0.5"
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 ;;
    -v) VFILTER="${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 Volume-Qtree-Quota: CFILTER=${CFILTER} SFILTER=${SFILTER} VFILTER=${VFILTER}"
echo "Press [ENTER]"
read INPUT

# DATAFILE
#  cluster;vserver;volume;aggregate;size(in g);snapshot-policy;comment;qtree;secu-style;quota(disk-limit)(in g);
#
cat ${DATAFILE}|grep -v ^#|grep ${CFILTER}|grep ${SFILTER}|grep ${VFILTER}|while read LINE
do
  CLUSTER=`echo ${LINE}|awk -F\; '{print $1}'|grep ^[a-z]*`
  VSERVER=`echo ${LINE}|awk -F\; '{print $2}'|grep ^[a-z]*`
  VOLUME=`echo ${LINE}|awk -F\; '{print $3}'|grep ^[a-z]*`
  STOR_CLASS=`echo ${LINE}|awk -F\; '{print $4}'|egrep 'platinum|gold|silver|bronze'`
  AGGR=`echo ${LINE}|awk -F\; '{print $5}'|grep ^n*`
  SIZE=`echo ${LINE}|awk -F\; '{print $6}'|grep "g"`
  SS_POL=`echo ${LINE}|awk -F\; '{print $7}'`
  COMMENT=`echo ${LINE}|awk -F\; '{print $8}'`
  QTREE=`echo ${LINE}|awk -F\; '{print $9}'`
  SECU_STYLE=`echo ${LINE}|awk -F\; '{print $10}'|egrep 'unix|ntfs|mixed'`
  QUOTA=`echo ${LINE}|awk -F\; '{print $11}'|grep "g"`

  echo "  CLUSTER=${CLUSTER} VSERVER=${VSERVER} VOLUME=${VOLUME} STOR_CLASS=${STOR_CLASS} AGGR=${AGGR} SIZE=${SIZE} SS_POL=${SS_POL} COMMENT=${COMMENT} QTREE=${QTREE} SECU_STYLE=${SECU_STYLE} QUOTA=${QUOTA}"|tee -a ${LOG}
  echo ""

  if [ "${SS_POL}" = "" ]; then
    SS_POL="none"
  fi
  if [ "${COMMENT}" = "" ]; then
    COMMENT="By ${PGM} `date`"
  fi

# 0. Create Quota policy
  QUO_POL=`echo ${VSERVER}|sed 's/tlenl//g'|sed 's/nlnafs//g'`
  SVM_QUO_POL=`${SSH} ${CLUSTER} "quota policy show -vserver ${VSERVER}"| grep " ${QUO_POL} "`
  if [ "${SVM_QUO_POL}" = "" ]; then
    echo "    0. Create (SVM) Quota Policy (${QUO_POL}) at ${VSERVER}"|tee -a ${LOG}
    ${SSH} ${CLUSTER} "quota policy create -vserver ${VSERVER} -policy ${QUO_POL}"
    ${SSH} ${CLUSTER} "quota policy show -vserver ${VSERVER}"
    sleep 1
  fi  # SVM_QUO_POL" = ""


# 1. Create / modify volume 
  if [ "${VSERVER}" != "" ] && [ "${VOLUME}" != "" ] && [ "${SIZE}" != "" ] && [ "${STOR_CLASS}" != "" ]; then
    SVM_VOL=`${SSH} ${CLUSTER} "volume show -vserver ${VSERVER}"|grep "${VOLUME}"`
# Storage Class / QoS added (for billing purpose)
    QOS_POL_GROUP="${VSERVER}_${STOR_CLASS}"
    CHK_QOS_POL_GROUP=`${SSH} ${CLUSTER} "qos policy-group show -vserver ${VSERVER}"|grep "${QOS_POL_GROUP}"`
    if [ "${CHK_QOS_POL_GROUP}" = "" ]; then
# No QOS_POL_GROUP found, create
      ${SSH} ${CLUSTER} "qos policy-group create -vserver ${VSERVER} -policy-group ${QOS_POL_GROUP} -max-throughput INF"
    fi  # CHK_QOS_POL_GROUP
    ${SSH} ${CLUSTER} "qos policy-group show -vserver ${VSERVER} -policy-group ${QOS_POL_GROUP} -field policy-group,vserver,throughput-policy"

    if [ "${SVM_VOL}" = "" ]; then
      echo "    1. Create volume ${VOLUME} (${STOR_CLASS}) to ${AGGR} at ${VSERVER}"|tee -a ${LOG}
      ${SSH} ${CLUSTER} "volume create -vserver ${VSERVER} -volume ${VOLUME} -aggregate ${AGGR} -size ${SIZE} -junction-path /${VOLUME} -comment \"${COMMENT}\" -snapshot-policy ${SS_POL} -foreground true -percent-snapshot-space 0 -min-auto 1g -autosize-grow-threshold-percent 85% -autosize-shrink-threshold-percent 75% -autosize-mode grow_shrink -language C.UTF-8 -space-guarantee none -type RW -qos-policy-group ${QOS_POL_GROUP}"
    else
      echo "    Volume: ${SVM_VOL}"
      echo "    1b. Modifying volume ${VOLUME} (${STOR_CLASS}) size to ${SIZE} at ${VSERVER}"|tee -a ${LOG}
      ${SSH} ${CLUSTER} "volume modify -vserver ${VSERVER} -volume ${VOLUME} -size ${SIZE} -min-autosize 1g -comment \"${COMMENT}\" -qos-policy-group ${QOS_POL_GROUP}"
      
    fi  # SVM_VOL
    ${SSH} ${CLUSTER} "volume show -vserver ${VSERVER} -volume ${VOLUME} -field vserver,volume,aggregate,total,max,min,used,qos-policy-group"
    sleep 1
  fi  # VSERVER}" != "" && VOLUME}" != ""


# 2. Create Qtree 
  if [ "${VSERVER}" != "" ] && [ "${VOLUME}" != "" ] && [ "${QTREE}" != "" ]; then
    SVM_VOL_QTREE=`${SSH} ${CLUSTER} "qtree show -vserver ${VSERVER} -volume ${VOLUME}"|grep "${QTREE}"`
    if [ "${SVM_VOL_QTREE}" = "" ]; then
      echo "  2. Create Qtree ${QTREE} in ${VOLUME}"|tee -a ${LOG}
      ${SSH} ${CLUSTER} "qtree create -vserver ${VSERVER} -qtree-path /vol/${VOLUME}/${QTREE} -security-style ${SECU_STYLE}"
      ${SSH} ${CLUSTER} "qtree show -vserver ${VSERVER} -qtree-path /vol/${VOLUME}/${QTREE}"
      sleep 1
    else
      echo "    Qtree: ${SVM_VOL_QTREE}"
    fi  # SVM_VOL_QTREE
  fi  # QTREE}" != ""


# 3. Set Quota 
  if [ "${VSERVER}" != "" ] && [ "${QTREE}" != "" ] && [ "${QUOTA}" != "" ]; then
    QUO_POL_RULE=`${SSH} ${CLUSTER} "quota policy rule show -vserver ${VSERVER}"|grep " ${QTREE} "`

# Check if Quota is on. If not then create default-volume-policy & set on
    QUO_VOL_STATUS=`${SSH} ${CLUSTER} "quota show -vserver ${VSERVER} -field state"|grep ${VOLUME}|awk '{print $3}'`
    if [ "${QUO_VOL_STATUS}" = "off" ]; then
# volume quota policy rule create -vserver tlenlpkc01 -policy-name default -volume pkc01_vol01003 -type tree -target ""
      echo "    3. Creating default quota policy on volume ${VOLUME} and Enabling quota"|tee -a ${LOG}
      ${SSH} ${CLUSTER} "volume quota policy rule create -vserver ${VSERVER} -volume ${VOLUME} -policy-name default -type tree -target \"\" "
      ${SSH} ${CLUSTER} "volume quota on -vserver ${VSERVER} -volume ${VOLUME}"
    fi  # QUO_VOL_STATUS}" = "off

    if [ "${QUO_POL_RULE}" = "" ]; then
      echo "  3. Set Quota on with ${Q_POLICY}"
      ${SSH} ${CLUSTER} "volume quota policy rule create -vserver ${VSERVER} -policy-name default -volume ${VOLUME} -type tree -target \"\" "

      ${SSH} ${CLUSTER} "volume quota policy rule create -vserver ${VSERVER} -policy-name ${QUO_POL} -volume ${VOLUME} -type tree -target ${QTREE} -disk-limit ${QUOTA}"
      ${SSH} ${CLUSTER} "quota off -vserver ${VSERVER} -volume ${VOLUME}"
      ${SSH} ${CLUSTER} "quota on -vserver ${VSERVER} -volume ${VOLUME}"
    fi  # QUO_POL_RULE

    ${SSH} ${CLUSTER} "qtree show -vserver ${VSERVER} -volume ${VOLUME} -qtree ${QTREE} -field vserver, volume, qtree,security-style"
    ${SSH} ${CLUSTER} "quota show -vserver ${VSERVER} -volume ${VOLUME} -field vserver,volume,state,scan-status"
    ${SSH} ${CLUSTER} "quota policy rule show -vserver ${VSERVER} -volume ${VOLUME} -target ${QTREE}  -field vserver,policy-name,volume,type,target,disk-limit,threshold"
  fi # QUOTA}" != ""

done  # DATAFILE


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

