From 4a829e33d9c0d62a710650337406dc25d89cc599 Mon Sep 17 00:00:00 2001 From: Meghana M Date: Mon, 15 Jun 2015 08:43:44 +0000 Subject: NFS-Ganesha: Automatically export vol that was exported before vol restart Consider a volume that is exported via NFS-Ganesha. Stopping this volume will automatically unexport the volume. Starting this volume should automatically export it. Although the logic was already there, there was a bug in it. Fixing the same by introducing a hook script. Also with the new CLI options, the hook script S31ganesha-set.sh is no longer required. Hence, removing the same. Adding a comment to tell the user that one of the CLI commands will take a few minutes to complete. Change-Id: Ibff769ca04fef0c2a129c83fe31fc9c869350e8d BUG: 1231738 Signed-off-by: Meghana Madhusudhan Reviewed-on: http://review.gluster.org/11247 Reviewed-by: soumya k Tested-by: Gluster Build System Reviewed-by: Kaleb KEITHLEY --- extras/hook-scripts/start/post/Makefile.am | 2 +- extras/hook-scripts/start/post/S31ganesha-start.sh | 114 +++++++++++++++++++++ 2 files changed, 115 insertions(+), 1 deletion(-) create mode 100755 extras/hook-scripts/start/post/S31ganesha-start.sh (limited to 'extras/hook-scripts/start') diff --git a/extras/hook-scripts/start/post/Makefile.am b/extras/hook-scripts/start/post/Makefile.am index d9cba93ed52..ad53233b1c9 100644 --- a/extras/hook-scripts/start/post/Makefile.am +++ b/extras/hook-scripts/start/post/Makefile.am @@ -1 +1 @@ -EXTRA_DIST = S29CTDBsetup.sh S30samba-start.sh +EXTRA_DIST = S29CTDBsetup.sh S30samba-start.sh S31ganesha-start.sh diff --git a/extras/hook-scripts/start/post/S31ganesha-start.sh b/extras/hook-scripts/start/post/S31ganesha-start.sh new file mode 100755 index 00000000000..7ba8af1e6e4 --- /dev/null +++ b/extras/hook-scripts/start/post/S31ganesha-start.sh @@ -0,0 +1,114 @@ +#!/bin/bash +PROGNAME="Sganesha-start" +OPTSPEC="volname:,gd-workdir:" +VOL= +declare -i EXPORT_ID +ganesha_key="ganesha.enable" +GANESHA_DIR="/etc/ganesha" +CONF1="$GANESHA_DIR/ganesha.conf" +GLUSTERD_WORKDIR= + +function parse_args () +{ + ARGS=$(getopt -l $OPTSPEC -o "o" -name $PROGNAME $@) + eval set -- "$ARGS" + + while true; do + case $1 in + --volname) + shift + VOL=$1 + ;; + --gd-workdir) + shift + GLUSTERD_WORKDIR=$1 + ;; + *) + shift + break + ;; + esac + shift + done +} + + + +#This function generates a new export entry as export.volume_name.conf +function write_conf() +{ + echo "EXPORT{ + " + echo "Export_Id = ;" + echo "Path=\"/$1\";" + echo "FSAL { + " + echo "name = "GLUSTER";" + echo "hostname="localhost";" + echo "volume=\"$1\";" + echo "}" + echo "Access_type = RW;" + echo "Squash = No_root_squash;" + echo "Disable_ACL = TRUE;" + echo "Pseudo=\"/$1\";" + echo "Protocols = \"3\",\"4\" ;" + echo "Transports = \"UDP\",\"TCP\" ;" + echo "SecType = \"sys\";" + echo "}" +} + +#This function keeps track of export IDs and increments it with every new entry +function export_add() +{ + count=`ls -l $GANESHA_DIR/exports/*.conf | wc -l` + if [ "$count" = "0" ] ; + then + EXPORT_ID=2 + else + #if [ -s /var/lib/ganesha/export_removed ]; + # then + # EXPORT_ID=`head -1 /var/lib/ganesha/export_removed` + # sed -i -e "1d" /var/lib/ganesha/export_removed + # else + + EXPORT_ID=`cat $GANESHA_DIR/.export_added` + EXPORT_ID=EXPORT_ID+1 + #fi + fi + echo $EXPORT_ID > $GANESHA_DIR/.export_added + sed -i s/Export_Id.*/"Export_Id= $EXPORT_ID ;"/ \ +$GANESHA_DIR/exports/export.$VOL.conf + echo "%include \"$GANESHA_DIR/exports/export.$VOL.conf\"" >> $CONF1 +} + +#This function adds a new export dynamically by sending dbus signals +function dynamic_export_add() +{ + dbus-send --print-reply --system --dest=org.ganesha.nfsd \ +/org/ganesha/nfsd/ExportMgr org.ganesha.nfsd.exportmgr.AddExport \ +string:$GANESHA_DIR/exports/export.$VOL.conf string:"EXPORT(Path=/$VOL)" + +} + +function start_ganesha() +{ + #Remove export entry from nfs-ganesha.conf + sed -i /$VOL.conf/d $CONF1 + #Create a new export entry + export_add $VOL + dynamic_export_add $VOL + +} + + parse_args $@ + ganesha_value=$(grep $ganesha_key $GLUSTERD_WORKDIR/vols/$VOL/info |\ + cut -d"=" -f2) + if [ "$ganesha_value" = "on" ] + then + write_conf $VOL + start_ganesha $VOL + else + exit 0 + fi + + -- cgit