
#/bin/sh
# File	: cdot_port_config.sh
# By	: Maarten de Boer@Atos.net, 221222
# Subject	: Script to create port configs
#(0.2),221229	: Check for empty VARs
PGM=`basename $0|cut -d\. -f1`
VER="0.2"
LOG="${HOME}/log/${PGM}.log"
SSH="/usr/bin/ssh -n"
RCFILE="${HOME}/etc/${PGM}.rc"
SSH="/usr/bin/ssh -n"

DATAFILE="${HOME}/data/${PGM}.csv"
CLUSTER="tlenlfas8040"
NFILTER="[?]*"

USAGE()
{
  echo "Usage: ${PGM} [<options>]"
  echo "  Version: ${VER}"
  echo "  options       :"
  echo "    -c          : Clustername (${CLUSTER})"
  echo "    -d          : Datafile (${DATAFILE})"
  echo "    -n          : Nfilter (${NFILTER})"
  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) CLUSTER="${2}"; shift ;;
    -d) DATAFILE="${2}"; shift ;;
    -n) NFILTER="${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}

if [ ! -f ${DATAFILE} ]; then
  echo "  DATAFILE (${DATAFILE}) NOT found. Exiting ..."
  exit 3
fi
echo "  Configs ports: CLUSTER=${CLUSTER} NFILTER=${NFILTER}"
echo "Press [ENTER}"
read INPUT

# DATAFILE
# cluster ; node ; HW-port ; IFgrp ; VLAN ; MTU ; IPspace ; BroDomain
cat ${DATAFILE}|grep -v ^#|grep ${CLUSTER}|grep ${NFILTER}|while read LINE
do
  CLUSTER=`echo ${LINE}|awk -F\; '{print $1}'`
  NODE=`echo ${LINE}|awk -F\; '{print $2}'`
  HW_PORT=`echo ${LINE}|awk -F\; '{print $3}'`
  IFGRP=`echo ${LINE}|awk -F\; '{print $4}'`
  VLAN=`echo ${LINE}|awk -F\; '{print $5}'`
  MTU=`echo ${LINE}|awk -F\; '{print $6}'`
  IPSPACE=`echo ${LINE}|awk -F\; '{print $7}'`
  BRODOMAIN=`echo ${LINE}|awk -F\; '{print $8}'`

  echo "  CLUSTER=${CLUSTER} NODE=${NODE} HW_PORT=${HW_PORT} IFGRP=${IFGRP} VLAN=${VLAN} MTU=${MTU} IPSPACE=${IPSPACE} BRODOMAIN=${BRODOMAIN}"|tee -a ${LOG}

# 0. Remove port from Default domain
  if [ "${HW_PORT}" != "" ]; then
    NODE_PORT=`${SSH} ${CLUSTER} "network port broadcast-domain show -broadcast-domain Default"|grep "${NODE}:${HW_PORT}"`
    if [ "${NODE_PORT}" != "" ]; then
      echo "    0. Remove port (${NODE}:${HW_PORT}) from Default domain"|tee -a ${LOG}
      ${SSH} ${CLUSTER} "network port broadcast-domain remove-ports -broadcast-domain Default -ports ${NODE}:${HW_PORT}"
      ${SSH} ${CLUSTER} "network port broadcast-domain show -broadcast-domain Default"|grep "${NODE}"
    fi  # ${NODE_PORT}" != ""
  fi  # HW_PORT}" != ""


# 1. Creating InterFaceGroup
  if [ "${NODE}" != "" ] && [ "${IFGRP}" != "" ]; then
    NODE_IFGRP=`${SSH} ${CLUSTER} "ifgrp show -node ${NODE}"|grep "${IFGRP}"`
    if [ "${NODE_IFGRP}" = "" ]; then
      echo "    1. Creating InterFaceGroup (${IFGRP}) at ${CLUSTER} for ${NODE}"|tee -a ${LOG}
      ${SSH} ${CLUSTER} "ifgrp create -node ${NODE} -ifgrp ${IFGRP} -distr-func ip -mode multimode"
      ${SSH} ${CLUSTER} "ifgrp show -node ${NODE} -ifgrp ${IFGRP}"
      sleep 1
    fi  # {NODE_IFGRP}" = ""
  fi  # IFGRP}" != ""


# 2. Adding ports to IFG 
  if [ "${NODE}" != "" ] && [ "${HW_PORT}" != "" ]; then
    NODE_IFGRP_PORT=`${SSH} ${CLUSTER} "ifgrp show -node ${NODE} -ifgrp ${IFGRP}"|grep "${HW_PORT}"`
    if [ "${NODE_IFGRP_PORT}" = "" ]; then
      echo "    2. Adding (HW)port (${HW_PORT}) to IFG (${IFGRP}) on node ${NODE} "|tee -a ${LOG}
      ${SSH} ${CLUSTER} "ifgrp add-port -node ${NODE} -ifgrp ${IFGRP} -port ${HW_PORT}"
      ${SSH} ${CLUSTER} "ifgrp show -node ${NODE} -ifgrp ${IFGRP}"
      sleep 1
    fi  # NODE_IFGRP_PORT
  fi  # NODE}" != ""


# 3. Adding VLAN to interface-port "
  if [ "${NODE}" != "" ] && [ "${VLAN}" != "" ]; then
    NODE_VLAN=`${SSH} ${CLUSTER} "vlan show -node ${NODE} -field vlan-name"|grep "\-${VLAN}"`
    if [ "${NODE_VLAN}" = "" ]; then
      echo "    3. Adding VLAN (${VLAN}) to interface-port (IFGRP: ${IFGRP}) on node ${NODE}"|tee -a ${LOG}
      ${SSH} ${CLUSTER} "vlan create -node ${NODE} -vlan-name ${IFGRP}-${VLAN}"
      ${SSH} ${CLUSTER} "vlan show -node ${NODE}"
      sleep 1
    fi  # NODE_VLAN}" = "" 
  fi  # VLAN}" != ""


# 4. Mod. MTU's"
  if [ "${NODE}" != "" ] && [ "${MTU}" != "" ] && [ "${IFGRP}" != "" ]; then
    NODE_PORT_MTU=`${SSH} ${CLUSTER} "network port show -node ${NODE} -port ${IFGRP} -field port,mtu"|grep "${MTU}"`
    if [ "${NODE_PORT_MTU}" = "" ]; then
      echo "    4a. Mod. MTU's to ${MTU} on ${NODE}:${IFGRP}"|tee -a ${LOG}
      ${SSH} ${CLUSTER} "network port modify -node ${NODE} -port ${IFGRP} -mtu ${MTU}"
    fi  # NODE_PORT_MTU
    NODE_VLAN_MTU=`${SSH} ${CLUSTER} "network port show -node ${NODE} -port ${IFGRP}-${VLAN} -field port,mtu"|grep "${MTU}"`
    if [ "${NODE_VLAN_MTU}" = "" ]; then
      echo "    4b. Mod. MTU's to ${MTU} on ${NODE}:${IFGRP}-${VLAN}"|tee -a ${LOG}
      ${SSH} ${CLUSTER} "network port modify -node ${NODE} -port ${IFGRP}-${VLAN} -mtu ${MTU}"
      ${SSH} ${CLUSTER} "network port show -node ${NODE} -field port,mtu"
    fi  # NODE_VLAN_MTU
    sleep 1
  fi  # IFGRP}" != ""


# 5. Creating IPspace
  if [ "${NODE}" != "" ] && [ "${IPSPACE}" != "" ]; then
    NODE_IPSPACE=`${SSH} ${CLUSTER} "ipspace show"|grep "${IPSPACE}"`
    if [ "${NODE_IPSPACE}" = "" ]; then
      echo "    5. Creating IPspace (${IPSPACE})"|tee -a ${LOG}
      ${SSH} ${CLUSTER} "ipspace create -ipspace ${IPSPACE}"
      ${SSH} ${CLUSTER} "ipspace show -ipspace ${IPSPACE}"
      sleep 1
    fi  # NODE_IPSPACE
  fi  # IPSPACE}" != ""


# 6. Creating Broadcast Domain
  if [ "${NODE}" != "" ] && [ "${BRODOMAIN}" != "" ]; then
    NODE_BRODOMAIN=`${SSH} ${CLUSTER} "network port broadcast-domain show -field broadcast-domain"|grep "${BRODOMAIN}"`
    if [ "${NODE_BRODOMAIN}" = "" ]; then
      echo "    6. Creating Broadcast Domain ${BRODOMAIN} (IPspace: ${IPSPACE} MTU:${MTU})"|tee -a ${LOG}
      ${SSH} ${CLUSTER} "network port broadcast-domain create -broadcast-domain ${BRODOMAIN} -ipspace ${IPSPACE} -mtu ${MTU}"
      ${SSH} ${CLUSTER} "network port broadcast-domain show -broadcast-domain ${BRODOMAIN} -ipspace ${IPSPACE} -ports ${NODE}:*"
      sleep 1
    fi  # NODE_BRODOMAIN
  fi  # BRODOMAIN


# 7. Adding ports to Broadcast Domain
  if [ "${NODE}" != "" ] && [ "${BRODOMAIN}" != "" ] && [ "${VLAN}" != "" ]; then
    NODE_BRO_PORTS=`${SSH} ${CLUSTER} "network port broadcast-domain show -broadcast-domain ${BRODOMAIN} -ipspace ${IPSPACE}" | grep "${NODE}:${IFGRP}-${VLAN}"`
    if [ "${NODE_BRO_PORTS}" = "" ]; then
      echo "    7. Adding ports (${NODE}:${IFGRP}-${VLAN}) to Broadcast Domain (${BRODOMAIN}) in IPspace ${IPSPACE})"|tee -a ${LOG}
      ${SSH} ${CLUSTER} "broadcast-domain add-ports -broadcast-domain ${BRODOMAIN} -ipspace ${IPSPACE} -ports ${NODE}:${IFGRP}-${VLAN}"
      ${SSH} ${CLUSTER} "network port broadcast-domain show -broadcast-domain ${BRODOMAIN} -ipspace ${IPSPACE} -ports ${NODE}:*"
      sleep 1
    fi  # NODE_BRO_PORTS
  fi  # VLAN}" != "

done  # LINE

${SSH} ${CLUSTER} "network port broadcast-domain show "


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

