#!/bin/sh

# -------------------------------------------------------
# file   : lock8k.sh
# purpose: Installation script to lock system for images.
# author : Vittal.S
#
# usage  : lock8k
#
# modifications:
# 09-05-08  Initial Creation .
# -------------------------------------------------------

### Constants
_SELF_="$(basename "$(readlink -e "${BASH_SOURCE[0]}")" && echo X)" && \
readonly _SELF_="${_SELF_%$'\nX'}"
_SELFDIR_="$(dirname "$(readlink -e "${BASH_SOURCE[0]}")" && echo X)" && \
readonly _SELFDIR_="${_SELFDIR_%$'\nX'}"
readonly COMMONINC="${_SELFDIR_}/common8k"

### Include files
source ${COMMONINC} || exit 1
#Check if osv_version is available
OSV_VERSION=$(whereis -b osv_version.sh | awk '{ print $2 }')
if [ ! -f "$OSV_VERSION" ]; then
   logger --id $$ --priority user.warning "$0: osv_version.sh not found in \$PATH ($PATH), exiting!" >/dev/null 2>&1
   exit 1
fi

# ----------------------------------------------------------
# function: textncolor
# description:
#   sets up text in color.
# ----------------------------------------------------------

textncolor( )
{
   echo -e "[*] ${1}$2${Norm}"
}

setmode( )
{
   echo -e $1
}

# ---------------------------------------------------------------
# function: initvars
# args    : None
# description:
#   just initialize one variables.
# ---------------------------------------------------------------

initvars( )
{
   SUCCESS=0
   FAIL=2
   UidMisMatch=7
   MISSINGCFGDIR=8
   IMGDISKNOTSUPPORTED=9

   BoldGreen="\033[1;32m"
   BoldBlue="\033[1;34m"
   BoldCyan="\033[1;36m"
   BoldWhite="\033[1;37m"
   UnderLine="\033[4m"
   Yellow="\033[1;33m"
   Norm="\033[0m"

   CFG8k=/etc/hiq8000/node.cfg
   mynode="`uname -n`"
   USER=`id -u`
   if [ $USER -ne 0 ];
   then
       echo "You  must be root to run this script."
       exit $UidMisMatch
   fi
   grep -q primary /etc/mtab
   primstatus=$?
   grep -q  secondary /etc/mtab
   secstatus=$?
   if [ $primstatus -ne 0 -a $secstatus -ne 0 ];
   then
      echo "Looks like you are on non imaged disk."
      echo "This is not supported. Good luck."
      exit $IMGDISKNOTSUPPORTED
   fi
   
   getcfgvar $CFG8k test_bed testbed
   getcfgvar $CFG8k node_1_name primhost
   getcfgvar $CFG8k node_2_name sechost
   nafoxch="`cfgread nafo3`"
   if "$OSV_VERSION" --major compare sys lt V5;
   then
      getcfgvar $CFG8k node_1_cip_logical primcip
      getcfgvar $CFG8k node_2_cip_logical seccip
   else
      primcip="`echo $nafoxch   | awk '{ print $4 }'`"
      seccip="`echo $nafoxch    | awk '{ print $5 }'`"
   fi

}

checklocks( )
{
   activestat=`sync8k -q | awk -F',' '{ print $1 }' | sed -e s/'[ ]*'//g 2>/dev/null`
   fallbackstat=`sync8k -q | awk -F',' '{ print $2 }' | sed -e s/'[ ]*'//g 2>/dev/null`
   activepart=`echo $activestat | awk -F':' '{ print $2 }' 2>/dev/null`
   fallbackpart=`echo $fallbackstat | awk -F':' '{ print $2 }' 2>/dev/null`
   if [ "$activepart" != "" -a "$fallbackpart" != "" ];
   then
       ls /img/logimg/$activepart/upgrade.lock 1>/dev/null 2>&1  
       if [ $? -eq 0 ];
       then
          activelockedstat="(locked)"
       else
          activelockedstat="(unlocked)"
       fi
       ls /img/logimg/$fallbackpart/upgrade.lock 1>/dev/null 2>&1  
       if [ $? -eq 0 ];
       then
          fallbacklockedstat="(locked)"
       else
          fallbacklockedstat="(unlocked)"
       fi
   fi
   echo "${activestat}${activelockedstat}"
   echo "${fallbackstat}${fallbacklockedstat}"
}

usage( )
{
   textncolor $BoldCyan "Usage: lock8k : [-h] [-q] [-i]"
   echo " --------------------------------------------------------------------"
   echo "|  lock8k -h : display's this help.                                  |"
   echo "|  lock8k -q : display's lock status of images on your disk.         |"
   echo "|  lock8k -i : interactively allows you to lock images on your disk. |"
   echo " --------------------------------------------------------------------"
}

ARGLIST="$*"
initvars
while [ "$#" -gt "0" ];
do
   case $1 in
        -q)
            checklocks
            exit $SUCCESS
            ;;
        -h)
            usage
            exit $SUCCESS
            ;;
        -i)
            textncolor $BoldCyan "Interactive lock option selected."
            sync8k -v
            checklocks           
            echo -n "Which side would you like to lock (0=quit,1=active,2=fallback)?"
            read answer
            case $answer in 
               '0')
                  echo "No action.Exiting."
                  exit $SUCCESS
                  ;;
               '1')
                  lockside=$activepart
                  ;;
               '2')
                  lockside=$fallbackpart
                  ;;
                 *)
                  echo "Invalid option. Exiting."
                  exit $FAIL
                  ;;
             esac
             ARGLIST="`echo $ARGLIST | sed -e 's/-i//g'` -i $lockside"
             ;;
         *)
           textncolor $BoldCyan "Sorry, Unknown option."
           usage
           exit $FAIL
           ;;
   esac
   shift
done

if [ "$testbed" = "cluster" -a "$mynode" != "$primhost" ];
then
   textncolor $BoldCyan "O.k you are on secondary node of cluster. Will still proceed."
   ssh $primcip "prepare8k $ARGLIST -lock"
else
   prepare8k $ARGLIST -lock
fi
status=$?
if [ "$status" -eq 0 ];
then
   textncolor $BoldCyan "lock8k:<$mynode>:Success."
else
   textncolor $BoldRed  "lock8k:<$mynode>:Failed."
fi
exit $status
