diff --git a/heartbeat/nfsserver b/heartbeat/nfsserver
index fe409b0f99..9fecb0a7ca 100755
--- a/heartbeat/nfsserver
+++ b/heartbeat/nfsserver
@@ -26,6 +26,9 @@ EXEC_MODE=0
SELINUX_ENABLED=-1
STATD_PATH="/var/lib/nfs"
STATD_DIR=""
+NFS_SYSCONFIG="/etc/sysconfig/nfs"
+NFS_SYSCONFIG_LOCAL_BACKUP="/etc/sysconfig/nfs.ha.bu"
+NFS_SYSCONFIG_AUTOGEN_TAG="AUTOGENERATED by $0 high availability resource-agent"
nfsserver_meta_data() {
cat <
+
+
+The udp port lockd should listen on.
+Note that setting this value will override all settings placed in the local /etc/sysconfig/nfs file.
+
+
+lockd udp port
+
+
+
+
+
+
+The tcp port lockd should listen on.
+Note that setting this value will override all settings placed in the local /etc/sysconfig/nfs file.
+
+
+lockd tcp port
+
+
+
+
+
+
+The source port number sm-notify uses when sending reboot notifications.
+Note that setting this value will override all settings placed in the local /etc/sysconfig/nfs file.
+
+
+sm-notify source port
+
+
+
+
+
+
+The port number used for RPC listener sockets.
+Note that setting this value will override all settings placed in the local /etc/sysconfig/nfs file.
+
+
+rpc.statd listener port
+
+
+
+
+
+
+The port number used for rpc.mountd listener sockets.
+Note that setting this value will override all settings placed in the local /etc/sysconfig/nfs file.
+
+
+rpc.mountd listener port
+
+
+
+
+
+
+The port number used for rpc.rquotad.
+Note that setting this value will override all settings placed in the local /etc/sysconfig/nfs file.
+
+
+rpc.rquotad port
+
+
+
+
The nfsserver resource agent will save nfs related information in this specific directory.
@@ -298,31 +367,61 @@ nfsserver_monitor ()
fi
}
-set_nfsd_args()
+set_arg()
{
- local args
+ local key="$1"
+ local value="$2"
+ local file="$3"
- if [ -z "$OCF_RESKEY_nfsd_args" ]; then
+ if [ -z "$value" ]; then
return
fi
-
- # If we don't move this file. It will override our environment variables.
- mv -f /etc/sysconfig/nfs /etc/sysconfig/nfs.bu
-
- echo "RPCNFSDARGS=$OCF_RESKEY_nfsd_args" > /etc/sysconfig/nfs
- export RPCNFSDARGS=$OCF_RESKEY_nfsd_args
+ echo "${key}=\"${value}\"" >> $file
+ export ${key}="${value}"
}
-cleanup_nfsd_args()
+set_env_args()
{
+ local tmpconfig=$(mktemp ${HA_RSCTMP}/nfsserver-tmp-XXXXX)
+ local statd_args
- if [ -z "$OCF_RESKEY_nfsd_args" ]; then
- return
+ # nfsd args
+ set_arg "RPCNFSDARGS" "$OCF_RESKEY_nfsd_args" "$tmpconfig"
+
+ # mountd args
+ if [ -n "$OCF_RESKEY_mountd_port" ]; then
+ set_arg "RPCMOUNTDOPTS" "-p $OCF_RESKEY_mountd_port" "$tmpconfig"
+ fi
+
+ # statd args
+ if [ -n "$OCF_RESKEY_statd_outgoing_port" ]; then
+ statd_args="-o $OCF_RESKEY_statd_outgoing_port"
+ fi
+ if [ -n "$OCF_RESKEY_statd_port" ]; then
+ statd_args="$statd_args -p $OCF_RESKEY_statd_port"
fi
+ set_arg "STATDARG" "$statd_args" "$tmpconfig"
- rm -f /etc/sysconfig/nfs
- mv -f /etc/sysconfig/nfs.bu /etc/sysconfig/nfs
+ # lockd ports
+ set_arg "LOCKD_UDPPORT" "$OCF_RESKEY_lockd_udp_port" "$tmpconfig"
+ set_arg "LOCKD_TCPPORT" "$OCF_RESKEY_lockd_tcp_port" "$tmpconfig"
+
+ # rquotad_port
+ set_arg "RPCRQUOTADOPTS" "$OCF_RESKEY_rquotad_port" "$tmpconfig"
+
+ # override local nfs config. preserve previous local config though.
+ if [ -s $tmpconfig ]; then
+ cat $NFS_SYSCONFIG | grep -e "$NFS_SYSCONFIG_AUTOGEN_TAG"
+ if [ $? -ne 0 ]; then
+ # backup local nfs config if it doesn't have our HA autogen tag in it.
+ mv -f $NFS_SYSCONFIG $NFS_SYSCONFIG_LOCAL_BACKUP
+ fi
+ echo "# $NFS_SYSCONFIG_AUTOGEN_TAG" > $NFS_SYSCONFIG
+ echo "# local config backup stored here, '$NFS_SYSCONFIG_LOCAL_BACKUP'" >> $NFS_SYSCONFIG
+ cat $tmpconfig >> $NFS_SYSCONFIG
+ fi
+ rm -f $tmpconfig
}
prepare_directory ()
@@ -514,6 +613,10 @@ renotify_locks()
opts="$opts -m $OCF_RESKEY_nfs_smnotify_retry_time"
fi
+ if [ -n "$OCF_RESKEY_statd_outgoing_port" ]; then
+ opts="$opts -p $OCF_RESKEY_statd_outgoing_port"
+ fi
+
# forces re-notificaiton regardless if notifies have already gone out
opts="$opts -f"
@@ -542,6 +645,7 @@ nfsserver_start ()
return $OCF_SUCCESS
fi
+ set_env_args
prepare_directory
bind_tree
@@ -567,13 +671,11 @@ nfsserver_start ()
ocf_log info "rpc.statd already up"
fi
- set_nfsd_args
fn=`mktemp`
nfs_exec start > $fn 2>&1
rc=$?
ocf_log debug "$(cat $fn)"
rm -f $fn
- cleanup_nfsd_args
if [ $rc -ne 0 ]; then
ocf_log err "Failed to start NFS server"