
#!/bin/sh
# File	: proc_snapvault_config-create-make.sh
# By	: Maarten.deBoer@Atos.net, 230908
# Subject	: Script to process (convert) (PRIM) storage config to SNapVault config fo Ansible
#(0.2),230911	: Mod. OUT_FNAME
#(0.3),230911	: Added -d's
#(0.4),230912	: Rename from proc_snapvault_config.sh. Add USAGE
#(0.5),231102	: Add --peer
PGM=`basename $0|cut -d\. -f1`
VER="0.5"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
SSH="/usr/bin/ssh -n"

CONFIG_SV_VOL=""
CREATE_SV_DEST_VOL="" 
MAKE_SV_REL=""
MAKE_SVM_PEER=""


# VolumeFILTER
#VFILTER="[?]*"
VFILTER="_vol01"
# FilenameFILTER
FFILTER="[?]*"
#FFILTER="ajp"

BASEDIR="${HOME}/automation"
INDIR="${BASEDIR}/data/done"
#INDIR="${BASEDIR}/data/in"
#SVDIR="${BASEDIR}/data/out"
SVDIR="${BASEDIR}/data/snapvault"

# SnapMirror (xDP) DEST ... SOURC
# 1st part also for 'volume create'
# (1)NAO_CLUSTERNAME;(2)NAO_SVM_NAME;(3)NAO_VOL_NAME;(4)NAO_VOL_AGGR_NAME;(5)NAO _VOL_STOR_CLASS;(6)NAO_VOL_SIZE;(7)NAO_VOL_SIZE_UNIT;(8)NAO_VOL_TYPE("[X]DP");(9)ATOS_CHANGE_NR;(10)NAO_QTREE_NAME;
# 2nd part for SnapMirror config
# (11)SOURE:CLUSTER;(12)SOURCE:SVM;SOURCE:VOLUME;[SOURCE:QTREE];
#
#(1)NAO_CLUSTERNAME;(2)NAO_SVM_NAME;(3)NAO_VOL_NAME;(4)NAO_VOL_AGGR_NAME;(5)NAO_ VOL_STOR_CLASS;(6)NAO_VOL_SIZE;(7)NAO_VOL_SIZE_UNIT;(8)NAO_VOL_TYPE("[X]DP");(9) ATOS_CHANGE_NR;(10)NAO_QTREE_NAME;(11)SOURE:CLUSTER;(12)SOURCE:SVM;SOURCE:(13)VOLUME ;[SOURCE:QTREE];
#


USAGE()
{
  echo "Usage: ${PGM} <options> "
  echo "  Version: ${VER}"
  echo "  options       :"
  echo "    -f          : Filefilter (${FFILTER})"
  echo "    --config    : CONFIGure snapvault from (done)volume-csv-file"
  echo "    --create    : CREATE snapvault (destination) volume"
  echo "    --make      : MAKE snapvault relation"
  echo "    --peer      : make (vserver/svm) PEER connection"
  echo "    -x          : set -x"
  echo "    -V          : Version"
  echo "    --help      : this help"
}
# Check options
while [ $# -gt 0 ]
  do
  case $1 in
    -f) FFILTER="${2}"; shift ;;
    --config) CONFIG_SV_VOL=1  ;;
    --create) CREATE_SV_DEST_VOL=1  ;;
    --make) MAKE_SV_REL=1 ;;
    --peer) MAKE_SVM_PEER=1 ;;
    -h | --help) USAGE; exit 1 ;;
    -V) echo "${PGM}: v${VER}"; exit 3 ;;
    -x)  set -x ;;
    *)  echo "Option ${1} not known."; USAGE; exit 1 ;;
  esac
    shift
done



echo "`date` ${PGM} v${VER} started."|tee -a ${LOG}
echo "  INDIR=${INDIR}"
echo "  SVDIR=${SVDIR}"
echo "  FFILTER=${FFILTER}"
echo "  VFILTER=${VFILTER}"
echo "  CONFIG_SV_VOL=${CONFIG_SV_VOL}"
echo "  CREATE_SV_DEST_VOL=${CREATE_SV_DEST_VOL}" 
echo "  MAKE_SV_REL=${MAKE_SV_REL}"
echo "  MAKE_SVM_PEER=${MAKE_SVM_PEER}"

sleep 1

if [ ! -d ${INDIR} ]; then
  echo "  NO INDIR (${INDIR}) found. Exiting ..."|tee -a ${LOG}
  exit 3
fi  # INDIR
if [ ! -d ${SVDIR} ]; then
  echo "  NO SVDIR (${SVDIR}) found. Exiting ..."|tee -a ${LOG}
  exit 4
fi  # INDIR



if [ ${CONFIG_SV_VOL} ]; then
  echo "  CONFIG_SV_VOL:"|tee -a ${LOG}

  cd ${INDIR}
  ls -1 *nl-fsod*.csv|grep "${FFILTER}"|while read IN_FNAME
  do
#  OUT_FNAME=`echo ${IN_FNAME}|cut -d\_ -f2-`
#  OUT_FNAME=`echo ${IN_FNAME}|cut -d\_ -f2`
    DATE_FNAME=`echo ${IN_FNAME}|cut -d\_ -f1`
    CHNR_FNAME=`echo ${IN_FNAME}|cut -d\_ -f2`
    REST_FNAME=`echo ${IN_FNAME}|cut -d\_ -f4`
    OUT_FNAME="${CHNR_FNAME}_nl-fsod-volume-snapvault_${REST_FNAME}"
#  echo "  ${IN_FNAME}"
    echo "  ${IN_FNAME} => ${OUT_FNAME}"|tee -a ${LOG}
sleep 1
    echo "# ${IN_FNAME} => ${OUT_FNAME} by ${PGM} v${VER} `date`" > ${SVDIR}/${OUT_FNAME}
    echo "#(1)NAO_CLUSTERNAME;(2)NAO_SVM_NAME;(3)NAO_VOL_NAME;(4)NAO_VOL_AGGR_NAME;(5)NAO_ VOL_STOR_CLASS;(6)NAO_VOL_SIZE;(7)NAO_VOL_SIZE_UNIT;(8)NAO_VOL_TYPE("[X]DP");(9) ATOS_CHANGE_NR;(10)NAO_QTREE_NAME;(11)SOURE:CLUSTER;(12)SOURCE:SVM;SOURCE:(13)VOLUME ;[SOURCE:QTREE];" >> ${SVDIR}/${OUT_FNAME}

# Sort on Volume
    cat ${IN_FNAME}|grep -v ^#|awk -F\; '{print $3}'|grep "${VFILTER}"|sort -u|while read IN_VOLUME
    do
      echo "    ${IN_VOLUME}"
# nlnaf100;nlnafsavi02;avi02_vol01344;n07a3801;gold;90;gb;RW;CHG002197966;db2archlog_ajp;20;unix;ajp;
      LINE=`grep "${IN_VOLUME}" ${IN_FNAME}|grep -v ^#`

#    echo ${LINE}
      CLUSTER=`echo ${LINE}|awk -F\; '{print $1}'`
      VSERVER=`echo ${LINE}|awk -F\; '{print $2}'`
      VOLUME=`echo ${LINE}|awk -F\; '{print $3}'`
      AGGR=`echo ${LINE}|awk -F\; '{print $4}'`
      STOR_CLASS=`echo ${LINE}|awk -F\; '{print $5}'`
      VOL_SIZE=`echo ${LINE}|awk -F\; '{print $6}'`
      VOL_SIZE_UNIT=`echo ${LINE}|awk -F\; '{print $7}'`
      VOL_TYPE=`echo ${LINE}|awk -F\; '{print $8}'`
      ATOS_CHNR=`echo ${LINE}|awk -F\; '{print $9}'`
      if [ "${ATOS_CHNR}" != "${CHNR_FNAME}" ]; then
        ATOS_CHNR="${CHNR_FNAME}"
      fi  # CHNR_FNAME
      QTREENAME=`echo ${LINE}|awk -F\; '{print $10}'`

      if [ "${CLUSTER}" != "" ] && [ "${VSERVER}" != "" ] && [ "${VOLUME}" != "" ] && [ "${AGGR}" != "" ] && [ "${STOR_CLASS}" != "" ] && [ "${VOL_SIZE}" != "" ] && [ "${VOL_SIZE_UNIT}" != "" ] && [ "${VOL_TYPE}" != "" ] && [ "${ATOS_CHNR}" != "" ] && [ "${QTREENAME}" != "" ]; then
        echo "      ${CLUSTER}:${VSERVER}:/${VOLUME} ${VOL_SIZE} ${VOL_SIZE_UNIT} "
# "Translate" source to Dest_
        case ${CLUSTER} in
          nlnaf100) D_CLUSTER="nlnaf101" ;;
          nlnaf101) D_CLUSTER="nlnaf100" ;;
          *) D_CLUSTER="${CLUSTER}"
        esac
        case ${VSERVER} in
          nlnafsavi01) 
            D_VSERVER="nlnafsavi04"
            D_VOLUME=`echo ${VOLUME}|sed 's/avi01_/avi04_/g'|sed 's/_vol0/_vol1/g'`
          ;;
          nlnafsavi02) 
            D_VSERVER="nlnafsavi03" 
            D_VOLUME=`echo ${VOLUME}|sed 's/avi02_/avi03_/g'|sed 's/_vol0/_vol2/g'`
          ;;
          *) 
            D_VSERVER="${VSERVER}" ;;
        esac

        case ${AGGR} in
         n07a3801)
           D_AGGR="n14a9001"
           D_STOR_CLASS="bronze"
         ;; 
         *) 
           D_AGGR="${AGGR}" 
           D_STOR_CLASS="${STOR_CLASS}"
         ;;
        esac
        D_VOL_TYPE="XDP"


        echo "${D_CLUSTER};${D_VSERVER};${D_VOLUME};${D_AGGR};${D_STOR_CLASS};${VOL_SIZE};${VOL_SIZE_UNIT};${D_VOL_TYPE};${ATOS_CHNR};#QTREE;${CLUSTER};${VSERVER};${VOLUME};#QTREE;" | tee -a ${SVDIR}/${OUT_FNAME}

#(1)NAO_CLUSTERNAME;(2)NAO_SVM_NAME;(3)NAO_VOL_NAME;(4)NAO_VOL_AGGR_NAME;(5)NAO_ VOL_STOR_CLASS;(6)NAO_VOL_SIZE;(7)NAO_VOL_SIZE_UNIT;(8)NAO_VOL_TYPE("[X]DP");(9) ATOS_CHANGE_NR;(10)NAO_QTREE_NAME;(11)SOURE:CLUSTER;(12)SOURCE:SVM;(13)SOURCE:VOLUME ;[SOURCE:QTREE];

      fi  # != "" ...
    done  # LINE
    echo "  SV-OUTput in ${SVDIR}/${OUT_FNAME}"
  done  # ls -1
fi  # CONFIG_SV_VOL


if [ ${CREATE_SV_DEST_VOL} ]; then
  echo "  CREATE_SV_DEST_VOL:"|tee -a ${LOG}
  ls -1 ${SVDIR}/*nl-fsod-volume-snapvault*.csv|grep "${FFILTER}"|while read FNAME
  do
    echo "    FNAME=${FNAME}"
    if [ -f ${FNAME} ]; then
      echo "    Processing ${FNAME}"|tee -a ${LOG}
      sh /home/ansible/automation/scripts/netapp-automation-menu.sh a2 ${FNAME}
    fi  # if FNAME
  done # FNAME
fi  # CREATE_SV_DEST_VOL


if [ ${MAKE_SV_REL} ]; then
  echo "  MAKE_SV_REL:"|tee -a ${LOG}
  ls -1 ${SVDIR}/*nl-fsod-volume-snapvault*.csv|grep "${FFILTER}"|while read FNAME
  do
    echo "    FNAME=${FNAME}"
    if [ -f ${FNAME} ]; then
      echo "    Processing ${FNAME}"|tee -a ${LOG}
      sh /home/ansible/scripts/cdot_cre_snap-mirror-vault.sh ${FNAME}
    fi  # if FNAME
  done # FNAME
fi  # MAKE_SV_REL

if [ ${MAKE_SVM_PEER} ]; then
  echo "  MAKE_SVM_PEER:"|tee -a ${LOG}
  ls -1 ${SVDIR}/*nl-fsod-volume-snapvault*.csv|grep "${FFILTER}"|while read FNAME
  do
    echo "    FNAME=${FNAME}"
    if [ -f ${FNAME} ]; then
      echo "    Peering ${FNAME}"|tee -a ${LOG}
      cat ${FNAME}|grep -v ^#|while read LINE
      do
#<source_cluster>;<d_svm>;<d_volume>;<d_aggr>;<d_vol-class>;<d_vol-size>;<SnapMirror-type>;<CH-nr>;<Qtree>;<source_cluster>;<s_svm>;<s_volume>;<d_vol-lang>;
#
        S_CLUSTER=`echo ${LINE}|awk -F\; '{print $1}'`
        S_VSERVER=`echo ${LINE}|awk -F\; '{print $2}'`
        D_CLUSTER=`echo ${LINE}|awk -F\; '{print $11}'`
        D_VSERVER=`echo ${LINE}|awk -F\; '{print $12}'`
        echo "    S_CLUSTER=${S_CLUSTER} S_VSERVER=${S_VSERVER} D_CLUSTER=${D_CLUSTER} D_VSERVER=${D_VSERVER}"
        ${SSH} ${S_CLUSTER} "vserver peer create -vserver ${S_VSERVER} -application snapmirror -peer-vserver ${D_VSERVER} -peer-cluster ${D_CLUSTER}"
        ${SSH} ${D_CLUSTER} "vserver peer accept -vserver ${D_VSERVER} -peer-vserver ${S_VSERVER}"

        ${SSH} ${S_CLUSTER} "vserver peer show -vserver ${S_VSERVER}"
        ${SSH} ${D_CLUSTER} "vserver peer show -vserver ${D_VSERVER}"

      done  # FNAME

    fi  # if FNAME
  done # FNAME

fi  # MAKE_SVM_PEER




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

