Permalink
Browse files

High: nfsserver: Add options for explicitly setting nfs daemon ports

Some deployments require setting predictable port numbers for the
nfs daemons in /etc/sysconfig/nfs. New port specific options have
been added to the ocf agent so the port configuration can live
in the cluster config.
  • Loading branch information...
davidvossel committed May 19, 2014
1 parent f1bbb48 commit 8fd1a9aa26d35d24ea5dc4a45376d99d4265e41f
Showing with 118 additions and 16 deletions.
  1. +118 −16 heartbeat/nfsserver
View
@@ -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 <<END
@@ -102,6 +105,72 @@ rpc.nfsd options
<content type="string" />
</parameter>
<parameter name="lockd_udp_port" unique="0" required="0">
<longdesc lang="en">
The udp port lockd should listen on.
Note that setting this value will override all settings placed in the local /etc/sysconfig/nfs file.
</longdesc>
<shortdesc lang="en">
lockd udp port
</shortdesc>
<content type="integer" />
</parameter>
<parameter name="lockd_tcp_port" unique="0" required="0">
<longdesc lang="en">
The tcp port lockd should listen on.
Note that setting this value will override all settings placed in the local /etc/sysconfig/nfs file.
</longdesc>
<shortdesc lang="en">
lockd tcp port
</shortdesc>
<content type="integer" />
</parameter>
<parameter name="statd_outgoing_port" unique="0" required="0">
<longdesc lang="en">
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.
</longdesc>
<shortdesc lang="en">
sm-notify source port
</shortdesc>
<content type="integer" />
</parameter>
<parameter name="statd_port" unique="0" required="0">
<longdesc lang="en">
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.
</longdesc>
<shortdesc lang="en">
rpc.statd listener port
</shortdesc>
<content type="integer" />
</parameter>
<parameter name="mountd_port" unique="0" required="0">
<longdesc lang="en">
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.
</longdesc>
<shortdesc lang="en">
rpc.mountd listener port
</shortdesc>
<content type="integer" />
</parameter>
<parameter name="rquotad_port" unique="0" required="0">
<longdesc lang="en">
The port number used for rpc.rquotad.
Note that setting this value will override all settings placed in the local /etc/sysconfig/nfs file.
</longdesc>
<shortdesc lang="en">
rpc.rquotad port
</shortdesc>
<content type="integer" />
</parameter>
<parameter name="nfs_shared_infodir" unique="0" required="0">
<longdesc lang="en">
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"

0 comments on commit 8fd1a9a

Please sign in to comment.