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"