summaryrefslogtreecommitdiffstats
path: root/extras/hook-scripts/start/post/S31ganesha-start.sh
blob: 513402eaa16c5d8abf9dd84e49e88aa80f4ce573 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#!/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 -e "# WARNING : Using Gluster CLI will overwrite manual
# changes made to this file. To avoid it, edit the
# file, copy it over to all the NFS-Ganesha nodes
# and run ganesha-ha.sh --refresh-config."

echo "EXPORT{"
echo "      Export_Id = 2;"
echo "      Path = \"/$VOL\";"
echo "      FSAL {"
echo "           name = \"GLUSTER\";"
echo "           hostname=\"localhost\";"
echo "           volume=\"$VOL\";"
echo "           }"
echo "      Access_type = RW;"
echo "      Disable_ACL = true;"
echo "      Squash=\"No_root_squash\";"
echo "      Pseudo=\"/$VOL\";"
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" = "1" ] ;
                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`
        #fi
        fi
        for entry in `grep -n Export_Id  $GANESHA_DIR/exports/export.$VOL.conf \
        | awk -F":" '{print$1}'`
        do
                sed -e "$entry s/Export_Id.*/Export_Id=$EXPORT_ID ;/" -i \
                $GANESHA_DIR/exports/export.$VOL.conf
                dbus-send  --system \
                --dest=org.ganesha.nfsd  /org/ganesha/nfsd/ExportMgr \
                org.ganesha.nfsd.exportmgr.AddExport  \
                string:$GANESHA_DIR/exports/export.$VOL.conf \
                string:"EXPORT(Export_Id=$EXPORT_ID)"
                EXPORT_ID=EXPORT_ID+1
        done
        echo $EXPORT_ID > $GANESHA_DIR/.export_added
        echo "%include \"$GANESHA_DIR/exports/export.$VOL.conf\"" >> $CONF1
}

function start_ganesha()
{
        #Remove export entry from nfs-ganesha.conf
        sed -i /$VOL.conf/d  $CONF1
        #Create a new export entry
        export_add $VOL
}

# based on src/scripts/ganeshactl/Ganesha/export_mgr.py
function is_exported()
{
        local volume="${1}"

        dbus-send --type=method_call --print-reply --system \
                  --dest=org.ganesha.nfsd /org/ganesha/nfsd/ExportMgr \
                  org.ganesha.nfsd.exportmgr.ShowExports \
            | grep -w -q "/${volume}"

        return $?
}

# Check the info file (contains the volume options) to see if Ganesha is
# enabled for this volume.
function ganesha_enabled()
{
        local volume="${1}"
        local info_file="${GLUSTERD_WORKDIR}/vols/${VOL}/info"
        local enabled="off"

        enabled=$(grep -w ${ganesha_key} ${info_file} | cut -d"=" -f2)

        [ "${enabled}" == "on" ]

        return $?
}

parse_args $@

if ganesha_enabled ${VOL} && ! is_exported ${VOL}
then
        if [ ! -e ${GANESHA_DIR}/exports/export.${VOL}.conf ]
        then
                write_conf ${VOL} > ${GANESHA_DIR}/exports/export.${VOL}.conf
        fi
        start_ganesha ${VOL}
fi

exit 0