

#/bin/sh
# File	: cdot_vserver_create.sh
# By	: Maarten de Boer@Atos.net, 221221
# Subject	: Script to create vserver (SVM) onto cDOT and Checks first
#(0.2),221229	: Added checks
#(0.3),231003	: Mod's
PGM=`basename $0|cut -d\. -f1`
VER="0.3"
LOG="${HOME}/log/${PGM}.log"
SSH="/usr/bin/ssh -n"
RCFILE="${HOME}/etc/${PGM}.rc"

DATAFILE="${HOME}/data/${PGM}.csv"
#CLUSTER="tlenlfas8040"
# Cludter-Filter
CFILTER="nlnaf10"
# SVM Filter
SFILTER="[?]*"

USAGE()
{
  echo "Usage: ${PGM} [<options>]"
  echo "  Version: ${VER}"
  echo "  options       :"
  echo "    -c          : Cluster-Filter (${CFILTER})"
  echo "    -s          : Svm-Filter (${SFILTER})"
  echo "    -d          : Datafile (${DATAFILE})"
  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 ;;
    -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}
echo "  CFILTER=${CFILTER}"
echo "  SFILTER=${SFILTER}"
echo "  DATAFILE=${DATAFILE}"


if [ ! -f ${DATAFILE} ]; then
  echo "  DATAFILE (${DATAFILE}) NOT found. Exiting ..."
  exit 3
fi
echo "  Config vserver(SVM):"
echo "Press [ENTER]"
read INPUT

# DATAFILE
# # cluster; vserver;aggr;ipspace;lif;home-node;home-port;address;netmask;
#tlenlfs8040;tlenltne01;n01a0901;tnl01-ipspace;tnl01;iscsi;tlenlfs8040-01;a100a-2;10.90.32.41;2
#tlenlfs8040;tlenltne01;n01a0901;tnl01-ipspace;tnl02;cifs,nfs,fcache;tlenlfs8040-01;a100a-2;10.90.32.43;2

# (1)NAO_CLUSTERNAME;(2)NAO_SVM_NAME;(3)NAO_SVM_INTERFACE_NAME;(4)NAO_SVM_ROOT_VOLUME;(5)NAO_SVM_ROOT_VOLUME_AGGREGATE;(6)NAO_IPSPACE;(7)NAO_SVM_ADDRESS;(8)NAO_SVM_NETMASK;(9)NAO_SVM_GATEWAY;(10)NAO_SVM_HOME_NODE;(11)NAO_SVM_HOME_PORT;(12)CH-NR

cat ${DATAFILE}|grep -v ^#|grep ${CFILTER}|grep ${NFILTER}|while read LINE
do
  CLUSTER=`echo ${LINE}|awk -F\; '{print $1}'`
  VSERVER=`echo ${LINE}|awk -F\; '{print $2}'`
  LIF=`echo ${LINE}|awk -F\; '{print $3}'`
  ROOT_VOL=`echo ${LINE}|awk -F\; '{print $4}'`
  ROOT_VOL_AGGR=`echo ${LINE}|awk -F\; '{print $5}'`
  IPSPACE=`echo ${LINE}|awk -F\; '{print $6}'`
  ADDRESS=`echo ${LINE}|awk -F\; '{print $7}'`
  NETMASK=`echo ${LINE}|awk -F\; '{print $8}'`
  GATEWAY=`echo ${LINE}|awk -F\; '{print $9}'`
  HOME_NODE=`echo ${LINE}|awk -F\; '{print $10}'`
  HOME_PORT=`echo ${LINE}|awk -F\; '{print $11}'`
  CH_NR=`echo ${LINE}|awk -F\; '{print $12}'`

#  DATA_PROT=`echo ${LINE}|awk -F\; '{print $6}'`
  DATA_PROT="nfs,cifs,iscsi"

#  VSRV_SFX=`echo ${VSERVER}|sed 's/tlenl//g'|sed 's/nlnafs//g'`

  echo "  CLUSTER=${CLUSTER} VSERVER=${VSERVER} LIF=${LIF} ROOT_VOL=${ROOT_VOL} ROOT_VOL_AGGR=${ROOT_VOL_AGGR} IPSPACE=${IPSPACE} DATA_PROT=${DATA_PROT} HOME_NODE=${HOME_NODE} HOME_PORT=${HOME_PORT} ADDRESS=${ADDRESS} NETMASK=${NETMASK}"|tee -a ${LOG}


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


# 1. Create vserver (SVM)
  CL_VSERVER=`${SSH} ${CLUSTER} "vserver show"|grep "${VSERVER}"`
  if [ "${CL_VSERVER}" = "" ]; then
    CL_IPSPACE=`${SSH} ${CLUSTER} "ipspace show"|grep "${IPSPACE}"`
    if [ "${CL_IPSPACE}" = "" ] || [ "${AGGR}" = "" ]; then
      echo "    ip-space (${IPSPACE})  or/and AGGR (${AGGR}) not known. NOT be able to create vserver (SVM)"|tee -a ${LOG}
    else
      echo "    1. Create vserver (SVM) ${VSERVER}"
      ${SSH} ${CLUSTER} "vserver create -vserver ${VSERVER} -rootvolume ${ROOT_VOL} -aggregate ${ROOT_VOL_AGGR} -ns-switch file -nm-switch file -rootvolume-security-style unix -language C.UTF-8 -snapshot-policy vserver_root -ipspace ${IPSPACE}"
      ${SSH} ${CLUSTER} "network interface show -vserver ${VSERVER} -field data,lif,address,curr-node,curr-port"
    fi  # CL_IPSPACE
  fi  # CL_VSERVER}" = ""



# Create IF into SVM
  CL_VSERVER=`${SSH} ${CLUSTER} "vserver show"|grep "${VSERVER}"`
  if [ "${CL_VSERVER}" != "" ] && [ "${ADDRESS}" != "" ]; then

# 2a. Create iSCSI Network Interface for SVM
    if [ "${DATA_PROT}" = "iscsi" ]; then
      VSERVER_IP=`${SSH} ${CLUSTER} "network interface show -vserver ${VSERVER}"|grep "${ADDRESS}"`
      if [ "${VSERVER_IP}" = "" ]; then
        echo "    2a. Create iSCSI Network Interface (LIF=${LIF}) for Vserver ${VSERVER}"|tee -a ${LOG}
        ${SSH} ${CLUSTER} "network interface create -vserver ${VSERVER} -lif ${LIF} -role data -data-protocol \"${DATA_PROT}\" -home-node ${HOME_NODE} -home-port ${HOME_PORT} -address ${ADDRESS} -netmask ${NETMASK} -status-admin up -firewall-policy data -auto-revert false"
      fi  # VSERVER_IP
    else

# 2b. Create NAS (CIFS & NFS) Network Interface for SVM
      VSERVER_IP=`${SSH} ${CLUSTER} "network interface show -vserver ${VSERVER}"|grep "${ADDRESS}"`
      if [ "${VSERVER_IP}" = "" ]; then
        echo "    2b. Create NAS (CIFS & NFS) Network Interface (LIF=${LIF}) for Vserver ${VSERVER} with ${ADDRESS} "|tee -a ${LOG}
        ${SSH} ${CLUSTER} "network interface create -vserver ${VSERVER} -lif ${LIF} -role data -data-protocol \"${DATA_PROT}\" -home-node ${HOME_NODE} -home-port ${HOME_PORT} -address ${ADDRESS} -netmask ${NETMASK} -status-admin up -failover-policy system-defined -firewall-policy data -auto-revert false"
      fi  # VSERVER_IP
    fi  # DATA_PROT

  fi  # CL_VSERVER}

done  # DATAFILE

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

