
#!/bin/sh
# File	: noc_snap-mirror-vault_create.sh
# By	: Maarten.deBoer@Atos.net, 230628, 231220
# Subject	: Netapp Ontap Cli script to create SnapMirror/Vails connections from CSV-file
#(0.2),230629	: Mod. CSV, etc
#(0.3),230725	: Mod. CSV-layout (a bit)
#(0.4),230911	: Add LOG, Mod's DATADIR, renamed from cdot_cre_snapmirror.sh, using $1
#(0.5),231220	: Renamed & renamed VARs
#(0.6),230123	: Update
PGM=`basename $0| cut -d\. -f1`
VER="0.6"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
SSH="/bin/ssh -n"
FILTER="mss"

DATADIR="${HOME}/data"
CSV="${DATADIR}/noc_volume-snap-mirror-vault_mss.csv"

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

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

if [ ! -f ${CSV} ]; then
  echo "    NO CSV-file (${CSV}) found. Exiting ..."|tee -a ${LOG}
  exit 3
fi  # ! CSV

#Check CSV-name & SM_POLICY
CSV_MIRROR=`echo ${CSV}|grep -i mirror|grep -vi vault`
CSV_VAULT=`echo ${CSV}|grep -i vault|grep -vi mirror`

echo "  CSV_MIRROR=${CSV_MIRROR}"
echo "  CSV_VAULT=${CSV_VAULT}"
if [ "${CSV_MIRROR}" = "" ] && [ "${CSV_VAULT}" = "" ]; then
  echo "    NO choice in CSV-filename (${CSV}) for DEFault MIRROR  / VAULT . Exiting ..."|tee -a ${LOG}
  exit 4
fi
# For SnapMirror copies
if [ "${CSV_MIRROR}" != "" ]; then
  SM_DEF_POLICY="MirrorAllSnapshots"
fi  #
# For SnapVault relations
if [ "${CSV_VAULT}" != "" ]; then
  SM_DEF_POLICY="MirrorAndVault"
fi

echo "  SM_DEF_POLICY=${SM_DEF_POLICY}"|tee -a ${LOG}
sleep 2

# SnapMirror (xDP) DEST ... SOURC
# 1st part also for 'volume create'
# 2nd part for SnapMirror config
#
# NAO_CLUSTERNAME(1);NAO_SVM_NAME(2);NAO_VOL_NAME(3);NAO_VOL_AGGR_NAME(4);NAO_VOL_STOR_CLASS(5);NAO_VOL_SIZE(6);NAO_VOL_SIZE_UNIT(7);NAO_VOL_TYPE(8);ATOS_CHANGE_NR(9);NAO_QTREE_NAME(10);NAO_QUOTA_DISK_LIMIT(11);NAO_QTREE_SECURITY_STYLE(12);NAO_QTREE_EXPORT_POLICY(13);NAO_VOL_LANG(14);
#NAO_SOURE_CLUSTER(15);NAO_SOURCE_SVM(16);NAO_SOURCE_VOLUME(17);[NAO_SOURCE_QTREE](18);
# NAO_SNAPMIRROR_POLICY(19)

cat ${CSV}|grep -v ^#|grep "${FILTER}"|while read LINE
do
#  echo "LINE=${LINE}"
  NAO_CLUSTERNAME=`echo ${LINE}|awk -F\; '{print $1}'`
  NAO_SVM_NAME=`echo ${LINE}|awk -F\; '{print $2}'`
  NAO_VOL_NAME=`echo ${LINE}|awk -F\; '{print $3}'`
  NAO_VOL_TYPE=`echo ${LINE}|awk -F\; '{print $8}'`
  NAO_QTREE_NAME=`echo ${LINE}|awk -F\; '{print $10}'|grep -v "#"`

  NAO_SOURE_CLUSTER=`echo ${LINE}|awk -F\; '{print $15}'`
  NAO_SOURCE_SVM=`echo ${LINE}|awk -F\; '{print $16}'`
  NAO_SOURCE_VOLUME=`echo ${LINE}|awk -F\; '{print $17}'`
  NAO_SOURCE_QTREE=`echo ${LINE}|awk -F\; '{print $18}'|grep -v "#"`

  NAO_SNAPMIRROR_POLICY=`echo ${LINE}|awk -F\; '{print $19}'|grep -v "#"`
  if [ "${NAO_SNAPMIRROR_POLICY}" = "" ]; then
    NAO_SNAPMIRROR_POLICY="${SM_DEF_POLICY}"
  fi

  echo "  DEST: NAO_CLUSTERNAME=${NAO_CLUSTERNAME} NAO_SVM_NAME=${NAO_SVM_NAME} NAO_VOL_NAME=${NAO_VOL_NAME} NAO_QTREE_NAME=${NAO_QTREE_NAME} "|tee -a ${LOG}
  echo "    NAO_SOURE_CLUSTER=${NAO_SOURE_CLUSTER} NAO_SOURCE_SVM=${NAO_SOURCE_SVM} NAO_SOURCE_VOLUME=${NAO_SOURCE_VOLUME} NAO_SOURCE_QTREE=${NAO_SOURCE_QTREE} "|tee -a ${LOG}
  echo "      NAO_VOL_TYPE(SM_TYPE)=${NAO_VOL_TYPE} NAO_SNAPMIRROR_POLICY(SM_DEF_POLICY)=${NAO_SNAPMIRROR_POLICY}"|tee -a ${LOG}
  sleep 1

  if [ "${NAO_SOURE_CLUSTER}" != "" ] && [ "${NAO_SOURCE_SVM}" != "" ] && [ "${NAO_SOURCE_VOLUME}" != "" ]; then
    echo "  Checking languages at source & destination ..."
# Check Source & Dest LANGUAGE
    SRC_LANG=`${SSH} ${NAO_SOURE_CLUSTER} "volume show -vserver ${NAO_SOURCE_SVM} -volume ${NAO_SOURCE_VOLUME} -field language"| grep "${NAO_SOURCE_SVM}"|awk '{print $3}'`
    DEST_LANG=`${SSH} ${NAO_CLUSTERNAME} "volume show -vserver ${NAO_SVM_NAME} -volume ${NAO_VOL_NAME} -field language"| grep "${NAO_SVM_NAME}"|awk '{print $3}'`
#
    echo "    SRC_LANG=${SRC_LANG} DEST_LANG=${DEST_LANG} "
    if [ "${SRC_LANG}" == "${DEST_LANG}" ]; then
      echo "    Creating SM ${NAO_SOURCE_SVM}:${NAO_SOURCE_VOLUME} => ${NAO_SVM_NAME}:${NAO_VOL_NAME}"|tee -a ${LOG}
# Create SM from Dest-cluster/SVM
      ${SSH} ${NAO_CLUSTERNAME} "snapmirror create -source-path ${NAO_SOURCE_SVM}:${NAO_SOURCE_VOLUME} -destination-path ${NAO_SVM_NAME}:${NAO_VOL_NAME} -type ${NAO_VOL_TYPE} -policy ${NAO_SNAPMIRROR_POLICY}"
      ${SSH} ${NAO_CLUSTERNAME} "snapmirror initialize -destination-path ${NAO_SVM_NAME}:${NAO_VOL_NAME}"

      echo "  SnapMirror show (dest-)vserver/volume :${NAO_SVM_NAME}/${NAO_VOL_NAME}"
      echo "${SSH} ${NAO_CLUSTERNAME} \"snapmirror show -destination-vserver ${NAO_SVM_NAME} -destination-volume ${NAO_VOL_NAME} -field lag,state,unhealthy-reason,last-transfer-error\" "
      ${SSH} ${NAO_CLUSTERNAME} "snapmirror show -destination-vserver ${NAO_SVM_NAME} -destination-volume ${NAO_VOL_NAME} -field lag,state,unhealthy-reason,last-transfer-error"|tee -a ${LOG}
    else
      echo "    Source language (${SRC_LANG}) NOT same as Destination language (${DEST_LANG})"|tee -a ${LOG}
    fi  # SRC_LANG = DEST_LANG
  else
    echo "  Not all var's are known"|tee -a ${LOG}
  fi  # SRC_CLSTR}" != ""  ...

done  # LINE

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

