diff options
Diffstat (limited to 'extras')
| -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 + +  | 
