blob: b85c789b9edc23300397be833844b466c8895823 (
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
144
145
|
#!/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`
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
}
# 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
|