[Cluster-devel] cluster/rgmanager/src/resources SAPDatabase SA ...

rmccabe at sourceware.org rmccabe at sourceware.org
Fri May 11 02:30:28 UTC 2007


CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL5
Changes by:	rmccabe at sourceware.org	2007-05-11 02:30:27

Modified files:
	rgmanager/src/resources: SAPDatabase SAPInstance 

Log message:
	Convert \r\n line breaks to \n

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/SAPDatabase.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=1.1.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/SAPInstance.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=1.1.2.2

--- cluster/rgmanager/src/resources/SAPDatabase	2007/05/09 19:07:02	1.1.2.1
+++ cluster/rgmanager/src/resources/SAPDatabase	2007/05/11 02:30:27	1.1.2.2
@@ -1,698 +0,0 @@
-#!/bin/sh
-#
-# SAPDatabase
-#
-# Description:	Manages any type of SAP supported database instance
-#               as a High-Availability OCF compliant resource.
-#
-# Author:       Alexander Krauth, October 2006
-# Support:      liunx at sap.com
-# License:      GNU General Public License (GPL)
-# Copyright:    (c) 2006 Alexander Krauth
-#
-# An example usage: 
-#      See usage() function below for more details...
-#
-# OCF instance parameters:
-#	OCF_RESKEY_SID
-#       OCF_RESKEY_DIR_EXECUTABLE   (optional, well known directories will be searched by default)
-#       OCF_RESKEY_DBTYPE
-#       OCF_RESKEY_NETSERVICENAME   (optional, non standard name of Oracle Listener)
-#       OCF_RESKEY_DBJ2EE_ONLY      (optional, default is false)
-#       OCF_RESKEY_DIR_BOOTSTRAP    (optional, if non standard J2EE server directory)
-#       OCF_RESKEY_DIR_SECSTORE     (optional, if non standard J2EE secure store directory)
-#
-# ToDo:
-# Remove all the database dependend stuff from the agent and use
-# saphostcontrol daemon as soon as SAP will release it.
-#
-#######################################################################
-# Initialization:
-
-if [ -f /usr/lib/heartbeat/ocf-shellfuncs ]; then
-	. /usr/lib/heartbeat/ocf-shellfuncs
-elif [ -f /usr/share/cluster/ocf-shellfuncs ]; then
-	. /usr/share/cluster/ocf-shellfuncs
-else
-	echo Could not find ocf-shellfuncs!
-	exit 1
-fi
-
-#######################################################################
-
-SH=/bin/sh
-
-usage() {
-  methods=`sapdatabase_methods`
-  methods=`echo $methods | tr ' ' '|'`
-  cat <<-!
-	usage: $0 ($methods)
-
-	$0 manages a SAP database of any type as an HA resource.
-        Currently Oracle, MaxDB and DB/2 UDB are supported.
-        ABAP databases as well as JAVA only databases are supported.
-
-	The 'start' operation starts the instance.
-	The 'stop' operation stops the instance.
-	The 'status' operation reports whether the instance is running
-	The 'monitor' operation reports whether the instance seems to be working
-	The 'validate-all' operation reports whether the parameters are valid
-	The 'methods' operation reports on the methods $0 supports
-
-	!
-}
-
-meta_data() {
-	cat <<END
-<?xml version="1.0"?>
-<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
-<resource-agent name="SAPDatabase">
-<version>1.2</version>
-
-<longdesc lang="en">
-Resource script for SAP databases. It manages a SAP database of any type as an HA resource.
-</longdesc>
-<shortdesc lang="en">SAP database resource agent</shortdesc>
-
-<parameters>
- <parameter name="SID" unique="1" required="1">
-  <longdesc lang="en">The unique SAP system identifier. e.g. P01</longdesc>
-  <shortdesc lang="en">SAP system ID</shortdesc>
-  <content type="string" default="" />
- </parameter>
- <parameter name="DIR_EXECUTABLE" unique="1" required="0">
-  <longdesc lang="en">The full qualified path where to find sapstartsrv and sapcontrol.</longdesc>
-  <shortdesc lang="en">path of sapstartsrv and sapcontrol</shortdesc>
-  <content type="string" default="" />
- </parameter>
- <parameter name="DBTYPE" unique="1" required="1">
-  <longdesc lang="en">The name of the database vendor you use. Set either: ORA,DB6,ADA</longdesc>
-  <shortdesc lang="en">database vendor</shortdesc>
-  <content type="string" default="" />
- </parameter>
- <parameter name="NETSERVICENAME" unique="1" required="0">
-  <longdesc lang="en">The Oracle TNS listener name.</longdesc>
-  <shortdesc lang="en">listener name</shortdesc>
-  <content type="string" default="" />
- </parameter>
- <parameter name="DBJ2EE_ONLY" unique="1" required="0">
-  <longdesc lang="en">If you do not have a ABAP stack installed in the SAP database, set this to TRUE</longdesc>
-  <shortdesc lang="en">only JAVA stack installed</shortdesc>
-  <content type="boolean" default="false"/>
- </parameter>
- <parameter name="DIR_BOOTSTRAP" unique="1" required="0">
-  <longdesc lang="en">The full qualified path where to find the J2EE instance bootstrap directory. e.g. /usr/sap/P01/J00/j2ee/cluster/bootstrap</longdesc>
-  <shortdesc lang="en">path to j2ee bootstrap directory</shortdesc>
-  <content type="string" default="" />
- </parameter>
- <parameter name="DIR_SECSTORE" unique="1" required="0">
-  <longdesc lang="en">The full qualified path where to find the J2EE security store directory. e.g. /usr/sap/P01/SYS/global/security/lib/tools</longdesc>
-  <shortdesc lang="en">path to j2ee secure store directory</shortdesc>
-  <content type="string" default="" />
- </parameter>
-</parameters>
-
-<actions>
-<action name="start" timeout="1800" />
-<action name="stop" timeout="1800" />
-<action name="status" timeout="60" />
-<action name="monitor" depth="0" timeout="60" interval="120" start-delay="180" />
-<action name="validate-all" timeout="5" />
-<action name="meta-data" timeout="5" />
-<action name="methods" timeout="5" />
-</actions>
-</resource-agent>
-END
-}
-
-trap_handler() {
-  rm -f $TEMPFILE
-  exit $OCF_ERR_GENERIC
-}
-
-
-#
-# listener_start: Start the given listener
-#
-listener_start() {
-  orasid="ora`echo $SID | tr [:upper:] [:lower:]`"
-  rc=$OCF_SUCCESS
-  output=`echo "lsnrctl start $NETSERVICENAME" | su - $orasid 2>&1`
-  if [ $? -eq 0 ]
-  then
-    ocf_log info "Oracle Listener $NETSERVICENAME started: $output"
-    rc=$OCF_SUCCESS
-  else
-    ocf_log err "Oracle Listener $NETSERVICENAME start failed: $output"
-    rc=$OCF_ERR_GENERIC
-  fi
-  return $rc
-}
-
-#
-# listener_stop: Stop the given listener
-#
-listener_stop() {
-  orasid="ora`echo $SID | tr [:upper:] [:lower:]`"
-  rc=$OCF_SUCCESS
-  if
-      listener_status
-  then
-      : listener is running, trying to stop it later...
-  else
-      return $OCF_SUCCESS
-  fi
-  output=`echo "lsnrctl stop $NETSERVICENAME" | su - $orasid 2>&1`
-  if [ $? -eq 0 ]
-  then
-    ocf_log info "Oracle Listener $NETSERVICENAME stopped: $output"
-  else
-    ocf_log err "Oracle Listener $NETSERVICENAME stop failed: $output"
-    rc=$OCF_ERR_GENERIC
-  fi
-  return $rc
-}
-
-#
-# listener_status: is the given listener running?
-#
-listener_status() {
-  orasid="ora`echo $SID | tr [:upper:] [:lower:]`"
-  # Note: ps cuts off it's output at column $COLUMNS, so "ps -ef" can not be used here
-  # as the output might be to long.
-  cnt=`ps efo args --user $orasid | grep $NETSERVICENAME | grep -c tnslsnr`
-  if [ $cnt -eq 1 ]
-  then
-    rc=$OCF_SUCCESS
-  else
-    ocf_log info "listener process not running for $NETSERVICENAME for $SID"
-    rc=$OCF_ERR_GENERIC
-  fi
-  return $rc
-}
-
-#
-# x_server_start: Start the given x_server
-#
-x_server_start() {
-  rc=$OCF_SUCCESS
-  output=`echo "x_server start" | su - $sidadm 2>&1`
-  if [ $? -eq 0 ]
-  then
-    ocf_log info "MaxDB x_server start: $output"
-    rc=$OCF_SUCCESS
-  else
-    ocf_log err "MaxDB x_server start failed: $output"
-    rc=$OCF_ERR_GENERIC
-  fi
-  return $rc
-}
-
-#
-# x_server_stop: Stop the x_server
-#
-x_server_stop() {
-  rc=$OCF_SUCCESS
-  output=`echo "x_server stop" | su - $sidadm 2>&1`
-  if [ $? -eq 0 ]
-  then
-    ocf_log info "MaxDB x_server stop: $output"
-  else
-    ocf_log err "MaxDB x_server stop failed: $output"
-    rc=$OCF_ERR_GENERIC
-  fi
-  return $rc
-}
-
-#
-# x_server_status: is the x_server running?
-#
-x_server_status() {
-  sdbuser=`ls -ld /sapdb/$SID | awk '{print $3}'`
-  # Note: ps cuts off it's output at column $COLUMNS, so "ps -ef" can not be used here
-  # as the output might be to long.
-  cnt=`ps efo args --user $sdbuser | grep -c vserver`
-  if [ $cnt -eq 1 ]
-  then
-    rc=$OCF_SUCCESS
-  else
-    ocf_log info "x_server process not running"
-    rc=$OCF_ERR_GENERIC
-  fi
-  return $rc
-}
-
-#
-# oracle_stop: Stop the Oracle database without any condition
-#
-oracle_stop() {
-echo '#!/bin/sh
-LOG=$HOME/stopdb.log
-date > $LOG
-
-if [ -x "${ORACLE_HOME}/bin/sqlplus" ]
-then
-    SRVMGRDBA_EXE="${ORACLE_HOME}/bin/sqlplus"
-else
-   echo "Can not find executable sqlplus" >> $LOG
-   exit 1
-fi
-
-$SRVMGRDBA_EXE /NOLOG >> $LOG << !
-connect / as sysdba
-shutdown immediate
-exit
-!
-rc=$?
-cat $LOG
-exit $rc' > $TEMPFILE
-
-chmod 700 $TEMPFILE
-chown $sidadm $TEMPFILE
-
-su - $sidadm -c $TEMPFILE
-retcode=$?
-rm -f $TEMPFILE
-
-if [ $retcode -eq 0 ]; then
-  sapdatabase_status
-  if [ $? -ne $OCF_NOT_RUNNING ]; then
-    retcode=1
-  fi
-fi
-
-return $retcode
-}
-
-#
-# maxdb_stop: Stop the MaxDB database without any condition
-#
-maxdb_stop() {
-if [ $DBJ2EE_ONLY -eq 1 ]; then
-   userkey=c_J2EE
-else
-   userkey=c
-fi
-
-echo "#!/bin/sh
-LOG=\$HOME/stopdb.log
-date > \$LOG
-echo \"Stop database with xuserkey >$userkey<\" >> \$LOG
-dbmcli -U ${userkey} db_offline >> \$LOG 2>&1
-exit \$?" > $TEMPFILE
-
-chmod 700 $TEMPFILE
-chown $sidadm $TEMPFILE
-
-su - $sidadm -c $TEMPFILE
-retcode=$?
-rm -f $TEMPFILE
-
-if [ $retcode -eq 0 ]; then
-  sapdatabase_status
-  if [ $? -ne $OCF_NOT_RUNNING ]; then
-    retcode=1
-  fi
-fi
-
-return $retcode
-}
-
-#
-# db6udb_stop: Stop the DB2/UDB database without any condition
-#
-db6udb_stop() {
-echo '#!/bin/sh
-LOG=$HOME/stopdb.log
-date > $LOG
-echo "Shut down the database" >> $LOG
-$INSTHOME/sqllib/bin/db2 deactivate database $DB2DBDFT |tee -a $LOG  2>&1
-$INSTHOME/sqllib/adm/db2stop force |tee -a $LOG  2>&1
-exit $?' > $TEMPFILE
-
-chmod 700 $TEMPFILE
-chown $sidadm $TEMPFILE
-
-su - $sidadm -c $TEMPFILE
-retcode=$?
-rm -f $TEMPFILE
-
-if [ $retcode -eq 0 ]; then
-  sapdatabase_status
-  if [ $? -ne $OCF_NOT_RUNNING ]; then
-    retcode=1
-  fi
-fi
-
-return $retcode
-}
-
-#
-# methods: What methods/operations do we support?
-#
-sapdatabase_methods() {
-  cat <<-!
-	start
-	stop
-	status
-	monitor
-	validate-all
-	methods
-	meta-data
-	usage
-	!
-}
-
-
-#
-# sapdatabase_start : Start the SAP database
-#
-sapdatabase_start() {
-  case $DBTYPE in
-    ADA) x_server_start
-         ;;
-    ORA) listener_start
-         ;;
-  esac
-
-  output=`su - $sidadm -c $SAPSTARTDB`
-  if [ $? -eq 0 ]
-  then
-    ocf_log info "SAP database $SID started: $output"
-    rc=$OCF_SUCCESS
-  else
-    ocf_log err "SAP database $SID start failed: $output"
-    rc=$OCF_ERR_GENERIC
-  fi
-  return $rc
-}
-
-#
-# sapdatabase_stop: Stop the SAP database
-#
-sapdatabase_stop() {
-
-  # use of the stopdb kernel script is not possible, because there are to may checks in that
-  # script. We want to stop the database regardless of anything.
-  #output=`su - $sidadm -c $SAPSTOPDB`
-
-  case $DBTYPE in
-    ORA) output=`oracle_stop`
-         ;;
-    ADA) output=`maxdb_stop`
-         ;;
-    DB6) output=`db6udb_stop`
-         ;;
-  esac
-
-  if [ $? -eq 0 ]
-  then
-    ocf_log info "SAP database $SID stopped: $output"
-    rc=$OCF_SUCCESS
-  else
-    ocf_log err "SAP database $SID stop failed: $output"
-    rc=$OCF_ERR_GENERIC
-  fi
-
-  case $DBTYPE in
-    ORA) listener_stop
-         ;;
-    ADA) x_server_stop
-         ;;
-  esac
-  return $rc
-}
-
-
-#
-# sapdatabase_monitor: Can the given database instance do anything useful?
-#
-sapdatabase_monitor() {
-  rc=$OCF_SUCCESS
-
-  case $DBTYPE in
-    ADA) x_server_status 
-         if [ $? -ne $OCF_SUCCESS ]; then x_server_start; fi
-         ;;
-    ORA) listener_status
-         if [ $? -ne $OCF_SUCCESS ]; then listener_start; fi
-         ;;
-  esac
-
-  if [ $DBJ2EE_ONLY -eq 0 ]
-  then
-    output=`echo "$SAPDBCONNECT -d -w /dev/null" | su $sidadm 2>&1`
-    if [ $? -le 4 ]
-    then
-      rc=$OCF_SUCCESS
-    else
-      rc=$OCF_NOT_RUNNING
-    fi
-  else
-    DB_JARS=""
-    if [ -f "$BOOTSTRAP"/bootstrap.properties ]; then
-      DB_JARS=`cat $BOOTSTRAP/bootstrap.properties | grep -i rdbms.driverLocation | sed -e 's/\\\:/:/g' | awk -F= '{print $2}'`
-    fi
-    IAIK_JCE="$SECSTORE"/iaik_jce.jar
-    IAIK_JCE_EXPORT="$SECSTORE"/iaik_jce_export.jar
-    EXCEPTION="$BOOTSTRAP"/exception.jar
-    LOGGING="$BOOTSTRAP"/logging.jar
-    OPENSQLSTA="$BOOTSTRAP"/opensqlsta.jar
-    TC_SEC_SECSTOREFS="$BOOTSTRAP"/tc_sec_secstorefs.jar
-    JDDI="$BOOTSTRAP"/../server0/bin/ext/jdbdictionary/jddi.jar
-    ANTLR="$BOOTSTRAP"/../server0/bin/ext/antlr/antlr.jar
-    FRAME="$BOOTSTRAP"/../server0/bin/system/frame.jar
-
-    # only start jdbcconnect when all jars available
-    if [ -f "$EXCEPTION" -a -f "$LOGGING" -a -f "$OPENSQLSTA" -a -f "$TC_SEC_SECSTOREFS" -a -f "$JDDI" -a -f "$ANTLR" -a -f "$FRAME" -a -f "$SAPDBCONNECT" ]
-    then
-      output=`eval java -cp ".:$FRAME:$ANTLR:$JDDI:$IAIK_JCE_EXPORT:$IAIK_JCE:$EXCEPTION:$LOGGING:$OPENSQLSTA:$TC_SEC_SECSTOREFS:$DB_JARS:$SAPDBCONNECT" com.sap.inst.jdbc.connect.JdbcCon -sec $SID:$SID`
-      if [ $? -le 0 ]
-      then
-        rc=$OCF_SUCCESS
-      else
-        rc=$OCF_NOT_RUNNING
-      fi
-    else
-      output="Cannot find all jar files needed for database monitoring."
-      rc=$OCF_ERR_GENERIC
-    fi
-  fi
-
-  if [ $rc -ne $OCF_SUCCESS ]
-  then
-    ocf_log err "The SAP database $SID ist not running: $output"
-  fi
-  return $rc
-}
-
-
-#
-# sapdatabase_status: Are there any database processes on this host ?
-#
-sapdatabase_status() {
-  case $DBTYPE in
-    ADA) SEARCH="$SID/db/pgm/kernel"
-         SUSER=`ls -ld /sapdb/$SID | awk  '{print $3}'`
-         SNUM=2
-         ;;
-    ORA) SEARCH="ora_[a-z][a-z][a-z][a-z]_"
-         SUSER="ora`echo $SID | tr [:upper:] [:lower:]`"
-         SNUM=4
-         ;;
-    DB6) SEARCH="db2[a-z][a-z][a-z][a-z][a-z]"
-         SUSER="db2`echo $SID | tr [:upper:] [:lower:]`"
-         SNUM=5
-         ;;
-  esac
-
-  # Note: ps cuts off it's output at column $COLUMNS, so "ps -ef" can not be used here
-  # as the output might be to long.
-  cnt=`ps efo args --user $SUSER | grep -c "$SEARCH"`
-  if [ $cnt -ge $SNUM ]
-  then
-    rc=$OCF_SUCCESS
-  else
-    # ocf_log info "Database Instance $SID is not running on `hostname`"
-    rc=$OCF_NOT_RUNNING
-  fi
-  return $rc
-}
-
-
-#
-# sapdatabase_vaildate: Check the symantic of the input parameters 
-#
-sapdatabase_vaildate() {
-  rc=$OCF_SUCCESS
-  if [ `echo "$SID" | grep -c '^[A-Z][A-Z0-9][A-Z0-9]$'` -ne 1 ]
-  then
-    ocf_log err "Parsing parameter SID: '$SID' is not a valid system ID!"
-    rc=$OCF_ERR_ARGS
-  fi
-
-  case "$DBTYPE" in
-   ORA|ADA|DB6) ;;
-   *) ocf_log err "Parsing parameter DBTYPE: '$DBTYPE' is not a supported database type!"
-      rc=$OCF_ERR_ARGS ;;
-  esac
-
-  return $rc
-}
-
-
-#
-#	'main' starts here...
-#
-
-if
-  ( [ $# -ne 1 ] )
-then
-  usage
-  exit $OCF_ERR_ARGS
-fi
-
-# Set a tempfile and make sure to clean it up again
-TEMPFILE="/tmp/SAPDatabase.tmp"
-trap trap_handler INT TERM
-
-# These operations don't require OCF instance parameters to be set
-case "$1" in
-  meta-data)	meta_data
-		exit $OCF_SUCCESS;;
-
-  usage) 	usage
-		exit $OCF_SUCCESS;;
-
-  methods)	sapdatabase_methods
-		exit $?;;
-
-  *);;
-esac
-
-US=`id -u -n`
-US=`echo $US`
-if
-  [ $US != root  ]
-then
-  ocf_log err "$0 must be run as root"
-  exit $OCF_ERR_PERM
-fi
-
-# mandatory parameter check
-if  [ -z "$OCF_RESKEY_SID" ]; then
-  ocf_log err "Please set OCF_RESKEY_SID to the SAP system id!"
-  exit $OCF_ERR_ARGS
-fi
-SID=`echo "$OCF_RESKEY_SID"`
-
-if [ -z "$OCF_RESKEY_DBTYPE" ]; then
-  ocf_log err "Please set OCF_RESKEY_DBTYPE to the database vendor specific tag (ORA,ADA,DB6)!"
-  exit $OCF_ERR_ARGS
-fi
-DBTYPE="$OCF_RESKEY_DBTYPE"
-
-# optional OCF parameters, we try to guess which directories are correct
-EXESTARTDB="startdb"
-EXESTOPDB="stopdb"
-EXEDBCONNECT="R3trans"
-if [ -z "$OCF_RESKEY_DBJ2EE_ONLY" ]; then
-  DBJ2EE_ONLY=0
-else
-  case "$OCF_RESKEY_DBJ2EE_ONLY" in
-   1|true|TRUE|yes|YES) DBJ2EE_ONLY=1
-                        EXESTARTDB="startj2eedb"
-                        EXESTOPDB="stopj2eedb"
-                        EXEDBCONNECT="jdbcconnect.jar"
-                        ;;
-   0|false|FALSE|no|NO) DBJ2EE_ONLY=0;;
-   *) ocf_log err "Parsing parameter DBJ2EE_ONLY: '$DBJ2EE_ONLY' is not a boolean value!"
-      exit $OCF_ERR_ARGS ;;
-  esac
-fi
-
-if [ -z "$OCF_RESKEY_NETSERVICENAME" ]; then
-  case "$DBTYPE" in
-    ORA|ora) NETSERVICENAME="LISTENER";;
-    *)       NETSERVICENAME="";;
-  esac
-else
-  NETSERVICENAME="$OCF_RESKEY_NETSERVICENAME"
-fi
-
-PATHLIST="
-$OCF_RESKEY_DIR_EXECUTABLE
-/usr/sap/$SID/*/exe
-/usr/sap/$SID/SYS/exe/run
-/sapmnt/$SID/exe
-"
-DIR_EXECUTABLE=""
-for EXEPATH in $PATHLIST
-do
-  SAPSTARTDB=`which $EXEPATH/$EXESTARTDB 2> /dev/null`
-  if [ $? -eq 0 ]
-  then
-    MYPATH=`echo "$SAPSTARTDB" | head -1`
-    MYPATH=`dirname "$MYPATH"`
-    if [ -x $MYPATH/$EXESTARTDB -a -x $MYPATH/$EXESTOPDB -a -x $MYPATH/$EXEDBCONNECT ]
-    then
-      DIR_EXECUTABLE=$MYPATH
-      SAPSTARTDB=$MYPATH/$EXESTARTDB
-      SAPSTOPDB=$MYPATH/$EXESTOPDB
-      SAPDBCONNECT=$MYPATH/$EXEDBCONNECT
-      break
-    fi
-  fi
-done
-if [ -z "$DIR_EXECUTABLE" ]
-then
-  ocf_log err "Cannot find $EXESTARTDB,$EXESTOPDB and $EXEDBCONNECT executable, please set DIR_EXECUTABLE parameter!"
-  exit $OCF_ERR_GENERIC
-fi
-
-if [ $DBJ2EE_ONLY -eq 1 ]
-then
-  if [ -n "$OCF_RESKEY_DIR_BOOTSTRAP" ]
-  then
-    BOOTSTRAP="$OCF_RESKEY_DIR_BOOTSTRAP"
-  else
-    BOOTSTRAP=`echo /usr/sap/$SID/*/j2ee/cluster/bootstrap | head -1`
-  fi
-
-  if [ -n "$OCF_RESKEY_DIR_SECSTORE" ]
-  then
-    SECSTORE="$OCF_RESKEY_DIR_SECSTORE"
-  else
-    SECSTORE=/usr/sap/$SID/SYS/global/security/lib/tools
-  fi
-fi
-
-# as root user we need the library path to the SAP kernel to be able to call executables
-if [ `echo $LD_LIBRARY_PATH | grep -c "^$DIR_EXECUTABLE\>"` -eq 0 ]; then
-  LD_LIBRARY_PATH=$DIR_EXECUTABLE:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH
-fi
-sidadm="`echo $SID | tr [:upper:] [:lower:]`adm"
-
-# What kind of method was invoked?
-case "$1" in
-
-  start)	sapdatabase_start
-		exit $?;;
-
-  stop)		sapdatabase_stop
-		exit $?;;
-
-  monitor)
-          	sapdatabase_monitor
-		exit $?;;
-
-  status)
-                sapdatabase_status
-                exit $?;;
-
-  validate-all)	sapdatabase_vaildate
-		exit $?;;
-
-  *)		sapdatabase_methods
-		exit $OCF_ERR_UNIMPLEMENTED;;
-esac
--- cluster/rgmanager/src/resources/SAPInstance	2007/05/09 19:07:02	1.1.2.1
+++ cluster/rgmanager/src/resources/SAPInstance	2007/05/11 02:30:27	1.1.2.2
@@ -1,406 +0,0 @@
-#!/bin/sh
-#
-# SAPInstance
-#
-# Description:	Manages a single SAP Instance as a High-Availability
-#		resource. One SAP Instance is defined by one 
-#               SAP Instance-Profile. start/stop handels all services
-#               of the START-Profile, status and monitor care only
-#               about essential services.
-#
-# Author:       Alexander Krauth, June 2006
-# Support:      liunx at sap.com
-# License:      GNU General Public License (GPL)
-# Copyright:    (c) 2006 Alexander Krauth
-#
-# An example usage: 
-#      See usage() function below for more details...
-#
-# OCF instance parameters:
-#	OCF_RESKEY_InstanceName
-#       OCF_RESKEY_DIR_EXECUTABLE   (optional, well known directories will be searched by default)
-#       OCF_RESKEY_DIR_PROFILE      (optional, well known directories will be searched by default)
-#       OCF_RESKEY_START_PROFILE    (optional, well known directories will be searched by default)
-#
-#######################################################################
-# Initialization:
-
-if [ -f /usr/lib/heartbeat/ocf-shellfuncs ]; then
-	. /usr/lib/heartbeat/ocf-shellfuncs
-elif [ -f /usr/share/cluster/ocf-shellfuncs ]; then
-	. /usr/share/cluster/ocf-shellfuncs
-else
-	echo Could not find ocf-shellfuncs!
-	exit 1
-fi
-
-#######################################################################
-
-SH=/bin/sh
-
-usage() {
-  methods=`sapinstance_methods`
-  methods=`echo $methods | tr ' ' '|'`
-  cat <<-!
-	usage: $0 ($methods)
-
-	$0 manages a SAP Instance as an HA resource.
-
-	The 'start' operation starts the instance.
-	The 'stop' operation stops the instance.
-	The 'status' operation reports whether the instance is running
-	The 'monitor' operation reports whether the instance seems to be working
-	The 'validate-all' operation reports whether the parameters are valid
-	The 'methods' operation reports on the methods $0 supports
-
-	!
-}
-
-meta_data() {
-	cat <<END
-<?xml version="1.0"?>
-<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
-<resource-agent name="SAPInstance">
-<version>1.6</version>
-
-<longdesc lang="en">
-Resource script for SAP. It manages a SAP Instance as an HA resource.
-</longdesc>
-<shortdesc lang="en">SAP instance resource agent</shortdesc>
-
-<parameters>
- <parameter name="InstanceName" unique="1" required="1">
-  <longdesc lang="en">The full qualified SAP instance name. e.g. P01_DVEBMGS00_sapp01ci</longdesc>
-  <shortdesc lang="en">instance name: SID_INSTANCE_VIR-HOSTNAME</shortdesc>
-  <content type="string" default="" />
- </parameter>
- <parameter name="DIR_EXECUTABLE" unique="1" required="0">
-  <longdesc lang="en">The full qualified path where to find sapstartsrv and sapcontrol.</longdesc>
-  <shortdesc lang="en">path of sapstartsrv and sapcontrol</shortdesc>
-  <content type="string" default="" />
- </parameter>
- <parameter name="DIR_PROFILE" unique="1" required="0">
-  <longdesc lang="en">The full qualified path where to find the SAP START profile.</longdesc>
-  <shortdesc lang="en">path of start profile</shortdesc>
-  <content type="string" default="" />
- </parameter>
- <parameter name="START_PROFILE" unique="1" required="0">
-  <longdesc lang="en">The name of the SAP START profile.</longdesc>
-  <shortdesc lang="en">start profile name</shortdesc>
-  <content type="string" default="" />
- </parameter>
-</parameters>
-
-<actions>
-<action name="start" timeout="180" />
-<action name="stop" timeout="240" />
-<action name="status" timeout="60" />
-<action name="monitor" depth="0" timeout="60" interval="120" start-delay="240" />
-<action name="validate-all" timeout="5" />
-<action name="meta-data" timeout="5" />
-<action name="methods" timeout="5" />
-</actions>
-</resource-agent>
-END
-}
-
-
-#
-# methods: What methods/operations do we support?
-#
-sapinstance_methods() {
-  cat <<-!
-	start
-	stop
-	status
-	monitor
-	validate-all
-	methods
-	meta-data
-	usage
-	!
-}
-
-
-#
-# check_sapstartsrv : Before using sapcontrol we make sure that the sapstartsrv is running for the correct instance.
-#                     We cannot use sapinit and the /usr/sap/sapservices file in case of an enquerep instance,
-#                     because then we have two instances with the same instance number.
-#
-check_sapstartsrv() {
-  restart=0
-  output=`$SAPCONTROL -nr $InstanceNr -function ParameterValue INSTANCE_NAME -format script`
-  if [ $? -eq 0 ]
-  then
-    runninginst=`echo "$output" | grep '^0 : ' | cut -d' ' -f3`
-    if [ "$runninginst" != "$InstanceName" ]
-    then 
-      ocf_log warn "sapstartsrv is running for instance $runninginst, that service will be killed"
-      restart=1
-    fi
-  else
-    ocf_log warn "sapstartsrv is not running for instance $SID-$InstanceName, it will be started now"
-    restart=1
-  fi
-
-  if [ -z "$runninginst" ]; then runninginst=$InstanceName; fi
-
-  if [ $restart -eq 1 ]
-  then
-    pkill -9 -f "sapstartsrv.*$runninginst"
-    $SAPSTARTSRV pf=$SAPSTARTPROFILE -D -u $sidadm
-
-    ocf_log info "sapstartsrv for instance $SID-$InstanceName was restarted !"
-  fi
-
-  return 0
-}
-
-
-#
-# sapinstance_start : Start the SAP instance
-#
-sapinstance_start() {
-  check_sapstartsrv
-
-  output=`$SAPCONTROL -nr $InstanceNr -function Start`
-  if [ $? -eq 0 ]
-  then
-    output=`$SAPCONTROL -nr $InstanceNr -function WaitforStarted 3600 1`
-    if [ $? -eq 0 ]
-    then
-      ocf_log info "SAP Instance $SID-$InstanceName started: $output"
-      rc=$OCF_SUCCESS
-    else
-      ocf_log err "SAP Instance $SID-$InstanceName start failed: $output"
-      rc=$OCF_ERR_GENERIC
-    fi
-  else
-    ocf_log err "SAP Instance $SID-$InstanceName start failed: $output"
-    rc=$OCF_ERR_GENERIC
-  fi
-  return $rc
-}
-
-#
-# sapinstance_stop: Stop the SAP instance
-#
-sapinstance_stop() {
-  check_sapstartsrv
-
-  output=`$SAPCONTROL -nr $InstanceNr -function Stop`
-  if [ $? -eq 0 ]
-  then
-    output=`$SAPCONTROL -nr $InstanceNr -function WaitforStopped 3600 1`
-    if [ $? -eq 0 ]
-    then
-      ocf_log info "SAP Instance $SID-$InstanceName stopped: $output"
-      rc=$OCF_SUCCESS
-    else
-      ocf_log err "SAP Instance $SID-$InstanceName stop failed: $output"
-      rc=$OCF_ERR_GENERIC
-    fi
-  else
-    ocf_log err "SAP Instance $SID-$InstanceName stop failed: $output"
-    rc=$OCF_ERR_GENERIC
-  fi
-  return $rc
-}
-
-
-#
-# sapinstance_monitor: Can the given SAP instance do anything useful?
-#
-sapinstance_monitor() {
-  check_sapstartsrv
-
-  rc=$OCF_SUCCESS
-  count=0
-  LOCALHOST=`hostname`
-  output=`$SAPCONTROL -nr $InstanceNr -host $LOCALHOST -function GetProcessList -format script`
-
-  # we have to parse the output, because the returncode doesn't tell anything about the instance status
-  for SERVNO in `echo "$output" | grep '^[0-9] ' | cut -d' ' -f1 | sort -u`
-  do
-    COLOR=`echo "$output" | grep "^$SERVNO dispstatus: " | cut -d' ' -f3`
-    SERVICE=`echo "$output" | grep "^$SERVNO name: " | cut -d' ' -f3`
-    STATE=0
-
-    case $COLOR in
-      GREEN|YELLOW)       STATE=$OCF_SUCCESS;;
-      *)                  STATE=$OCF_NOT_RUNNING;;
-    esac 
-
-    case $SERVICE in
-      disp+work|msg_server|enserver|enrepserver)
-                    if [ $STATE -eq $OCF_NOT_RUNNING ]
-                    then
-                      ocf_log err "SAP instance service $SERVICE is not running with status $COLOR !"
-                      rc=$STATE
-                    fi
-                    count=1;;
-      *);;
-    esac
-  done
-
-  if [ $count -eq 0 -a $rc -eq $OCF_SUCCESS ]
-  then
-    ocf_log err "The SAP instance does not run any services which this RA could monitor!"
-    rc=$OCF_ERR_ARGS
-  fi
-
-  return $rc
-}
-
-#
-# sapinstance_vaildate: Check the symantic of the input parameters 
-#
-sapinstance_vaildate() {
-  rc=$OCF_SUCCESS
-  if [ `echo "$SID" | grep -c '^[A-Z][A-Z0-9][A-Z0-9]$'` -ne 1 ]
-  then
-    ocf_log err "Parsing instance profile name: '$SID' is not a valid system ID!"
-    rc=$OCF_ERR_ARGS
-  fi
-
-  if [ `echo "$InstanceName" | grep -c '^[A-Z].*[0-9][0-9]$'` -ne 1 ]
-  then
-    ocf_log err "Parsing instance profile name: '$InstanceName' is not a valid instance name!"
-    rc=$OCF_ERR_ARGS
-  fi
-
-  if [ `echo "$InstanceNr" | grep -c '^[0-9][0-9]$'` -ne 1 ]
-  then
-    ocf_log err "Parsing instance profile name: '$InstanceNr' is not a valid instance number!"
-    rc=$OCF_ERR_ARGS
-  fi
-
-  if [ `echo "$SAPVIRHOST" | grep -c '^[A-Za-z][A-Za-z0-9_-]*$'` -ne 1 ]
-  then
-    ocf_log err "Parsing instance profile name: '$SAPVIRHOST' is not a valid hostname!"
-    rc=$OCF_ERR_ARGS
-  fi
-
-  return $rc
-}
-
-
-#
-#	'main' starts here...
-#
-
-if
-  ( [ $# -ne 1 ] )
-then
-  usage
-  exit $OCF_ERR_ARGS
-fi
-
-# These operations don't require OCF instance parameters to be set
-case "$1" in
-  meta-data)	meta_data
-		exit $OCF_SUCCESS;;
-
-  usage) 	usage
-		exit $OCF_SUCCESS;;
-
-  methods)	sapinstance_methods
-		exit $?;;
-
-  *);;
-esac
-
-US=`id -u -n`
-US=`echo $US`
-if
-  [ $US != root  ]
-then
-  ocf_log err "$0 must be run as root"
-  exit $OCF_ERR_PERM
-fi
-
-# parameter check
-if  [ -z "$OCF_RESKEY_InstanceName" ]
-then
-  ocf_log err "Please set OCF_RESKEY_InstanceName to the name to the SAP instance profile!"
-  exit $OCF_ERR_ARGS
-fi
-
-SID=`echo "$OCF_RESKEY_InstanceName" | cut -d_ -f1`
-InstanceName=`echo "$OCF_RESKEY_InstanceName" | cut -d_ -f2`
-InstanceNr=`echo "$InstanceName" | sed 's/.*\([0-9][0-9]\)$/\1/'`
-SAPVIRHOST=`echo "$OCF_RESKEY_InstanceName" | cut -d_ -f3`
-
-# optional OCF parameters, we try to guess which directories are correct
-if  [ -z "$OCF_RESKEY_DIR_EXECUTABLE" ]
-then
-  if [ -x /usr/sap/$SID/$InstanceName/exe/sapstartsrv -a -x /usr/sap/$SID/$InstanceName/exe/sapcontrol ]
-  then
-    DIR_EXECUTABLE="/usr/sap/$SID/$InstanceName/exe"
-    SAPSTARTSRV="/usr/sap/$SID/$InstanceName/exe/sapstartsrv"
-    SAPCONTROL="/usr/sap/$SID/$InstanceName/exe/sapcontrol"
-  elif [ -x /usr/sap/$SID/SYS/exe/run/sapstartsrv -a -x /usr/sap/$SID/SYS/exe/run/sapcontrol ]
-  then
-    DIR_EXECUTABLE="/usr/sap/$SID/SYS/exe/run"
-    SAPSTARTSRV="/usr/sap/$SID/SYS/exe/run/sapstartsrv"
-    SAPCONTROL="/usr/sap/$SID/SYS/exe/run/sapcontrol"
-  else
-    ocf_log err "Cannot find sapstartsrv and sapcontrol executable, please set DIR_EXECUTABLE parameter!"
-    exit $OCF_ERR_GENERIC
-  fi
-else
-  DIR_EXECUTABLE="$OCF_RESKEY_DIR_EXECUTABLE"
-  SAPSTARTSRV="$OCF_RESKEY_DIR_EXECUTABLE/sapstartsrv"
-  SAPCONTROL="$OCF_RESKEY_DIR_EXECUTABLE/sapcontrol"
-fi
-
-if [ -z "$OCF_RESKEY_DIR_PROFILE" ]
-then
-  if [ -d /usr/sap/$SID/SYS/profile/ ]
-  then
-    DIR_PROFILE="/usr/sap/$SID/SYS/profile"
-  else
-    ocf_log err "Expected /usr/sap/$SID/SYS/profile/ to be a directory, please set DIR_PROFILE parameter!"
-    exit $OCF_ERR_GENERIC
-  fi
-else
-  DIR_PROFILE="$OCF_RESKEY_DIR_PROFILE"
-fi
-
-if [ -z "$OCF_RESKEY_START_PROFILE" ]
-then
-  SAPSTARTPROFILE="$DIR_PROFILE/START_${InstanceName}_${SAPVIRHOST}"
-  if [ ! -r $SAPSTARTPROFILE ]
-  then
-    ocf_log err "Expected $SAPSTARTPROFILE to be the instance START profile, please set START_PROFILE parameter!"
-    exit $OCF_ERR_GENERIC
-  fi
-else
-  SAPSTARTPROFILE="$OCF_RESKEY_START_PROFILE"
-fi
-
-# as root user we need the library path to the SAP kernel to be able to call sapcontrol
-if [ `echo $LD_LIBRARY_PATH | grep -c "^$DIR_EXECUTABLE\>"` -eq 0 ]; then
-  LD_LIBRARY_PATH=$DIR_EXECUTABLE:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH
-fi
-sidadm="`echo $SID | tr [:upper:] [:lower:]`adm"
-
-# What kind of method was invoked?
-case "$1" in
-
-  start)	sapinstance_start
-		exit $?;;
-
-  stop)		sapinstance_stop
-		exit $?;;
-
-  status|monitor)
-          	sapinstance_monitor
-		exit $?;;
-
-  validate-all)	sapinstance_vaildate
-		exit $?;;
-
-  *)		sapinstance_methods
-		exit $OCF_ERR_UNIMPLEMENTED;;
-esac




More information about the Cluster-devel mailing list