
#!/bin/sh
# File	: cdot_init_vol_move.sh
# By	: Maarten.deBoer@Atos.net, 221219
# Subject	: Script for moving LIFs
#(0.2),231026	: Upd
PGM=`basename $0|cut -d\. -f1` 
VER="0.2"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.$$"
SSH="/usr/bin/ssh -n"

INTPUTFILE="${HOME}/data/${PGM}_input.csv"
# By  ssh nlnaf100 'set -showseparator ";" ; netw inter show -field lif,curr-node,curr-port' > ${HOME}/data/${PGM}_input.csv

PINGFILE="${HOME}/data/cdot_ping-addr.csv"
#vserver; lif; address;# VLAN;
#nlnafsmnp10;mnp10;10.16.209.11;a100-1924;

CLUSTER="nlnaf100"
SFILTER="[?]*"
SFILTER="mss"
NFILTER="${CLUSTER}-05"
NEW_NODE="${CLUSTER}-15"


if [ "${1}" != "" ]; then
  SFILTER=`echo ${1}|grep "[a-z][a-z][a-z]"`
fi
echo "`date` ${PGM} v${VER} started."|tee -a ${LOG}
echo "  CLUSTER=${CLUSTER}"
echo "  SFILTER=${SFILTER}"
echo "  NFILTER=${NFILTER}"
echo "  NEW_NODE=${NEW_NODE}"
sleep 1

if [ !-f ${INTPUTFILE} ]; then
  echo "  NO INTPUTFILE ${INPUTFILE} found. Exiting ..."|tee -a ${LOG}
  exit 4
fi
if [ !-f ${PINGFILE} ]; then
  echo "  NO PINGFILE ${PINGFILE} found. Exiting ..."|tee -a ${LOG}
  exit 5
fi

cat ${INTPUTFILE}|grep -v ^#|grep "${SFILTER}"|grep "${NFILTER}"|while read LINE
do
#vserver;server;lif(3);vif;curr-node(5);curr-port(6);
  LIF=`echo ${LINE}|awk -F\; '{print $3}'|sed 's/ //g'`
  CURR_NODE=`echo ${LINE}|awk -F\; '{print $5}'|sed 's/ //g'`
  CURR_PORT=`echo ${LINE}|awk -F\; '{print $6}'`

  VSERVER="nlnafs${LIF}"
  VLAN=`echo ${LINE}|awk -F\; '{print $5}'|cut -d\- -f2`
  NETWORK=`echo ${LINE}|awk -F\; '{print $3}'|cut -d\/ -f1|awk -F\. '{print $1"."$2"."$3}'`

  ${SSH} ${CLUSTER} "vserver show -vserver ${VSERVER} -operational-state running" 1> /dev/null
  EC=${?}
  if [ ${EC} -eq 0 ]; then
    echo "    VSERVER=${VSERVER}"
    VSERVER_ADDR=`${SSH} ${CLUSTER} "network interface show -vserver ${VSERVER} -lif ${LIF} -field address"|grep ${VSERVER}|awk '{print $3}'`
#    echo "    VSERVER=${VSERVER} VLAN=${VLAN} NETWORK=${NETWORK}"

# Get Ping-IP-address (not its own)
#    PING_IP_ADDR=`grep ${VLAN} ${PINGFILE}|grep "${NETWORK}"|grep -v ${VSERVER_ADDR}|awk -F\; '{print $3}'|head -1`
    PING_IP_ADDR=`grep "\-${VLAN}" ${PINGFILE}|grep -v ${VSERVER_ADDR}|awk -F\; '{print $3}'|head -1`
    if [ "${PING_IP_ADDR}" = "" ]; then
      echo "      PING_IP_ADDR=${PING_IP_ADDR} NETWORK=${NETWORK} VSERVER_ADDR=${VSERVER_ADDR}"
    fi

# Get Curr node (maybe already moves)
    CURR_NODE=`${SSH} ${CLUSTER} "network inter show -vserver ${VSERVER} -field curr-node"|grep ${VSERVER}|awk '{print $3}'`
    
    if [ "${CURR_NODE}" != "${NEW_NODE}" ] && [ "${PING_IP_ADDR}" != "" ]; then
      echo "      CURR_NODE=${CURR_NODE} NEW_NODE=${NEW_NODE} PING_IP_ADDR=${PING_IP_ADDR}"

      ${SSH} ${CLUSTER} "ping -vserver ${VSERVER} -lif ${LIF} -dest ${PING_IP_ADDR}" 1> /dev/null 2>&1
      EC=${?}
      if [ ${EC} -eq 0 ]; then
        ANSW=""
        echo " Moving LIF ${LIF} at port ${CURR_PORT} from ${CURR_NODE} to ${NEW_NODE}"|tee -a ${LOG}
# REAL MOVE / migrate
#        ${SSH} ${CLUSTER} "network interface migrate -vserver ${VSERVER} -lif ${LIF} -destination-node ${NEW_NODE}"
        echo "=== 2nd ping test"
        ${SSH} ${CLUSTER} "ping -vserver ${VSERVER} -lif ${LIF} -dest ${PING_IP_ADDR}" 
        EC=${?}
        if [ ${EC} -eq 0 ]; then
          echo "  Move ${VSERVER}:${LIF} to ${NEW_NODE} = ok"|tee -a ${LOG}
        else
          echo "! Move ${VSERVER}:${LIF} to ${NEW_NODE} NOT ok (EC=${EC})"|tee -a ${LOG}
          echo "! Revering back to ${CURR_NODE}"
#          ${SSH} ${CLUSTER} "network interface migrate -vserver ${VSERVER} -lif ${LIF} -destination-node ${CURR_NODE}"
          
        fi  # EC} -eq 0
      fi  # EC} -eq 0
    else
      echo "      CURR_NODE=${CURR_NODE} NEW_NODE=${NEW_NODE} PING_IP_ADDR=${PING_IP_ADDR}"
    fi  # PING_IP_ADDR}" != ""
  fi  # VSERVER running
done  # NODE

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

