Skip to content

Commit

Permalink
High: nfsserver: Add options for explicitly setting nfs daemon ports
Browse files Browse the repository at this point in the history
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 29, 2014
1 parent f1bbb48 commit 8fd1a9a
Showing 1 changed file with 118 additions and 16 deletions.
134 changes: 118 additions & 16 deletions heartbeat/nfsserver
Expand Up @@ -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
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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 ()
Expand Down Expand Up @@ -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"

Expand Down Expand Up @@ -542,6 +645,7 @@ nfsserver_start ()
return $OCF_SUCCESS
fi

set_env_args
prepare_directory
bind_tree

Expand All @@ -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"
Expand Down

0 comments on commit 8fd1a9a

Please sign in to comment.