
#!/bin/sh
# File	: noc_vserver-dr_update.sh
# By	: Maarten.deBoer@Atos.net, 240130
# Subject	: Netapp Ontap Cli script for creating vserver/SVM-DR
#(0.2),240205	: Added FILTER
#(0.3),240205	: Check 1st
#(0.4),240228	: Mod's, From : noc_vserver-dr_create.sh
PGM=`basename $0|cut -d\. -f1`
VER="0.4"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
SSH="/usr/bin/ssh -n"

DATAINDIR="${HOME}/data/rc"
FILTER="[?]*"
FILTER="mss"

# VARs
NAO_CLUSTER_NAME="nlnaf199"
NAO_DR_CLUSTER_NAME="nlnaf199"
NAO_VSERVER_NAME="nlnafsmss99"
NAO_VSERVER_DR_NAME="nlnafsmss99-dr"
NAO_IPSPACE="mss99-ipspace"

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 3
fi  # INDIR

cd ${DATAINDIR}
ls -1 vserver-dr*.rc |grep "${FILTER}"|while read RCFILE
do
  echo "  RCFILE=${RCFILE}"
  if [ -f ${RCFILE} ]; then
    echo "    Using ${RCFILE} "|tee -a ${LOG}
    . ./${RCFILE}
  fi  # RCFILE
  echo "    NAO_CLUSTER_NAME=${NAO_CLUSTER_NAME}"
  echo "    NAO_DR_CLUSTER_NAME=${NAO_DR_CLUSTER_NAME}"
  echo "    NAO_VSERVER_NAME=${NAO_VSERVER_NAME}"
  echo "    NAO_VSERVER_DR_NAME=${NAO_VSERVER_DR_NAME}"
  echo "    NAO_IPSPACE=${NAO_IPSPACE}"
  sleep 2

# Check Dest-IPspace
  if [ "${NAO_DR_CLUSTER_NAME}" != "" ]; then
    echo ""
    echo "--- Checking Dest. IPspace @${NAO_DR_CLUSTER_NAME}"
    ${SSH} ${NAO_DR_CLUSTER_NAME} "network ipspace show -ipspace ${NAO_IPSPACE} " 1>/dev/null 2>&1
    EC=${?}
    if [ ${EC} -ne 0 ]; then
      echo "    Creating NAO_IPSPACE ${NAO_IPSPACE} @${NAO_DR_CLUSTER_NAME}" |tee -a ${LOG}
      ${SSH} ${NAO_DR_CLUSTER_NAME} "network ipspace create -ipspace ${NAO_IPSPACE}"
    fi  # EC <> 0
    ${SSH} ${NAO_DR_CLUSTER_NAME} "network ipspace show -ipspace ${NAO_IPSPACE} "

#    BRO_DOM=`${SSH} ${NAO_CLUSTER_NAME} "ipspace show -ipspace ${NAO_IPSPACE} -field broadcast"|grep "${NAO_IPSPACE}"|awk '{print $2}'`
#    MTU=`${SSH} ${NAO_CLUSTER_NAME} "broadcast show -broadcast ${BRO_DOM} -field mtu"|grep "${BRO_DOM}"|awk '{print $3}'`
#    echo "BRO_DOM=${BRO_DOM} MTU=${MTU}"

    echo "--- Checking Dest. vserver ${NAO_VSERVER_DR_NAME}"
    ${SSH} ${NAO_DR_CLUSTER_NAME} "vserver show -vserver ${NAO_VSERVER_DR_NAME}" 1>/dev/null 2>&1
    EC=${?}
    if [ ${EC} -ne 0 ]; then
      echo "    Creating DR-vserver ${NAO_DR_CLUSTER_NAME}:${NAO_VSERVER_DR_NAME}"|tee -a ${LOG}
      ${SSH} ${NAO_DR_CLUSTER_NAME} "vserver create -vserver ${NAO_VSERVER_DR_NAME} -subtype dp-destination -ipspace ${NAO_IPSPACE}  "
    fi  # EC <> 0
    ${SSH} ${NAO_DR_CLUSTER_NAME} "vserver show -vserver ${NAO_VSERVER_DR_NAME} -field vserver,operational-state,ipspace"

# Create a peer connection between source vserver and new DR vserver:
    echo "--- Checking peer from ${NAO_VSERVER_NAME} to ${NAO_VSERVER_DR_NAME}"
    ${SSH} ${NAO_DR_CLUSTER_NAME} "vserver peer show -vserver ${NAO_VSERVER_DR_NAME} " 1>/dev/null 2>&1
    EC=${?}
    if [ ${EC} -ne 0 ]; then
      echo "    Creating Peers between ${NAO_VSERVER_NAME} and ${NAO_VSERVER_DR_NAME}"|tee -a ${LOG}
      ${SSH} ${NAO_DR_CLUSTER_NAME} "vserver peer create -vserver ${NAO_VSERVER_DR_NAME} -peer-vserver ${NAO_VSERVER_NAME} -applications snapmirror -peer-cluster ${NAO_CLUSTER_NAME} "
      EC=${?}
      if [ ${EC} -eq 0 ]; then
        sleep 10
      fi
      ${SSH} ${NAO_CLUSTER_NAME} "vserver peer accept -vserver ${NAO_VSERVER_NAME} -peer-vserver ${NAO_VSERVER_DR_NAME} "
      ${SSH} ${NAO_CLUSTER_NAME} "vserver peer show  -vserver ${NAO_VSERVER_NAME}"
    fi  # EC <> 0
    ${SSH} ${NAO_DR_CLUSTER_NAME} "vserver peer show  -vserver ${NAO_VSERVER_DR_NAME}"

    echo "--- Checking SnapMirror from ${NAO_VSERVER_NAME} to ${NAO_VSERVER_DR_NAME}"
    ${SSH} ${NAO_DR_CLUSTER_NAME} "snapmirror show -destination-path ${NAO_VSERVER_DR_NAME}: -field vserver" 1>/dev/null 2>&1
    EC=${?}
    if [ ${EC} -ne 0 ]; then
# Create snapmirror relation between source vserver and DR vserver configuration setting “-identity-preserve true”:
      echo "    Creating SnapMirror between source vserver and DR vserver"|tee -a ${LOG}
#      echo "${NAO_DR_CLUSTER_NAME}::>snapmirror create -destination-path ${NAO_VSERVER_DR_NAME}: –source-path ${NAO_VSERVER_NAME}: -vserver ${NAO_VSERVER_DR_NAME} -throttle unlimited -schedule hourly -policy MirrorAllSnapshots -identity-preserve true "
      echo "${NAO_DR_CLUSTER_NAME}::>snapmirror create -destination-path ${NAO_VSERVER_DR_NAME}: –source-path ${NAO_VSERVER_NAME}:  -throttle unlimited -schedule hourly -policy MirrorAllSnapshots -identity-preserve true "

#      ${SSH} ${NAO_DR_CLUSTER_NAME} "snapmirror create -destination-path ${NAO_VSERVER_DR_NAME}: –source-path ${NAO_VSERVER_NAME}: -vserver ${NAO_VSERVER_DR_NAME} -throttle unlimited -schedule hourly -policy MirrorAllSnapshots -identity-preserve true "
      ${SSH} ${NAO_DR_CLUSTER_NAME} "snapmirror create -destination-path ${NAO_VSERVER_DR_NAME}: –source-path ${NAO_VSERVER_NAME}: -throttle unlimited -schedule hourly -policy MirrorAllSnapshots -identity-preserve true "

# snapmirror create -destination-path nlnafsmss13-dr: -source-path nlnafsmss13: -vserver nlnafsmss13-dr -throttle unlimited -schedule hourly -policy MirrorAllSnapshots -identity-preserve true
# nlnaf102::> snapmirror create -destination-path nlnafsmss13-dr: -source-path nlnafsmss13: -type XDP -schedule hourly -policy MirrorAllSnapshots -identity-preserve true
# cluster_dst::> snapmirror create -source-path svm1: -destination-path svm_backup: -type XDP -schedule my_daily -policy MirrorAllSnapshots -identity-preserve true
    fi  # EC <> 0

    echo "--- Checking SnapMirror status ${NAO_VSERVER_NAME} to ${NAO_VSERVER_DR_NAME}"
    ${SSH} ${NAO_DR_CLUSTER_NAME} "snapmirror show -destination-path ${NAO_VSERVER_DR_NAME}: -state Uninitialized -status Idle" 1>/dev/null 2>&1
    EC=${?}
    if [ ${EC} -eq 0 ]; then
      echo "    Initializing SnapMirror between source vserver and DR-vserver ${NAO_VSERVER_DR_NAME}"|tee -a ${LOG}
#      echo "${NAO_DR_CLUSTER_NAME}::> snapmirror initialize -destination-path ${NAO_VSERVER_DR_NAME}:"
      ${SSH} ${NAO_DR_CLUSTER_NAME} "snapmirror initialize -destination-path ${NAO_VSERVER_DR_NAME}:"
    fi  # EC <> 0
    ${SSH} ${NAO_DR_CLUSTER_NAME} "snapmirror show -destination-path ${NAO_VSERVER_DR_NAME}: -field vserver,state,status"

    echo "--- Volumes in vserver-dr ${NAO_VSERVER_DR_NAME}:"
    VOL_PREFIX=`echo ${NAO_VSERVER_NAME}|sed 's/nlnafs//g'`
    ${SSH} ${NAO_DR_CLUSTER_NAME} "snapmirror show -destination-volume ${VOL_PREFIX}* "

#    ${SSH} ${NAO_DR_CLUSTER_NAME} "network interface show -vserver ${NAO_VSERVER_DR_NAME} -field vserver,curr-port,curr-node"
  fi  # NAO_DR_CLUSTER_NAME

done  # FNAME


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

