#!/bin/ksh 
#--------------------------------------------------------------------------
# (C) Copyright 2006 InterSystems
# Project name
# Module name
# $Workfile:   
# $Archive:   
# $Revision: 
#
# Description
#  Wrapper script to the HA software.  This script places a node
#  resources into managed mode.
#
#  The resources ...
#    resources...._drbd
#    resources...._fs  
#  are not included in this.
#
#  To perform maintenance on these please stop heartbeat.
#
# Parameters
#           -f:  Forces unmanaged status when quorum is not achieved
#         None:  Places all resource (with the above exceptions) into
#                managed mode
#  resource[s]:  specified resources only
#
# $Log:
#
#--------------------------------------------------------------------------

PATH=/bin:/usr/bin:/usr/sbin:/root/bin
HOST_NAME=$(uname -n)
EXCLUDE_RESOURCE_LIST="\bresource_.*_drbd\b|\bresource_.*_fs\b"
CURRENT_RESOURCES=""
FORCE=""      #required when quorum is not achieved, toggled by -f parameter


usage() {
  cat <<EOF_usage
  ha_thaw.sh [-f] [resource]...
    -f             force
    [resource]...  if omitted then it defaults to all resource[s] being
                   put into managed mode

    Runs the following command to place resources into managed mode
      crm_resource --meta -p is-managed -r resource_rokfids_dhcpd -t primitive -v true

    Note: resource....drbd or resource...fs are excluded always

EOF_usage
}

managed_resource() {
  #Assumes $1 is a valid resource
  _RESOURCE_NAME=$1
  crm_resource ${FORCE} --meta -p is-managed -r $_RESOURCE_NAME -t primitive -v true
  RETURN_VALUE=$?
  if [ ${RETURN_VALUE} -eq 0 ]; then
    echo "Success:  Resource ${_RESOURCE_NAME} has been placed into managed mode"
  else
    echo "  Error:  Resource ${_RESOURCE_NAME} FAILED going to managed mode"
    return $RETURN_VALUE
  fi
  return 0
}

#Check for options
OPT=
while getopts fh OPT
do
  case $OPT in
    h)  usage
        exit 0
        ;;
    f)  FORCE="-f"
        ;;
  esac
done
shift `expr $OPTIND - 1`

#Obtain list of current resources using command
#crm_resource -L
CURRENT_RESOURCES="$(crm_resource -L | egrep 'resource_' | awk '{print $1}')"
#Always exlude drbd, fs
CURRENT_RESOURCES="$(echo "${CURRENT_RESOURCES}" | egrep -v "${EXCLUDE_RESOURCE_LIST}")"

#Check for parameters
if [ $# -eq 0 ]; then
  #Use the currently defined CURRENT_RESOURCES
  :
else
  #Check parameters supplied against CURRENT_RESOURCES
  #and rebuild CURRENT_RESOURCES
  NEW_CURRENT_RESOURCES=""   #Temp holding for valid resources
                             #this will become the CURRENT_RESOURCES
  myRESOURCE_LIST="$@"
  for myRESOURCE in ${myRESOURCE_LIST}
  do  
    echo "${CURRENT_RESOURCES}" | grep -q "\b${myRESOURCE}\b" 
    RETURN_VALUE=$?
    if [ $RETURN_VALUE -eq 0 ]; then  #Found it !
      :
    else
      echo "Error: Resource ${myRESOURCE} is not valid"
      exit 1
    fi
    NEW_CURRENT_RESOURCES="${NEW_CURRENT_RESOURCES} ${myRESOURCE}"
  done
  CURRENT_RESOURCES="${NEW_CURRENT_RESOURCES}"
fi


OVERALL_RETURN_VALUE=0
for myRESOURCE in ${CURRENT_RESOURCES}
do
  managed_resource $myRESOURCE
  RETURN_VALUE=$?
  if [ $RETURN_VALUE -ne 0 ]; then
    OVERALL_RETURN_VALUE=$RETURN_VALUE     #At least record an error
  fi
  sleep 2
done

exit $OVERALL_RETURN_VALUE

