
#!/bin/sh
# File	: noc_volume_update.sh
# By	: Maarten.deBoer@Atos.net, 230905, 231218
# Subject	: Netapp Ontap Cli script to create volumes based on CSV-file
#(0.2)	: Renamed to nao_ and renamed var's
#(0.3),240103	: Mod. $1, $2
#(0.4),240123	: Mod's & Add NAO_VOL_LANG
#(0.5),240216	: Added QOS
#(0.6),240301	: From noc_volume_create.sh, for RC-files
#(0.7),240307	: Add NAO_VOL_SNAPLOCK_AUTOCOMMIT
PGM=`basename $0|cut -d\. -f1`
VER="0.7"
LOG="${HOME}/log/${PGM}.log"
SSH="/usr/bin/ssh -n"

DATADIR="${HOME}/data"
CSVDIR="${DATADIR}/csv"

DATAINDIR="${DATADIR}/rc"

# NAO defaults
NAO_CLUSTERNAME="nlnaf999"
NAO_VSERVER_NAME="nlnafsmss99"
NAO_VOL_NAME="mss99_vol09999"
NAO_VOL_STOR_CLASS="gold"
NAO_VOL_SIZE=10
NAO_VOL_SIZE_UNIT="GB"
NAO_VOL_TYPE="RW"
ATOS_CH_NR="CHG123456789"
NAO_VOL_LANG="C.UTF-8"

NAO_VOL_SNAPLOCK_TYPE=""
NAO_VOL_SNAPLOCK_MAX="1 hours"
NAO_VOL_SNAPLOCK_AUTOCOMMIT="none"

# Policy-filter
FILTER="mss"
#CSV="${CSVDIR}/noc_volume-snapmirror-vault_mss.csv"

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

echo "`date` ${PGM} v${VER} started."|tee -a ${LOG}
echo "  FILTER(1)=${FILTER}"
echo "  DATAINDIR(2)=${DATAINDIR}"
sleep 1

if [ ! -d ${DATAINDIR} ]; then
  echo "  NO DATAINDIR (${DATAINDIR}) found. Exiting ..."|tee -a ${LOG}
  exit 4
fi  # ! DATAINDIR

cd ${DATAINDIR}
ls -1 volume_*.rc|grep "${FILTER}"|while read FNAME
do
  echo "FNAME=${FNAME}|"

# Reading VAR's of all RC-files in DATAINDIR
  if [ "${FNAME}" != "" ] && [ -f ${FNAME} ]; then
    . ${DATAINDIR}/${FNAME}

    echo "NAO_CLUSTERNAME=${NAO_CLUSTERNAME}"
    echo "NAO_VSERVER_NAME=${NAO_VSERVER_NAME}"
    echo "NAO_VOL_NAME=${NAO_VOL_NAME}"
    echo "NAO_VOL_AGGR_NAME=${NAO_VOL_AGGR_NAME}"
    echo "NAO_VOL_STOR_CLASS=${NAO_VOL_STOR_CLASS}"
    echo "NAO_VOL_SIZE=${NAO_VOL_SIZE}"
    echo "NAO_VOL_SIZE_UNIT=${NAO_VOL_SIZE_UNIT}"
    echo "NAO_VOL_TYPE=${NAO_VOL_TYPE}"
    echo "ATOS_CHANGE_NR=${ATOS_CHANGE_NR}"
    echo "NAO_QTREE_NAME=${NAO_QTREE_NAME}"
    echo "NAO_QUOTA_DISK_LIMIT=${NAO_QUOTA_DISK_LIMIT}"
    echo "NAO_QTREE_SECURITY_STYLE=${NAO_QTREE_SECURITY_STYLE}"
    echo "NAO_QTREE_EXPORT_POLICY=${NAO_QTREE_EXPORT_POLICY}"
    echo "NAO_VOL_LANG=${NAO_VOL_LANG}"

    echo "NAO_VOL_SNAPLOCK_TYPE=${NAO_VOL_SNAPLOCK_TYPE}"
    echo "NAO_VOL_SNAPLOCK_MAX=${NAO_VOL_SNAPLOCK_MAX}"
    echo "NAO_VOL_SNAPLOCK_AUTOCOMMIT=${NAO_VOL_SNAPLOCK_AUTOCOMMIT}"
    sleep 3

# Volume create
    if [ "${NAO_CLUSTERNAME}" != "" ] && [ "${NAO_VSERVER_NAME}" != "" ] && [ "${NAO_VOL_NAME}" != "" ] && [ "${NAO_VOL_STOR_CLASS}" != "" ]; then

# Storage Class / QoS added (for billing purpose)
      QOS_POL_GROUP="${NAO_VSERVER_NAME}_${NAO_VOL_STOR_CLASS}"
      CHK_QOS_POL_GROUP=`${SSH} ${NAO_CLUSTERNAME} "qos policy-group show -vserver ${NAO_VSERVER_NAME}"|grep "${QOS_POL_GROUP}"`
      if [ "${CHK_QOS_POL_GROUP}" = "" ]; then
# No QOS_POL_GROUP found, create
        ${SSH} ${NAO_CLUSTERNAME} "qos policy-group create -vserver ${NAO_VSERVER_NAME} -policy-group ${QOS_POL_GROUP} -max-throughput INF"
      fi  # CHK_QOS_POL_GROUP
      ${SSH} ${NAO_CLUSTERNAME} "qos policy-group show -vserver ${NAO_VSERVER_NAME} -policy-group ${QOS_POL_GROUP} -field policy-group,vserver,throughput-policy"

# Autosizing
      NAO_MAX_AUTOSIZE=`expr ${NAO_VOL_SIZE} \* 11 / 10`
      NAO_MAX_AUTOSIZE="${NAO_MAX_AUTOSIZE}${NAO_VOL_SIZE_UNIT}"
      echo "    NAO_MAX_AUTOSIZE=${NAO_MAX_AUTOSIZE}"

      if [ "${NAO_VOL_SNAPLOCK_TYPE}" = "" ]; then
        NAO_VOL_SNAPLOCK_TYPE="non-snaplock"
      fi

      echo "  NAO_CLUSTERNAME=${NAO_CLUSTERNAME} NAO_VSERVER_NAME=${NAO_VSERVER_NAME} NAO_VOL_NAME=${NAO_VOL_NAME} NAO_VOL_SNAPLOCK_TYPE=${NAO_VOL_SNAPLOCK_TYPE} NAO_VOL_SIZE=${NAO_VOL_SIZE} NAO_VOL_SIZE_UNIT=${NAO_VOL_SIZE_UNIT} "|tee -a ${LOG}

# Check is volume exists
      VOL_CHK=`${SSH} ${NAO_CLUSTERNAME} "volume show -vserver ${NAO_VSERVER_NAME} -volume ${NAO_VOL_NAME} -field volume"|grep ${NAO_VOL_NAME} `
      if [ "${VOL_CHK}" = "" ]; then
# When no LANGUAGE, then use without
        if [ "${NAO_VOL_LANG}" == "" ]; then
          ${SSH} ${NAO_CLUSTERNAME} "volume create -vserver ${NAO_VSERVER_NAME} -volume ${NAO_VOL_NAME} -aggregate ${NAO_VOL_AGGR_NAME} -size ${NAO_VOL_SIZE}${NAO_VOL_SIZE_UNIT} -type ${NAO_VOL_TYPE} -qos-policy-group ${NAO_VSERVER_NAME}_${NAO_VOL_STOR_CLASS} -comment ${ATOS_CHANGE_NR} -min-autosize 5GB -max-autosize ${NAO_MAX_AUTOSIZE} -autosize-mode grow_shrink -snaplock-type ${NAO_VOL_SNAPLOCK_TYPE} "
        else
          ${SSH} ${NAO_CLUSTERNAME} "volume create -vserver ${NAO_VSERVER_NAME} -volume ${NAO_VOL_NAME} -aggregate ${NAO_VOL_AGGR_NAME} -size ${NAO_VOL_SIZE}${NAO_VOL_SIZE_UNIT} -type ${NAO_VOL_TYPE} -qos-policy-group ${NAO_VSERVER_NAME}_${NAO_VOL_STOR_CLASS} -comment ${ATOS_CHANGE_NR} -min-autosize 5GB -max-autosize ${NAO_MAX_AUTOSIZE} -autosize-mode grow_shrink -language ${NAO_VOL_LANG} -snaplock-type ${NAO_VOL_SNAPLOCK_TYPE} "
        fi  # NAO_VOL_LANG}" == ""
      fi  # ${VOL_CHK}" != "" 

# Volume Update / Modify
      ${SSH} ${NAO_CLUSTERNAME} "volume modify -vserver ${NAO_VSERVER_NAME} -volume ${NAO_VOL_NAME} -size ${NAO_VOL_SIZE}${NAO_VOL_SIZE_UNIT} -qos-policy-group ${NAO_VSERVER_NAME}_${NAO_VOL_STOR_CLASS} -comment ${ATOS_CHANGE_NR} -min-autosize 5GB -max-autosize ${NAO_MAX_AUTOSIZE} -autosize-mode grow_shrink "

      if [ "${NAO_VOL_TYPE}" = "RW" ]; then
        ${SSH} ${NAO_CLUSTERNAME} "volume mount -vserver ${NAO_VSERVER_NAME} -volume ${NAO_VOL_NAME} -junction-path \"/${NAO_VOL_NAME}\" "
      fi  # RW

# When SNAPLOCK
      if [ "${NAO_VOL_SNAPLOCK_TYPE}" != "non-snaplock" ]; then
        ${SSH} ${NAO_CLUSTERNAME} "volume snaplock modify -vserver ${NAO_VSERVER_NAME} -volume ${NAO_VOL_NAME} -default-retention-period min -maximum-retention-period \"${NAO_VOL_SNAPLOCK_MAX}\" -autocommit-period \"${NAO_VOL_SNAPLOCK_AUTOCOMMIT}\" "
        ${SSH} ${NAO_CLUSTERNAME} "volume snaplock show -vserver ${NAO_VSERVER_NAME} -volume ${NAO_VOL_NAME} -field type,maximum-retention-period,default-retention-period,autocommit-period"
      fi  # != "non-snaplock" 

      ${SSH} ${NAO_CLUSTERNAME} "volume show -vserver ${NAO_VSERVER_NAME} -volume ${NAO_VOL_NAME} -field volume,aggregate,size,qos-policy-group,junction-path,type,language,comment,max-autosize,used"


      sleep 1
    else
      echo "  Not all VAR's has a value."|tee -a ${LOG}
    fi  # !=

  fi  # ${FNAME}" != "" 

done  # LINE

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

