diff options
author | Meghana <mmadhusu@redhat.com> | 2014-05-12 12:26:18 +0000 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2014-05-16 10:01:36 -0700 |
commit | 6a9a52c932bc5be469af119e5b0b3afb8046f625 (patch) | |
tree | e7f4b3917e41ea97825fa514adfae080bf18010f | |
parent | 05a5ffe97222ca7c49828f0d762a47e85411ab61 (diff) |
Hooks:Modified S31ganesha-set.sh to enable dynamic exports via NFS-ganesha
Dbus signals have to be sent to add and remove exports on the fly,
without restarting nfs-ganesha server. Adding those signals in
the hook script to enable the same.
Adding another to check to enable IP modification,
without restarting nfs-ganesha.Adding checks to find the
configuration file in /etc/glusterfs-ganesha.
Removing nested volume set options. This introduces
some issues that will be documented clearly.
Signed-off-by: Meghana <mmadhusu@redhat.com>
Change-Id: I28f7983f2d18529dc813ddc9773b33c6caee1ad4
BUG: 1095656
Signed-off-by: Meghana <mmadhusu@redhat.com>
Reviewed-on: http://review.gluster.org/7709
Reviewed-by: Krishnan Parthasarathi <kparthas@redhat.com>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
-rwxr-xr-x | extras/hook-scripts/reset/post/S31ganesha-reset.sh | 4 | ||||
-rwxr-xr-x | extras/hook-scripts/set/post/S31ganesha-set.sh | 145 |
2 files changed, 88 insertions, 61 deletions
diff --git a/extras/hook-scripts/reset/post/S31ganesha-reset.sh b/extras/hook-scripts/reset/post/S31ganesha-reset.sh index 68411e4bd95..a683af5c0c0 100755 --- a/extras/hook-scripts/reset/post/S31ganesha-reset.sh +++ b/extras/hook-scripts/reset/post/S31ganesha-reset.sh @@ -25,8 +25,8 @@ if ps aux | grep -q "[g]anesha.nfsd" then kill -s TERM `cat /var/run/ganesha.pid` sleep 10 - rm -rf /var/lib/ganesha/exports - rm -rf /var/lib/ganesha/export_added + rm -rf /var/lib/glusterfs-ganesha/exports + rm -rf /var/lib/glusterfs-ganesha/.export_added sed -i /conf/d /var/lib/ganesha/nfs-ganesha.conf if [ "1" = $(is_volume_started "$VOL") ]; then diff --git a/extras/hook-scripts/set/post/S31ganesha-set.sh b/extras/hook-scripts/set/post/S31ganesha-set.sh index 3b74c766b7d..30f2772fa68 100755 --- a/extras/hook-scripts/set/post/S31ganesha-set.sh +++ b/extras/hook-scripts/set/post/S31ganesha-set.sh @@ -3,7 +3,8 @@ PROGNAME="Sganesha-set" OPTSPEC="volname:" VOL= declare -i EXPORT_ID -CONF1="/var/lib/ganesha/nfs-ganesha.conf" +GANESHA_DIR="/var/lib/glusterfs-ganesha" +CONF1="$GANESHA_DIR/nfs-ganesha.conf" LOG="/tmp/ganesha.log" gnfs="enabled" enable_ganesha="" @@ -76,6 +77,17 @@ function check_gluster_nfs() fi } +function check_cmd_status() +{ + if [ "$1" != "0" ] + then + rm -rf $GANESHA_DIR/exports/export.$VOL.conf + exit 1 + fi +} + + + #This function generates a new export entry as export.volume_name.conf function write_conf() { @@ -102,7 +114,7 @@ function write_conf() #This function keeps track of export IDs and increments it with every new entry function export_add() { - count=`ls -l /var/lib/ganesha/exports/*.conf | wc -l` + count=`ls -l $GANESHA_DIR/exports/*.conf | wc -l` if [ "$count" = "1" ] ; then EXPORT_ID=1 @@ -113,113 +125,124 @@ function export_add() # sed -i -e "1d" /var/lib/ganesha/export_removed # else - EXPORT_ID=`cat /var/lib/ganesha/export_added` + EXPORT_ID=`cat $GANESHA_DIR/.export_added` + check_cmd_status `echo $?` EXPORT_ID=EXPORT_ID+1 #fi fi - echo $EXPORT_ID > /var/lib/ganesha/export_added - sed -i s/Export_Id.*/"Export_Id = $EXPORT_ID;"/ \ -/var/lib/ganesha/exports/export.$VOL.conf - echo "%include \"/var/lib/ganesha/exports/export.$VOL.conf\"" >> $CONF1 + echo $EXPORT_ID > $GANESHA_DIR/.export_added + check_cmd_status `echo $?` + sed -i s/Export_Id.*/"Export_Id = $EXPORT_ID ;"/ \ +$GANESHA_DIR/exports/export.$VOL.conf + echo "%include \"$GANESHA_DIR/exports/export.$VOL.conf\"" >> $CONF1 + check_cmd_status `echo $?` +} +#This function removes an export dynamically(uses the export_id of the export) +function dynamic_export_remove() +{ + removed_id=`cat $GANESHA_DIR/exports/export.$VOL.conf |\ +grep Export_Id | cut -d " " -f3` + check_cmd_status `echo $?` + dbus-send --system \ +--dest=org.ganesha.nfsd /org/ganesha/nfsd/ExportMgr \ +org.ganesha.nfsd.exportmgr.RemoveExport int32:$removed_id } -function export_remove() +#This function adds a new export dynamically by sending dbus signals +function dynamic_export_add() { - $removed_id=`cat /var/lib/ganesha/exports/export.$VOL.conf | grep Export_Id | cut -d " " -f3` - echo $removed_id >> /var/lib/ganesha/export_removed + dbus-send --system --dest=org.ganesha.nfsd \ +/org/ganesha/nfsd/ExportMgr org.ganesha.nfsd.exportmgr.AddExport \ +string:$GANESHA_DIR/exports/export.$VOL.conf + echo $? } function start_ganesha() { - if [ "$IS_HOST_SET" = "NO" ] + if [ "$IS_HOST_SET" = "YES" ] then - gluster volume set $VOL nfs-ganesha.enable OFF - else check_gluster_nfs - #Remove export entry from nfs-ganesha.conf sed -i /$VOL.conf/d $CONF1 - pkill ganesha.nfsd - sleep 10 - gluster volume set $VOL nfs.disable ON sleep 4 - #Create a new export entry export_add - if ls /usr/bin/ | grep -q "ganesha.nfsd" + if ! ps aux | grep -q "[g]anesha.nfsd" then - sed -i s/FSAL_Shared.*/FSAL_Shared_Library=\ -"\"\/usr\/lib64\/ganesha\/libfsalgluster.so\";"/ $CONF1 - /usr/bin/ganesha.nfsd -f $CONF1 -L $LOG -N NIV_FULL_DEBUG -d - sleep 2 + if ls /usr/bin/ | grep -q "ganesha.nfsd" + then + /usr/bin/ganesha.nfsd -f $CONF1 -L $LOG -N NIV_FULL_DEBUG -d + sleep 2 + else + /usr/local/bin/ganesha.nfsd -f $CONF1 -L $LOG -N NIV_FULL_DEBUG -d + sleep 2 + fi else - sed -i s/FSAL_Shared.*/FSAL_Shared_Library=\ -"\"\/usr\/local\/lib64\/ganesha\/libfsalgluster.so\";"/ $CONF1 - /usr/local/bin/ganesha.nfsd -f $CONF1 -L $LOG -N NIV_FULL_DEBUG -d - sleep 2 + ret=$(dynamic_export_add $VOL) fi - if ! ps aux | grep -q "[g]anesha.nfsd" + + if !( ps aux | grep -q "[g]anesha.nfsd") || [ "$ret" == "1" ] then - if [ "$gnfs" = "enabled" ] - then - gluster volume set $VOL nfs.disable OFF - fi - rm -rf /var/lib/ganesha/exports/* - rm -rf /var/lib/ganesha/export_added - gluster volume set $VOL nfs-ganesha.enable OFF - gluster volume set $VOL nfs-ganesha.host none + rm -rf $GANESHA_DIR/exports/* + rm -rf $GANESHA_DIR/.export_added exit 1 fi fi - } #This function generates a new config file when ganesha.host is set #If the volume is already exported, only hostname is changed function set_hostname() { - if ! ls /var/lib/ganesha/exports/ | grep -q $VOL.conf + if ! ls $GANESHA_DIR/exports/ | grep -q $VOL.conf then write_conf $VOL $host_name >\ -/var/lib/ganesha/exports/export.$VOL.conf +$GANESHA_DIR/exports/export.$VOL.conf else sed -i s/hostname.*/"hostname=\ -\"$host_name\";"/ /var/lib/ganesha/exports/export.$VOL.conf +\"$host_name\";"/ $GANESHA_DIR/exports/export.$VOL.conf fi - } -function stop_ganesha() +function check_ganesha_dir() { - if ps aux | grep -q "[g]anesha.nfsd" - then - pkill ganesha.nfsd - sleep 10 + #Check if the configuration file is placed in /etc/glusterfs-ganesha + if ! ls /etc/glusterfs-ganesha | grep "nfs-ganesha.conf" + then + exit 1 + else + if [ ! -d "$GANESHA_DIR" ]; + then + mkdir $GANESHA_DIR + fi + cp /etc/glusterfs-ganesha/nfs-ganesha.conf $GANESHA_DIR/ fi - gluster vol set $VOL nfs-ganesha.host none +} + +function stop_ganesha() +{ + dynamic_export_remove $VOL #Remove the specfic export configuration file - rm -rf /var/lib/ganesha/exports/export.$VOL.conf + rm -rf $GANESHA_DIR/exports/export.$VOL.conf #Remove that entry from nfs-ganesha.conf sed -i /$VOL.conf/d $CONF1 - #If there are any other volumes exported, restart nfs-ganesha - if [ "$(ls -A /var/lib/ganesha/exports)" ]; + #If there are no other volumes exported, stop nfs-ganesha + if [ ! "$(ls -A $GANESHA_DIR/exports)" ]; then - check_nfsd_loc - $LOC/bin/ganesha.nfsd -f $CONF1 -L $LOG -N NIV_FULL_DEBUG -d - else - rm -rf /var/lib/ganesha/export_added + pkill ganesha.nfsd + rm -rf $GANESHA_DIR/.export_added fi - } parse_args $@ - if [ ! -d "/var/lib/ganesha/exports" ]; + check_ganesha_dir $VOL + if [ ! -d "$GANESHA_DIR/exports" ]; then - mkdir /var/lib/ganesha/exports + mkdir $GANESHA_DIR/exports fi if echo $enable_ganesha | grep -q -i "ON" then @@ -227,19 +250,23 @@ function stop_ganesha() start_ganesha elif echo $enable_ganesha | grep -q -i "OFF" then - check_if_host_set + check_if_host_set $VOL if [ "$IS_HOST_SET" = "YES" ] then stop_ganesha + exit 0 fi fi if [ "$host_name" != "none" ]; then - check_if_host_set + check_if_host_set $VOL set_hostname if cat /var/lib/glusterd/vols/$VOL/info\ | grep -i -q "nfs-ganesha.enable=on" then + dynamic_export_remove $VOL + rm -rf $GANESHA_DIR/exports/export.$VOL.conf + set_hostname start_ganesha fi fi |