#!/bin/bash # # Lustre - Heartbeat R1 Resource Agent for the Lustre file system # # Usage: Lustre start|stop|status # where has the form "-targets" # warn () { if [ -e /etc/logd.cf ] && [ -x /usr/sbin/ha_logger ]; then /usr/sbin/ha_logger -t heartbeat "Lustre: $*" elif [ -x /usr/bin/logger ]; then /usr/bin/logger -t heartbeat "Lustre: $*" elif [ -x /bin/logger ]; then /bin/logger -t heartbeat "Lustre: $*" else echo "Lustre: $*" fi } die () { warn "$*" exit 1 } if [ $# != 2 ]; then die "wrong number of arguments: $*" fi if ! [ "$2" == "start" -o "$2" == "stop" -o "$2" == "status" ]; then die "bad action arg[2]: $*" fi if ! [ -x /usr/sbin/ldev ]; then die "/usr/sbin/ldev is missing or not executable" fi if ! [ -x /etc/init.d/lustre ]; then die "/etc/init.d/lustre is missing or not executable" fi action=$2 if [ "`uname -n`-targets" == "$1" ]; then service=local elif [ "`/usr/sbin/ldev -p`-targets" == "$1" ]; then service=foreign else die "bad service arg[1]: $*" fi # Until multi-mount protect is implemented for ZFS we allow heartbeat to # force import a pool. This is required because ZFS will not allow you to # import a pool on a new host unless you have cleanly exported it. export ZPOOL_IMPORT_ARGS='-f' # N.B. If status action reports "running", this must pass through to # heartbeat unmodified. Otherwise, stdout/stderr is discarded by heartbeat, # so if we want to log diagnostic output from init scripts, we have to # redirect it here. warn /etc/init.d/lustre $action $service tmpout=`mktemp` || die "mktemp failed" /etc/init.d/lustre $action $service >$tmpout result=$? cat $tmpout | while read line; do echo "$line" warn "$line" done rm -f $tmpout exit $result