#!/bin/bash # # Copyright (c) 2014 Anand Subramanian anands@redhat.com # Copyright (c) 2015 Red Hat Inc. # 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}/lib/heartbeat} . ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs if [ -n "$OCF_DEBUG_LIBRARY" ]; then . $OCF_DEBUG_LIBRARY else : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} . ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs fi ganesha_meta_data() { cat < 1.0 This Linux-specific resource agent acts as a dummy resource agent for nfs-ganesha. Manages the user-space nfs-ganesha NFS server END return $OCF_SUCCESS } ganesha_grace_usage() { echo "ganesha.nfsd USAGE" } # Make sure meta-data and usage always succeed case $__OCF_ACTION in meta-data) ganesha_meta_data exit $OCF_SUCCESS ;; usage|help) ganesha_usage exit $OCF_SUCCESS ;; *) ;; esac ganesha_grace_start() { local result="" local resourcename="" local deadserver="" local tmpIFS=${IFS} local pid_file="/var/run/ganesha.nfsd.pid" # RHEL6 /etc/init.d/nfs-ganesha adds "-p /var/run/ganesha.nfsd.pid" # RHEL7 systemd does not. Would be nicer if all distros used the # same pid file. if [ -e /usr/lib/systemd/system/nfs-ganesha.service ]; then pid_file="/var/run/ganesha.pid" fi # logger "ganesha_grace_start()" # we're here because somewhere in the cluster one or more # of the ganesha.nfsds have died, triggering a floating IP # address to move. Resource constraint location rules ensure # that this is invoked before the floating IP is moved. if [ -e ${pid_file} -a \ -d /proc/$(cat ${pid_file} ) ]; then # my ganesha.nfsd is still running # find out which one died? pcs status | grep dead_ip-1 | sort > /tmp/.pcs_status result=$(diff /var/run/ganesha/pcs_status /tmp/.pcs_status | grep '^>') if [[ ${result} ]]; then # logger "ganesha_grace_start(), ${result}" IFS=$'\n' for line in ${result}; do resourcename=$(echo ${line} | cut -f 1 | cut -d ' ' -f 3) deadserver=${resourcename%"-dead_ip-1"} if [[ ${deadserver} ]]; then # logger "ganesha_grace_start(), ${line}" # logger "ganesha_grace_start(), dbus-send --print-reply --system --dest=org.ganesha.nfsd /org/ganesha/nfsd/admin org.ganesha.nfsd.admin.grace string:${deadserver}" dbus-send --print-reply --system --dest=org.ganesha.nfsd /org/ganesha/nfsd/admin org.ganesha.nfsd.admin.grace string:${deadserver} if [ $? -ne 0 ]; then logger "warning: dbus-send --print-reply --system --dest=org.ganesha.nfsd /org/ganesha/nfsd/admin org.ganesha.nfsd.admin.grace string:${deadserver} failed" fi fi done IFS=${tmpIFS} fi fi return $OCF_SUCCESS } ganesha_grace_stop() { # logger "ganesha_grace_stop()" return $OCF_SUCCESS } ganesha_grace_monitor() { # logger "ganesha_grace_monitor()" if [ ! -d /var/run/ganesha ]; then mkdir -p /var/run/ganesha fi pcs status | grep dead_ip-1 | sort > /var/run/ganesha/pcs_status return $OCF_SUCCESS } ganesha_grace_validate() { return $OCF_SUCCESS } ganesha_grace_validate # logger "ganesha_grace ${OCF_RESOURCE_INSTANCE} $__OCF_ACTION" # Translate each action into the appropriate function call case $__OCF_ACTION in start) ganesha_grace_start ;; stop) ganesha_grace_stop ;; status|monitor) ganesha_grace_monitor ;; *) ganesha_grace_usage exit $OCF_ERR_UNIMPLEMENTED ;; esac rc=$? # The resource agent may optionally log a debug message ocf_log debug "${OCF_RESOURCE_INSTANCE} $__OCF_ACTION returned $rc" exit $rc