Difference between revisions of "BDII heartbeat script"

From PDP/Grid Wiki
Jump to navigationJump to search
 
Line 1: Line 1:
ddfghdfhdfghdfgh dfgh dfh fghdfh df
+
<nowiki>
 +
 
 +
 
 +
</nowiki>
 +
#!/bin/bash
 +
#
 +
#
 +
#      Dummy OCF RA. Does nothing but wait a few seconds, can be
 +
#      configured to fail occassionally.
 +
#
 +
# Copyright (c) 2004 SUSE LINUX AG, Lars Marowsky-Br<E9>e
 +
#                    All Rights Reserved.
 +
#
 +
# This program is free software; you can redistribute it and/or modify
 +
# it under the terms of version 2 of the GNU General Public License as
 +
# published by the Free Software Foundation.
 +
#
 +
# This program is distributed in the hope that it would be useful, but
 +
# WITHOUT ANY WARRANTY; without even the implied warranty of
 +
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 +
#
 +
# Further, this software is distributed without any warranty that it is
 +
# free of the rightful claim of any third person regarding infringement
 +
# or the like.  Any license provided herein, whether implied or
 +
# otherwise, applies only to this software file.  Patent licenses, if
 +
# any, provided herein do not apply to combinations of this program with
 +
# other software, or any other product whatsoever.
 +
#
 +
# You should have received a copy of the GNU General Public License
 +
# along with this program; if not, write the Free Software Foundation,
 +
# Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
 +
#
 +
 
 +
#######################################################################
 +
# Initialization:
 +
 
 +
: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/resource.d/heartbeat}
 +
. ${OCF_FUNCTIONS_DIR}/.ocf-shellfuncs
 +
 
 +
prog=bdii
 +
lockfile=/var/lock/subsys/$prog
 +
if [ -r /etc/sysconfig/bdii ] ; then
 +
    . /etc/sysconfig/bdii
 +
fi
 +
 
 +
BDII_CONF=${BDII_CONF:-/etc/bdii/bdii.conf}
 +
 
 +
if [ -f "${BDII_CONF}" ]; then
 +
    . "${BDII_CONF}"
 +
fi
 +
 
 +
UPDATE_LOCK_FILE=${UPDATE_LOCK_FILE:-/var/lock/subsys/bdii-update}
 +
SLAPD_LOCK_FILE=${SLAPD_LOCK_FILE:-/var/lock/subsys/bdii-slapd}
 +
UPDATE_PID_FILE=${PID_FILE:-/var/run/bdii-update.pid}
 +
BDII_USER=${BDII_USER:-ldap}
 +
BDII_VAR_DIR=${BDII_VAR_DIR:-/var/run/bdii}
 +
BDII_UPDATE=${BDII_UPDATE:-/usr/sbin/bdii-update}
 +
BDII_PROXY=${BDII_PROXY:-/usr/sbin/bdii-proxy}
 +
SLAPD=${SLAPD:-/usr/sbin/slapd}
 +
SLAPD_CONF=${SLAPD_CONF:-/etc/bdii/bdii-slapd.conf}
 +
SLAPD_PORT=${SLAPD_PORT:-2170}
 +
SLAPD_DB_DIR=${SLAPD_DB_DIR:-$BDII_VAR_DIR/db}
 +
SLAPD_PID_FILE=${SLAPD_PID_FILE:-$SLAPD_DB_DIR/slapd.pid}
 +
DB_CONFIG=${DB_CONFIG:-/etc/bdii/DB_CONFIG}
 +
 
 +
if [ -x /sbin/runuser ] ; then
 +
    RUNUSER=runuser
 +
else
 +
    RUNUSER=su
 +
fi
 +
 
 +
 
 +
#######################################################################
 +
 
 +
meta_data() {
 +
        cat <<END
 +
<?xml version="1.0"?>
 +
<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
 +
<resource-agent name="BDII" version="0.1">
 +
<version>1.0</version>
 +
 
 +
<longdesc lang="en">
 +
This is the BDII heartbeat resource agent.
 +
 
 +
</longdesc>
 +
<shortdesc lang="en">BDII heartbeat resource agent</shortdesc>
 +
 
 +
<parameters>
 +
<parameter name="state" unique="1">
 +
<longdesc lang="en">
 +
Location to store the resource state in.
 +
</longdesc>
 +
<shortdesc lang="en">State file</shortdesc>
 +
<content type="string" default="${HA_RSCTMP}/bdii-{OCF_RESOURCE_INSTANCE}.state" />
 +
</parameter>
 +
 
 +
</parameters>
 +
 
 +
<actions>
 +
<action name="start"        timeout="20" />
 +
<action name="stop"        timeout="20" />
 +
<action name="monitor"      timeout="20" interval="10" depth="0" />
 +
<action name="reload"      timeout="20" />
 +
<action name="migrate_to"  timeout="20" />
 +
<action name="migrate_from" timeout="20" />
 +
<action name="meta-data"    timeout="5" />
 +
<action name="validate-all"  timeout="20" />
 +
</actions>
 +
</resource-agent>
 +
END
 +
}
 +
 
 +
#######################################################################
 +
 
 +
dummy_usage() {
 +
        cat <<END
 +
usage: $0 {start|stop|monitor|migrate_to|migrate_from|validate-all|meta-data}
 +
 
 +
Expects to have a fully populated OCF RA-compliant environment set.
 +
END
 +
}
 +
 
 +
dummy_start() {
 +
    dummy_monitor
 +
    if [ $? =  $OCF_SUCCESS ]; then
 +
        return $OCF_SUCCESS
 +
    fi
 +
    touch ${OCF_RESKEY_state}
 +
 
 +
    # kill lingering processes
 +
 
 +
    if [ -f "${SLAPD_PID_FILE}" ]; then
 +
        pid=`cat "${SLAPD_PID_FILE}"`
 +
        kill -9 $pid >/dev/null 2>&1
 +
        rm -f "${SLAPD_LOCK_FILE}" "${SLAPD_PID_FILE}"
 +
    fi
 +
    if [ -f "${UPDATE_PID_FILE}" ]; then
 +
        pid=`cat "${UPDATE_PID_FILE}"`
 +
        kill -9 $pid >/dev/null 2>&1
 +
        rm -f "${UPDATE_LOCK_FILE}" "${UPDATE_PID_FILE}"
 +
    fi
 +
 
 +
 
 +
    # Create proxy
 +
    ${BDII_PROXY} ${BDII_CONF}
 +
 
 +
#    # Create RAM Disk
 +
#    if [ "${BDII_RAM_DISK}" = "yes" ]; then
 +
#      mount -t tmpfs -o size=1G,mode=0744 tmpfs ${SLAPD_DB_DIR}
 +
#    fi
 +
 
 +
    #Initialize the database directory.
 +
    mkdir -p ${SLAPD_DB_DIR}/stats
 +
    mkdir -p ${SLAPD_DB_DIR}/glue2
 +
    mkdir -p ${BDII_VAR_DIR}/archive
 +
    mkdir -p /var/lock/subsys
 +
    chown -R ${BDII_USER}:${BDII_USER} ${BDII_VAR_DIR}
 +
    [ -x /sbin/restorecon ] && /sbin/restorecon -R ${BDII_VAR_DIR}
 +
    chown -R ${BDII_USER}:${BDII_USER} ${SLAPD_DB_DIR}
 +
    $RUNUSER -s /bin/sh ${BDII_USER} -c "rm -f ${SLAPD_DB_DIR}/stats/* 2>/dev/null"
 +
    $RUNUSER -s /bin/sh ${BDII_USER} -c "rm -f ${SLAPD_DB_DIR}/glue2/* 2>/dev/null"
 +
    $RUNUSER -s /bin/sh ${BDII_USER} -c "rm -f ${SLAPD_DB_DIR}/* 2>/dev/null"
 +
    $RUNUSER -s /bin/sh ${BDII_USER} -c "rm -f ${BDII_VAR_DIR}/old.ldif 2>/dev/null"
 +
    $RUNUSER -s /bin/sh ${BDII_USER} -c "cp ${DB_CONFIG} ${SLAPD_DB_DIR}"
 +
    $RUNUSER -s /bin/sh ${BDII_USER} -c "cp ${DB_CONFIG} ${SLAPD_DB_DIR}/stats/"
 +
    $RUNUSER -s /bin/sh ${BDII_USER} -c "cp ${DB_CONFIG} ${SLAPD_DB_DIR}/glue2/"
 +
 
 +
#    echo -n "Starting BDII slapd: "
 +
    COMMAND="${SLAPD} -f ${SLAPD_CONF} -h ldap://$(hostname -f):${SLAPD_PORT} -u ${BDII_USER}"
 +
    ${COMMAND}
 +
    touch ${SLAPD_LOCK_FILE}
 +
    if [ ! -f "${SLAPD_PID_FILE}" ]; then
 +
        sleep 2
 +
    fi
 +
 
 +
    if [ -f "${SLAPD_PID_FILE}" ]; then
 +
        ps $(cat ${SLAPD_PID_FILE}) >/dev/null 2>&1
 +
        RETVAL=$?
 +
    else
 +
        RETVAL=1
 +
    fi
 +
 
 +
    if [ ${RETVAL} -gt 0 ]; then
 +
        echo -n "BDII slapd failed to start" 1>&2
 +
 
 +
        rm -f ${SLAPD_LOCK_FILE}
 +
#        eval log_failure_msg
 +
#        echo "${COMMAND} -d 256"
 +
#        ${COMMAND} -d 256
 +
        return 1
 +
    else
 +
        :
 +
#        eval log_success_msg
 +
    fi
 +
 
 +
    export SLAPD_CONF=${SLAPD_CONF}
 +
    $RUNUSER -s /bin/sh ${BDII_USER} -c "${BDII_UPDATE} -c ${BDII_CONF} -d"
 +
    touch ${UPDATE_LOCK_FILE}
 +
 
 +
    if [ ! -f ${BDII_VAR_DIR}/bdii-update.pid ]; then
 +
        sleep 2
 +
    fi
 +
    if [ -f ${BDII_VAR_DIR}/bdii-update.pid ]; then
 +
        touch ${UPDATE_PID_FILE}
 +
        chown ${BDII_USER} ${UPDATE_PID_FILE}
 +
        mv ${BDII_VAR_DIR}/bdii-update.pid ${UPDATE_PID_FILE}
 +
        ps $(cat ${UPDATE_PID_FILE}) >/dev/null 2>&1
 +
        RETVAL=$?
 +
    else
 +
        RETVAL=1
 +
    fi
 +
 
 +
#    echo -n "Starting BDII update process: "
 +
    if [ ${RETVAL} -gt 0 ]; then
 +
        echo -n "BDII update process failed to start" 1>&2
 +
        rm -f ${UPDATE_LOCK_FILE}
 +
#        eval log_failure_msg
 +
        return 1
 +
    else
 +
#        eval log_success_msg
 +
        touch $lockfile
 +
        return 0
 +
    fi
 +
 
 +
}
 +
 
 +
dummy_stop() {
 +
    rm ${OCF_RESKEY_state}
 +
 
 +
    RETVAL=0
 +
 
 +
#    echo -n "Stopping BDII update process: "
 +
 
 +
    if [ -f "${UPDATE_PID_FILE}" ]; then
 +
        UPDATE_PID=$(cat ${UPDATE_PID_FILE})
 +
    fi
 +
 
 +
    $RUNUSER -s /bin/sh ${BDII_USER} -c "kill -15 ${UPDATE_PID} 2>/dev/null"
 +
    if [ -n "${UPDATE_PID}" ]; then
 +
        ps ${UPDATE_PID} >/dev/null 2>&1
 +
        if [ $? = 0 ]; then
 +
            sleep 2
 +
            ps ${UPDATE_PID} >/dev/null 2>&1
 +
            if [ $? = 0 ]; then
 +
                $RUNUSER -s /bin/sh ${BDII_USER} -c "kill -9 ${UPDATE_PID} 2>/dev/null"
 +
                sleep 2
 +
                ps ${UPDATE_PID} >/dev/null 2>&1
 +
                if [ $? = 0 ]; then
 +
                    echo -n "Could not kill BDII update process ${UPDATE_PID}" 1>&2
 +
                    RETVAL=1
 +
                fi
 +
            fi
 +
        fi
 +
    fi
 +
 
 +
    if [ ${RETVAL} = 0 ];  then
 +
        rm -f ${UPDATE_PID_FILE}
 +
        rm -f ${UPDATE_LOCK_FILE}
 +
#        eval log_success_msg
 +
    else
 +
        :
 +
#        eval log_failure_msg
 +
    fi
 +
 
 +
#    echo -n "Stopping BDII slapd: "
 +
 
 +
    if [ -f "${SLAPD_PID_FILE}" ]; then
 +
        SLAPD_PID=$(cat ${SLAPD_PID_FILE})
 +
    fi
 +
 
 +
    $RUNUSER -s /bin/sh ${BDII_USER} -c "kill -15 ${SLAPD_PID} 2>/dev/null"
 +
    if [ -n "${SLAPD_PID}" ]; then
 +
        ps ${SLAPD_PID} >/dev/null 2>&1
 +
        if [ $? = 0 ]; then
 +
            sleep 2
 +
            ps ${SLAPD_PID} >/dev/null 2>&1
 +
            if [ $? = 0 ]; then
 +
                $RUNUSER -s /bin/sh ${BDII_USER} -c "kill -9 ${SLAPD_PID} 2>/dev/null"
 +
                sleep 2
 +
                ps ${SLAPD_PID} >/dev/null 2>&1
 +
                if [ $? = 0 ]; then
 +
                    echo -n "Could not kill BDII slapd process ${SLAPD_PID}" 1>&2
 +
                    RETVAL=2
 +
                else
 +
                    rm -f {SLAPD_PID_FILE}
 +
                fi
 +
            fi
 +
        fi
 +
    fi
 +
 
 +
 
 +
    if [ ${RETVAL} = 2 ];  then
 +
        :
 +
        #eval log_failure_msg
 +
    else
 +
        rm -f ${SLAPD_LOCK_FILE}
 +
        #eval log_success_msg
 +
    fi
 +
 
 +
    if [ ! ${RETVAL} = 0 ];  then
 +
        return 1
 +
    else
 +
#      mountpoint -q ${SLAPD_DB_DIR} && umount ${SLAPD_DB_DIR}
 +
        rm -f $lockfile
 +
        return 0
 +
    fi
 +
}
 +
 
 +
dummy_monitor() {
 +
        # Monitor _MUST!_ differentiate correctly between running
 +
        # (SUCCESS), failed (ERROR) or _cleanly_ stopped (NOT RUNNING).
 +
        # That is THREE states, not just yes/no.
 +
 
 +
####
 +
#      if [ -f ${OCF_RESKEY_state} ]; then
 +
#          return $OCF_SUCCESS
 +
#      fi
 +
#      if false ; then
 +
#              return $OCF_ERR_GENERIC
 +
#      fi
 +
#      return $OCF_NOT_RUNNING
 +
####
 +
 
 +
    if [ ! -f "${SLAPD_LOCK_FILE}" ] && [ ! -f "${UPDATE_LOCK_FILE}" ]; then
 +
        # no lock files found
 +
        return $OCF_NOT_RUNNING
 +
    fi
 +
 
 +
    if [ -f ${SLAPD_PID_FILE} ]; then
 +
        ps $(cat ${SLAPD_PID_FILE}) >/dev/null 2>&1
 +
        if [ ! $? = 0 ]; then
 +
            # slapd lockfile found but no process
 +
            return $OCF_ERR_GENERIC
 +
        fi
 +
    else
 +
        # no slapd lockfile found
 +
        return $OCF_ERR_GENERIC
 +
    fi
 +
 
 +
    if [ -f ${UPDATE_PID_FILE} ]; then
 +
        ps $(cat ${UPDATE_PID_FILE}) >/dev/null 2>&1
 +
        if [ ! $? = 0 ]; then
 +
            # no bdii_update process
 +
            return $OCF_ERR_GENERIC
 +
        fi
 +
    else
 +
        # no bdii_update lockfile
 +
        return $OCF_ERR_GENERIC
 +
    fi
 +
 
 +
    # all's well that ends well
 +
    return $OCF_SUCCESS
 +
}
 +
 
 +
dummy_validate() {
 +
    # Is the state directory writable?
 +
    state_dir=`dirname $SLAPD_LOCK_FILE"`
 +
    touch "$state_dir/$$"
 +
    if [ $? != 0 ]; then
 +
        return $OCF_ERR_ARGS
 +
    fi
 +
    rm "$state_dir/$$"
 +
 
 +
    return $OCF_SUCCESS
 +
}
 +
 
 +
: ${OCF_RESKEY_state=${HA_RSCTMP}/bdii-${OCF_RESOURCE_INSTANCE}.state}
 +
 
 +
        # no bdii_update lockfile
 +
        return $OCF_ERR_GENERIC
 +
    fi
 +
 
 +
    # all's well that ends well
 +
    return $OCF_SUCCESS
 +
}
 +
 
 +
dummy_validate() {
 +
    # Is the state directory writable?
 +
    state_dir=`dirname $SLAPD_LOCK_FILE"`
 +
    touch "$state_dir/$$"
 +
    if [ $? != 0 ]; then
 +
        return $OCF_ERR_ARGS
 +
    fi
 +
    rm "$state_dir/$$"
 +
 
 +
    return $OCF_SUCCESS
 +
}
 +
 
 +
: ${OCF_RESKEY_state=${HA_RSCTMP}/bdii-${OCF_RESOURCE_INSTANCE}.state}
 +
 
 +
case $__OCF_ACTION in
 +
meta-data)      meta_data
 +
                exit $OCF_SUCCESS
 +
                ;;
 +
start)          dummy_start;;
 +
stop)          dummy_stop;;
 +
monitor)        dummy_monitor;;
 +
migrate_to)    ocf_log info "Migrating ${OCF_RESOURCE_INSTANCE} to ${OCF_RESKEY_CRM_meta_migrate_to}."
 +
                dummy_stop
 +
                ;;
 +
migrate_from)  ocf_log info "Migrating ${OCF_RESOURCE_INSTANCE} to ${OCF_RESKEY_CRM_meta_migrated_from}."
 +
                dummy_start
 +
                ;;
 +
reload)        ocf_log err "Reloading..."
 +
                dummy_start
 +
                ;;
 +
validate-all)  dummy_validate;;
 +
usage|help)    dummy_usage
 +
                exit $OCF_SUCCESS
 +
                ;;
 +
*)              dummy_usage
 +
                exit $OCF_ERR_UNIMPLEMENTED
 +
                ;;
 +
esac
 +
rc=$?
 +
ocf_log debug "${OCF_RESOURCE_INSTANCE} $__OCF_ACTION : $rc"
 +
exit $rc

Revision as of 12:59, 29 March 2011

  1. !/bin/bash
  2. Dummy OCF RA. Does nothing but wait a few seconds, can be
  3. configured to fail occassionally.
  4. Copyright (c) 2004 SUSE LINUX AG, Lars Marowsky-Br<E9>e
  5. All Rights Reserved.
  6. This program is free software; you can redistribute it and/or modify
  7. it under the terms of version 2 of the GNU General Public License as
  8. published by the Free Software Foundation.
  9. This program is distributed in the hope that it would be useful, but
  10. WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  12. Further, this software is distributed without any warranty that it is
  13. free of the rightful claim of any third person regarding infringement
  14. or the like. Any license provided herein, whether implied or
  15. otherwise, applies only to this software file. Patent licenses, if
  16. any, provided herein do not apply to combinations of this program with
  17. other software, or any other product whatsoever.
  18. You should have received a copy of the GNU General Public License
  19. along with this program; if not, write the Free Software Foundation,
  20. Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
  1. Initialization:
${OCF_FUNCTIONS_DIR=${OCF_ROOT}/resource.d/heartbeat}

. ${OCF_FUNCTIONS_DIR}/.ocf-shellfuncs

prog=bdii lockfile=/var/lock/subsys/$prog if [ -r /etc/sysconfig/bdii ] ; then

   . /etc/sysconfig/bdii

fi

BDII_CONF=${BDII_CONF:-/etc/bdii/bdii.conf}

if [ -f "${BDII_CONF}" ]; then

   . "${BDII_CONF}"

fi

UPDATE_LOCK_FILE=${UPDATE_LOCK_FILE:-/var/lock/subsys/bdii-update} SLAPD_LOCK_FILE=${SLAPD_LOCK_FILE:-/var/lock/subsys/bdii-slapd} UPDATE_PID_FILE=${PID_FILE:-/var/run/bdii-update.pid} BDII_USER=${BDII_USER:-ldap} BDII_VAR_DIR=${BDII_VAR_DIR:-/var/run/bdii} BDII_UPDATE=${BDII_UPDATE:-/usr/sbin/bdii-update} BDII_PROXY=${BDII_PROXY:-/usr/sbin/bdii-proxy} SLAPD=${SLAPD:-/usr/sbin/slapd} SLAPD_CONF=${SLAPD_CONF:-/etc/bdii/bdii-slapd.conf} SLAPD_PORT=${SLAPD_PORT:-2170} SLAPD_DB_DIR=${SLAPD_DB_DIR:-$BDII_VAR_DIR/db} SLAPD_PID_FILE=${SLAPD_PID_FILE:-$SLAPD_DB_DIR/slapd.pid} DB_CONFIG=${DB_CONFIG:-/etc/bdii/DB_CONFIG}

if [ -x /sbin/runuser ] ; then

   RUNUSER=runuser

else

   RUNUSER=su

fi


meta_data() {

       cat <<END

<?xml version="1.0"?> <!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd"> <resource-agent name="BDII" version="0.1"> <version>1.0</version>

<longdesc lang="en"> This is the BDII heartbeat resource agent.

</longdesc> <shortdesc lang="en">BDII heartbeat resource agent</shortdesc>

<parameters> <parameter name="state" unique="1"> <longdesc lang="en"> Location to store the resource state in. </longdesc> <shortdesc lang="en">State file</shortdesc> <content type="string" default="${HA_RSCTMP}/bdii-{OCF_RESOURCE_INSTANCE}.state" /> </parameter>

</parameters>

<actions> <action name="start" timeout="20" /> <action name="stop" timeout="20" /> <action name="monitor" timeout="20" interval="10" depth="0" /> <action name="reload" timeout="20" /> <action name="migrate_to" timeout="20" /> <action name="migrate_from" timeout="20" /> <action name="meta-data" timeout="5" /> <action name="validate-all" timeout="20" /> </actions> </resource-agent> END }

dummy_usage() {

       cat <<END

usage: $0 {start|stop|monitor|migrate_to|migrate_from|validate-all|meta-data}

Expects to have a fully populated OCF RA-compliant environment set. END }

dummy_start() {

   dummy_monitor
   if [ $? =  $OCF_SUCCESS ]; then
       return $OCF_SUCCESS
   fi
   touch ${OCF_RESKEY_state}
   # kill lingering processes
   if [ -f "${SLAPD_PID_FILE}" ]; then
       pid=`cat "${SLAPD_PID_FILE}"`
       kill -9 $pid >/dev/null 2>&1
       rm -f "${SLAPD_LOCK_FILE}" "${SLAPD_PID_FILE}"
   fi
   if [ -f "${UPDATE_PID_FILE}" ]; then
       pid=`cat "${UPDATE_PID_FILE}"`
       kill -9 $pid >/dev/null 2>&1
       rm -f "${UPDATE_LOCK_FILE}" "${UPDATE_PID_FILE}"
   fi


   # Create proxy
   ${BDII_PROXY} ${BDII_CONF}
  1. # Create RAM Disk
  2. if [ "${BDII_RAM_DISK}" = "yes" ]; then
  3. mount -t tmpfs -o size=1G,mode=0744 tmpfs ${SLAPD_DB_DIR}
  4. fi
   #Initialize the database directory.
   mkdir -p ${SLAPD_DB_DIR}/stats
   mkdir -p ${SLAPD_DB_DIR}/glue2
   mkdir -p ${BDII_VAR_DIR}/archive
   mkdir -p /var/lock/subsys
   chown -R ${BDII_USER}:${BDII_USER} ${BDII_VAR_DIR}
   [ -x /sbin/restorecon ] && /sbin/restorecon -R ${BDII_VAR_DIR}
   chown -R ${BDII_USER}:${BDII_USER} ${SLAPD_DB_DIR}
   $RUNUSER -s /bin/sh ${BDII_USER} -c "rm -f ${SLAPD_DB_DIR}/stats/* 2>/dev/null"
   $RUNUSER -s /bin/sh ${BDII_USER} -c "rm -f ${SLAPD_DB_DIR}/glue2/* 2>/dev/null"
   $RUNUSER -s /bin/sh ${BDII_USER} -c "rm -f ${SLAPD_DB_DIR}/* 2>/dev/null"
   $RUNUSER -s /bin/sh ${BDII_USER} -c "rm -f ${BDII_VAR_DIR}/old.ldif 2>/dev/null"
   $RUNUSER -s /bin/sh ${BDII_USER} -c "cp ${DB_CONFIG} ${SLAPD_DB_DIR}"
   $RUNUSER -s /bin/sh ${BDII_USER} -c "cp ${DB_CONFIG} ${SLAPD_DB_DIR}/stats/"
   $RUNUSER -s /bin/sh ${BDII_USER} -c "cp ${DB_CONFIG} ${SLAPD_DB_DIR}/glue2/"
  1. echo -n "Starting BDII slapd: "
   COMMAND="${SLAPD} -f ${SLAPD_CONF} -h ldap://$(hostname -f):${SLAPD_PORT} -u ${BDII_USER}"
   ${COMMAND}
   touch ${SLAPD_LOCK_FILE}
   if [ ! -f "${SLAPD_PID_FILE}" ]; then
       sleep 2
   fi
   if [ -f "${SLAPD_PID_FILE}" ]; then
       ps $(cat ${SLAPD_PID_FILE}) >/dev/null 2>&1
       RETVAL=$?
   else
       RETVAL=1
   fi
   if [ ${RETVAL} -gt 0 ]; then
       echo -n "BDII slapd failed to start" 1>&2
       rm -f ${SLAPD_LOCK_FILE}
  1. eval log_failure_msg
  2. echo "${COMMAND} -d 256"
  3. ${COMMAND} -d 256
       return 1
   else
       :
  1. eval log_success_msg
   fi
   export SLAPD_CONF=${SLAPD_CONF}
   $RUNUSER -s /bin/sh ${BDII_USER} -c "${BDII_UPDATE} -c ${BDII_CONF} -d"
   touch ${UPDATE_LOCK_FILE}
   if [ ! -f ${BDII_VAR_DIR}/bdii-update.pid ]; then
       sleep 2
   fi
   if [ -f ${BDII_VAR_DIR}/bdii-update.pid ]; then
       touch ${UPDATE_PID_FILE}
       chown ${BDII_USER} ${UPDATE_PID_FILE}
       mv ${BDII_VAR_DIR}/bdii-update.pid ${UPDATE_PID_FILE}
       ps $(cat ${UPDATE_PID_FILE}) >/dev/null 2>&1
       RETVAL=$?
   else
       RETVAL=1
   fi
  1. echo -n "Starting BDII update process: "
   if [ ${RETVAL} -gt 0 ]; then
       echo -n "BDII update process failed to start" 1>&2
       rm -f ${UPDATE_LOCK_FILE}
  1. eval log_failure_msg
       return 1
   else
  1. eval log_success_msg
       touch $lockfile
       return 0
   fi

}

dummy_stop() {

   rm ${OCF_RESKEY_state}
   RETVAL=0
  1. echo -n "Stopping BDII update process: "
   if [ -f "${UPDATE_PID_FILE}" ]; then
       UPDATE_PID=$(cat ${UPDATE_PID_FILE})
   fi
   $RUNUSER -s /bin/sh ${BDII_USER} -c "kill -15 ${UPDATE_PID} 2>/dev/null"
   if [ -n "${UPDATE_PID}" ]; then
       ps ${UPDATE_PID} >/dev/null 2>&1
       if [ $? = 0 ]; then
           sleep 2
           ps ${UPDATE_PID} >/dev/null 2>&1
           if [ $? = 0 ]; then
               $RUNUSER -s /bin/sh ${BDII_USER} -c "kill -9 ${UPDATE_PID} 2>/dev/null"
               sleep 2
               ps ${UPDATE_PID} >/dev/null 2>&1
               if [ $? = 0 ]; then
                   echo -n "Could not kill BDII update process ${UPDATE_PID}" 1>&2
                   RETVAL=1
               fi
           fi
       fi
   fi
   if [ ${RETVAL} = 0 ];  then
       rm -f ${UPDATE_PID_FILE}
       rm -f ${UPDATE_LOCK_FILE}
  1. eval log_success_msg
   else
       :
  1. eval log_failure_msg
   fi
  1. echo -n "Stopping BDII slapd: "
   if [ -f "${SLAPD_PID_FILE}" ]; then
       SLAPD_PID=$(cat ${SLAPD_PID_FILE})
   fi
   $RUNUSER -s /bin/sh ${BDII_USER} -c "kill -15 ${SLAPD_PID} 2>/dev/null"
   if [ -n "${SLAPD_PID}" ]; then
       ps ${SLAPD_PID} >/dev/null 2>&1
       if [ $? = 0 ]; then
           sleep 2
           ps ${SLAPD_PID} >/dev/null 2>&1
           if [ $? = 0 ]; then
               $RUNUSER -s /bin/sh ${BDII_USER} -c "kill -9 ${SLAPD_PID} 2>/dev/null"
               sleep 2
               ps ${SLAPD_PID} >/dev/null 2>&1
               if [ $? = 0 ]; then
                   echo -n "Could not kill BDII slapd process ${SLAPD_PID}" 1>&2
                   RETVAL=2
               else
                   rm -f {SLAPD_PID_FILE}
               fi
           fi
       fi
   fi


   if [ ${RETVAL} = 2 ];  then
       :
       #eval log_failure_msg
   else
       rm -f ${SLAPD_LOCK_FILE}
       #eval log_success_msg
   fi
   if [ ! ${RETVAL} = 0 ];  then
       return 1
   else
  1. mountpoint -q ${SLAPD_DB_DIR} && umount ${SLAPD_DB_DIR}
       rm -f $lockfile
       return 0
   fi

}

dummy_monitor() {

       # Monitor _MUST!_ differentiate correctly between running
       # (SUCCESS), failed (ERROR) or _cleanly_ stopped (NOT RUNNING).
       # That is THREE states, not just yes/no.
  1. if [ -f ${OCF_RESKEY_state} ]; then
  2. return $OCF_SUCCESS
  3. fi
  4. if false ; then
  5. return $OCF_ERR_GENERIC
  6. fi
  7. return $OCF_NOT_RUNNING
   if [ ! -f "${SLAPD_LOCK_FILE}" ] && [ ! -f "${UPDATE_LOCK_FILE}" ]; then
       # no lock files found
       return $OCF_NOT_RUNNING
   fi
   if [ -f ${SLAPD_PID_FILE} ]; then
       ps $(cat ${SLAPD_PID_FILE}) >/dev/null 2>&1
       if [ ! $? = 0 ]; then
           # slapd lockfile found but no process
           return $OCF_ERR_GENERIC
       fi
   else
       # no slapd lockfile found
       return $OCF_ERR_GENERIC
   fi
   if [ -f ${UPDATE_PID_FILE} ]; then
       ps $(cat ${UPDATE_PID_FILE}) >/dev/null 2>&1
       if [ ! $? = 0 ]; then
           # no bdii_update process
           return $OCF_ERR_GENERIC
       fi
   else
       # no bdii_update lockfile
       return $OCF_ERR_GENERIC
   fi
   # all's well that ends well
   return $OCF_SUCCESS

}

dummy_validate() {

   # Is the state directory writable?
   state_dir=`dirname $SLAPD_LOCK_FILE"`
   touch "$state_dir/$$"
   if [ $? != 0 ]; then
       return $OCF_ERR_ARGS
   fi
   rm "$state_dir/$$"
   return $OCF_SUCCESS

}

${OCF_RESKEY_state=${HA_RSCTMP}/bdii-${OCF_RESOURCE_INSTANCE}.state}
       # no bdii_update lockfile
       return $OCF_ERR_GENERIC
   fi
   # all's well that ends well
   return $OCF_SUCCESS

}

dummy_validate() {

   # Is the state directory writable?
   state_dir=`dirname $SLAPD_LOCK_FILE"`
   touch "$state_dir/$$"
   if [ $? != 0 ]; then
       return $OCF_ERR_ARGS
   fi
   rm "$state_dir/$$"
   return $OCF_SUCCESS

}

${OCF_RESKEY_state=${HA_RSCTMP}/bdii-${OCF_RESOURCE_INSTANCE}.state}

case $__OCF_ACTION in meta-data) meta_data

               exit $OCF_SUCCESS
               ;;

start) dummy_start;; stop) dummy_stop;; monitor) dummy_monitor;; migrate_to) ocf_log info "Migrating ${OCF_RESOURCE_INSTANCE} to ${OCF_RESKEY_CRM_meta_migrate_to}."

               dummy_stop
               ;;

migrate_from) ocf_log info "Migrating ${OCF_RESOURCE_INSTANCE} to ${OCF_RESKEY_CRM_meta_migrated_from}."

               dummy_start
               ;;

reload) ocf_log err "Reloading..."

               dummy_start
               ;;

validate-all) dummy_validate;; usage|help) dummy_usage

               exit $OCF_SUCCESS
               ;;
  • ) dummy_usage
               exit $OCF_ERR_UNIMPLEMENTED
               ;;

esac rc=$? ocf_log debug "${OCF_RESOURCE_INSTANCE} $__OCF_ACTION : $rc" exit $rc