diff options
author | Meghana M <mmadhusu@redhat.com> | 2014-03-24 13:58:38 +0530 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2014-05-03 07:24:07 -0700 |
commit | 0088e318c1218191535ea0baa04b4fe858412f54 (patch) | |
tree | 4ddcb20318affb12ae2470c4191805c1f4745141 /extras/hook-scripts | |
parent | 66f560e0071db84d430f38b996364f6b8c4f0f6d (diff) |
cli/hooks : Add volume set options to enable/disable nfs-ganesha support.
1. gluster volume set nfs-ganesha.enable ON/OFF
If the option is set to ON, the volume field in the nfs-ganesha configuartion file is
edited. Gluster-nfs is disabled on that volume and the volume is exported using
nfs-ganesha.
2.gluster volume set nfs-ganesha.host IP
This is used to provide the IP of the nfs-ganesha host.
Note : nfs-ganesha.host MUST be set before using nfs-ganesha.enable ON
The switch from gluster-nfs to nfs-ganesha is mostly done by the hook-scripts
in the post phase of the 'set' option. As a result, gluster volume reset does not
function as it is expected to. By default, nfs-ganesha will be set to off but the
process will not be killed.
Hence, a few changes have to be made post 'reset' option as well. Those changes
also have been added.
Change-Id: I7fdc14ee49d1724af96eda33c6a3ec08b1020788
BUG: 1092283
Signed-off-by: Meghana <mmadhusu@redhat.com>
Reviewed-on: http://review.gluster.org/7321
Reviewed-by: Raghavendra Talur <rtalur@redhat.com>
Reviewed-by: Santosh Pradhan <spradhan@redhat.com>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'extras/hook-scripts')
-rw-r--r-- | extras/hook-scripts/Makefile.am | 2 | ||||
-rw-r--r-- | extras/hook-scripts/reset/Makefile.am | 2 | ||||
-rw-r--r-- | extras/hook-scripts/reset/post/Makefile.am | 1 | ||||
-rwxr-xr-x | extras/hook-scripts/reset/post/S31ganesha-reset.sh | 38 | ||||
-rw-r--r-- | extras/hook-scripts/reset/pre/Makefile.am | 1 | ||||
-rw-r--r-- | extras/hook-scripts/set/post/Makefile.am | 2 | ||||
-rwxr-xr-x | extras/hook-scripts/set/post/S31ganesha-set.sh | 247 |
7 files changed, 291 insertions, 2 deletions
diff --git a/extras/hook-scripts/Makefile.am b/extras/hook-scripts/Makefile.am index dd67c248e1a..4a1adb3d5db 100644 --- a/extras/hook-scripts/Makefile.am +++ b/extras/hook-scripts/Makefile.am @@ -1,2 +1,2 @@ EXTRA_DIST = S40ufo-stop.py S56glusterd-geo-rep-create-post.sh -SUBDIRS = add-brick set start stop +SUBDIRS = add-brick set start stop reset diff --git a/extras/hook-scripts/reset/Makefile.am b/extras/hook-scripts/reset/Makefile.am new file mode 100644 index 00000000000..6e2701e909e --- /dev/null +++ b/extras/hook-scripts/reset/Makefile.am @@ -0,0 +1,2 @@ +SUBDIRS = post pre +CLEANFILES = diff --git a/extras/hook-scripts/reset/post/Makefile.am b/extras/hook-scripts/reset/post/Makefile.am new file mode 100644 index 00000000000..fcdd8ab55ba --- /dev/null +++ b/extras/hook-scripts/reset/post/Makefile.am @@ -0,0 +1 @@ +EXTRA_DIST = S31ganesha-reset.sh diff --git a/extras/hook-scripts/reset/post/S31ganesha-reset.sh b/extras/hook-scripts/reset/post/S31ganesha-reset.sh new file mode 100755 index 00000000000..68411e4bd95 --- /dev/null +++ b/extras/hook-scripts/reset/post/S31ganesha-reset.sh @@ -0,0 +1,38 @@ +#/bin/bash +PROGNAME="Sganesha-reset" +OPTSPEC="volname:" +VOL= + +function parse_args () { + ARGS=$(getopt -l $OPTSPEC -o "o" -name $PROGNAME $@) + eval set -- "$ARGS" + case $1 in + --volname) + shift + VOL=$1 + ;; + esac +} + +function is_volume_started () { + volname=$1 + echo "$(grep status /var/lib/glusterd/vols/"$volname"/info |\ + cut -d"=" -f2)" +} + +parse_args $@ +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 + sed -i /conf/d /var/lib/ganesha/nfs-ganesha.conf + if [ "1" = $(is_volume_started "$VOL") ]; + then + gluster volume start $VOL force + fi +fi + + + diff --git a/extras/hook-scripts/reset/pre/Makefile.am b/extras/hook-scripts/reset/pre/Makefile.am new file mode 100644 index 00000000000..1b336ac1a85 --- /dev/null +++ b/extras/hook-scripts/reset/pre/Makefile.am @@ -0,0 +1 @@ +EXTRA_DIST = diff --git a/extras/hook-scripts/set/post/Makefile.am b/extras/hook-scripts/set/post/Makefile.am index 9ded234cf9b..3ec25d94134 100644 --- a/extras/hook-scripts/set/post/Makefile.am +++ b/extras/hook-scripts/set/post/Makefile.am @@ -1 +1 @@ -EXTRA_DIST = S30samba-set.sh +EXTRA_DIST = S30samba-set.sh S31ganesha-set.sh diff --git a/extras/hook-scripts/set/post/S31ganesha-set.sh b/extras/hook-scripts/set/post/S31ganesha-set.sh new file mode 100755 index 00000000000..3b74c766b7d --- /dev/null +++ b/extras/hook-scripts/set/post/S31ganesha-set.sh @@ -0,0 +1,247 @@ +#!/bin/bash +PROGNAME="Sganesha-set" +OPTSPEC="volname:" +VOL= +declare -i EXPORT_ID +CONF1="/var/lib/ganesha/nfs-ganesha.conf" +LOG="/tmp/ganesha.log" +gnfs="enabled" +enable_ganesha="" +host_name="none" +IS_HOST_SET="NO" +LOC="" + + + +function parse_args () +{ + ARGS=$(getopt -l $OPTSPEC -o "o" -name $PROGNAME $@) + eval set -- "$ARGS" + + while true; do + case $1 in + --volname) + shift + VOL=$1 + ;; + *) + shift + for pair in $@; do + read key value < <(echo "$pair" | tr "=" " ") + case "$key" in + "nfs-ganesha.enable") + enable_ganesha=$value + ;; + "nfs-ganesha.host") + host_name=$value + ;; + *) + ;; + esac + done + + shift + break + ;; + esac + shift + done +} + + +function check_if_host_set() +{ + if cat /var/lib/glusterd/vols/$VOL/info | grep -q "nfs-ganesha.host" + then + IS_HOST_SET="YES" + fi +} + +function check_nfsd_loc() +{ + if ls /usr/bin | grep "[g]anesha.nfsd" + then + LOC="/usr" + else + LOC="/usr/local" + fi +} + + +function check_gluster_nfs() +{ + if cat /var/lib/glusterd/vols/$VOL/info | grep -q "nfs.disable=ON" + then + gnfs="disabled" + fi +} + +#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=\"$2\";" + echo "volume=\"$1\";" + echo "}" + echo "Access_type = RW;" + echo "Squash = No_root_squash;" + echo "Pseudo=\"/$1\";" + echo "NFS_Protocols = \"3,4\" ;" + echo "Transport_Protocols = \"UDP,TCP\" ;" + echo "SecType = \"sys\";" + echo "Tag = \"$1\";" + echo "}" +} + +#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` + if [ "$count" = "1" ] ; + then + EXPORT_ID=1 + 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 /var/lib/ganesha/export_added` + 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 + + +} + +function export_remove() +{ + $removed_id=`cat /var/lib/ganesha/exports/export.$VOL.conf | grep Export_Id | cut -d " " -f3` + echo $removed_id >> /var/lib/ganesha/export_removed +} + +function start_ganesha() +{ + if [ "$IS_HOST_SET" = "NO" ] + 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" + 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 + 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 + fi + + if ! ps aux | grep -q "[g]anesha.nfsd" + 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 + 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 + then + write_conf $VOL $host_name >\ +/var/lib/ganesha/exports/export.$VOL.conf + else + sed -i s/hostname.*/"hostname=\ +\"$host_name\";"/ /var/lib/ganesha/exports/export.$VOL.conf + fi + +} + + +function stop_ganesha() +{ + if ps aux | grep -q "[g]anesha.nfsd" + then + pkill ganesha.nfsd + sleep 10 + fi + gluster vol set $VOL nfs-ganesha.host none + #Remove the specfic export configuration file + rm -rf /var/lib/ganesha/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)" ]; + 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 + fi + +} + + parse_args $@ + if [ ! -d "/var/lib/ganesha/exports" ]; + then + mkdir /var/lib/ganesha/exports + fi + if echo $enable_ganesha | grep -q -i "ON" + then + check_if_host_set $VOL + start_ganesha + elif echo $enable_ganesha | grep -q -i "OFF" + then + check_if_host_set + if [ "$IS_HOST_SET" = "YES" ] + then + stop_ganesha + fi + fi + if [ "$host_name" != "none" ]; + then + check_if_host_set + set_hostname + if cat /var/lib/glusterd/vols/$VOL/info\ +| grep -i -q "nfs-ganesha.enable=on" + then + start_ganesha + fi + fi + + |