
#!/bin/sh
# File	: noc_vserver_update.sh
# By	: Maarten.deBoer@Atos.net, 240206
# Subject	: Script to create Netapp Ontap vserver by Cli
#(0.2),240227	: Add to FNAME "vserver*" & comment
#(0.3),240228	: Upd NAO_DATA_PROT (from noc_vserver_create.sh)
PGM=`basename $0|cut -d\. -f1`
VER="0.3"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
SSH="/usr/bin/ssh -n"

FILTER="mss99"
DATAINDIR="${HOME}/data/rc"

DEF_VSERVER_LANG="C.UTF-8"
NAO_DATA_PROT="nfs,cifs"

NAO_CLUSTER_NAME="nlnaf999"
NAO_VSERVER_NAME="nlnafsmss99"
VOL_PREFIX=`echo ${NAO_VSERVER_NAME}|sed 's/nlnafs//g'`
NAO_VSERVER_ROOT_VOLUME="${VOL_PREFIX}_vol0root"
NAO_VSERVER_ROOT_VOLUME_AGGREGATE="n99a9999"
NAO_VSERVER_INTERFACE_NAME="${VOL_PREFIX}"
NAO_VSERVER_ADDRESS="10.99.88.77"
NAO_VSERVER_NETMASK="255.255.255.0"
NAO_VSERVER_HOME_NODE="${NAO_CLUSTER_NAME}-01"
NAO_VSERVER_HOME_PORT="a999b-9999"
NAO_VSERVER_GATEWAY="10.99.88.1"
NAO_IPSPACE="ips-${VOL_PREFIX}|"
ATOS_CH_NR="CHG123456789"

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

echo "`date` ${PGM} v${VER} started."|tee -a ${LOG}
touch ${TMP}
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 vserver*.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_CLUSTER_NAME=${NAO_CLUSTER_NAME}|"
    echo "  NAO_VSERVER_NAME=${NAO_VSERVER_NAME}|"
    echo "  NAO_VSERVER_ROOT_VOLUME=${NAO_VSERVER_ROOT_VOLUME}|"
    echo "  NAO_VSERVER_ROOT_VOLUME_AGGREGATE=${NAO_VSERVER_ROOT_VOLUME_AGGREGATE}|"
    echo "  NAO_VSERVER_INTERFACE_NAME=${NAO_VSERVER_INTERFACE_NAME}|"
    echo "  NAO_VSERVER_ADDRESS=${NAO_VSERVER_ADDRESS}|"
    echo "  NAO_VSERVER_NETMASK=${NAO_VSERVER_NETMASK}|"
    echo "  NAO_VSERVER_HOME_NODE=${NAO_VSERVER_HOME_NODE}|"
    echo "  NAO_VSERVER_HOME_PORT=${NAO_VSERVER_HOME_PORT}|"
    echo "  NAO_VSERVER_GATEWAY=${NAO_VSERVER_GATEWAY}|"
    echo "  NAO_IPSPACE=${NAO_IPSPACE}|"
    echo "  ATOS_CH_NR=${ATOS_CH_NR}|"
    sleep 1

    if [ "${NAO_CLUSTER_NAME}" != "" ] && [ "${NAO_VSERVER_NAME}" != "" ] && [ "${NAO_VSERVER_ROOT_VOLUME_AGGREGATE}" ]; then

# ----- IPSPACE
      ${SSH} ${NAO_CLUSTER_NAME} "ipspace show -ipspace ${NAO_IPSPACE} " 1> /dev/null 2>&1 3>&1
      EC=${?}
      if [ ${EC} -ne 0 ]; then
        echo "    Creating IPspace ${NAO_IPSPACE}"|tee -a ${LOG}
        ${SSH} ${NAO_CLUSTER_NAME} "ipspace create -ipspace ${NAO_IPSPACE} "
      fi  # EC <> 0
      ${SSH} ${NAO_CLUSTER_NAME} "ipspace show -ipspace ${NAO_IPSPACE} "


# ---- Create server_root SnapShot policy
      VOL_SS_POL=`${SSH} ${NAO_CLUSTER_NAME} "volume snapshot policy show -vserver ${NAO_CLUSTER_NAME} -policy vserver_root"`
      if [ "${VOL_SS_POL}" == "" ]; then
        echo "    Creating server_root SnapShot policy"|tee -a ${LOG}
        ${SSH} ${NAO_CLUSTER_NAME} "volume snapshot policy create -vserver ${NAO_CLUSTER_NAME} -policy vserver_root -enabled true -schedule1 weekly -count1 6 -schedule2 daily -count2 6"
      fi  # VOL_SS_POL
      ${SSH} ${NAO_CLUSTER_NAME} "volume snapshot policy show -vserver ${NAO_CLUSTER_NAME} -policy vserver_root"


# ----- Creating vserver(SVM)
      ${SSH} ${NAO_CLUSTER_NAME} "vserver show -vserver ${NAO_VSERVER_NAME}" 1> /dev/null 2>&1
      EC=${?}
      if [ ${EC} -ne 0 ]; then
        echo "    Creating vserver(SVM) ${NAO_VSERVER_NAME}"|tee -a ${LOG}
        ${SSH} ${NAO_CLUSTER_NAME} "vserver create -vserver ${NAO_VSERVER_NAME} -rootvolume ${NAO_VSERVER_ROOT_VOLUME} -aggregate ${NAO_VSERVER_ROOT_VOLUME_AGGREGATE} -ns-switch file -nm-switch file -rootvolume-security-style unix -language ${DEF_VSERVER_LANG} -snapshot-policy vserver_root -ipspace ${NAO_IPSPACE} -comment ${ATOS_CH_NR}"      
      fi  # EC <> 0
# Show
      echo "  SVM/vserver show:"
      ${SSH} ${NAO_CLUSTER_NAME} "vserver show -vserver ${NAO_VSERVER_NAME} -field rootvolume,ipspace,aggregate,language,operational-state,comment,allowed-protocols"


# 2b. Create NAS (CIFS & NFS) Network Interface for SVM
      VSERVER_IP=`${SSH} ${NAO_CLUSTER_NAME} "network interface show -vserver ${NAO_VSERVER_NAME} -address ${NAO_VSERVER_ADDRESS}"|grep "${NAO_VSERVER_ADDRESS}"`
      VSERVER_LIF=`${SSH} ${NAO_CLUSTER_NAME} "network interface show -vserver ${NAO_VSERVER_NAME} -lif ${NAO_VSERVER_INTERFACE_NAME}"|grep "${NAO_VSERVER_INTERFACE_NAME}"`
# When No IP-address & no LIF
      if [ "${VSERVER_IP}" = "" ] && [ "${VSERVER_LIF}" = "" ]; then
        echo "    Create NAS (${NAO_DATA_PROT}) Network Interface (LIF=${NAO_VSERVER_INTERFACE_NAME}) for Vserver ${NAO_VSERVER_NAME} with ${NAO_VSERVER_ADDRESS} "|tee -a ${LOG}
        ${SSH} ${NAO_CLUSTER_NAME} "network interface create -vserver ${NAO_VSERVER_NAME} -lif ${NAO_VSERVER_INTERFACE_NAME} -role data -data-protocol \"${NAO_DATA_PROT}\" -home-node ${NAO_VSERVER_HOME_NODE} -home-port ${NAO_VSERVER_HOME_PORT} -address ${NAO_VSERVER_ADDRESS} -netmask ${NAO_VSERVER_NETMASK} -status-admin up -failover-policy system-defined -firewall-policy data -auto-revert false"
      fi  # VSERVER_IP

      if [ "${VSERVER_LIF}" != "" ] && [ "${VSERVER_IP}" = "" ]; then
#When LIF is there and no IP-addres: Updating IP-address
        echo "    Modifying NAS (${NAO_DATA_PROT}) Network Interface (LIF=${NAO_VSERVER_INTERFACE_NAME}) for Vserver ${NAO_VSERVER_NAME} with ${NAO_VSERVER_ADDRESS} "|tee -a ${LOG}
        ${SSH} ${NAO_CLUSTER_NAME} "network interface modify -vserver ${NAO_VSERVER_NAME} -lif ${NAO_VSERVER_INTERFACE_NAME} -home-node ${NAO_VSERVER_HOME_NODE} -home-port ${NAO_VSERVER_HOME_PORT} -address ${NAO_VSERVER_ADDRESS} -netmask ${NAO_VSERVER_NETMASK} -status-admin up -failover-policy system-defined -firewall-policy data -auto-revert false"
      fi  # VSERVER_LIF}" = ""

      echo "  Network Interface show:"
      ${SSH} ${NAO_CLUSTER_NAME} "network interface show -vserver ${NAO_VSERVER_NAME} -field data,lif,address,curr-node,curr-port,ipspace"


    else
      echo "    NOT enough VAR's filled in."|tee -a ${LOG}
    fi  # CLUSTER_NAME} != "" ...

  fi  # FNAME

done  # FNAME



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

