Statistiques
| Révision :

root / bin / add-iscsi-volume @ 64

Historique | Voir | Annoter | Télécharger (10,12 ko)

1 1 kreverch
#!/bin/bash
2 2 kreverch
# $Id$
3 51 ltaulell
# Copyright (C) 2013 Kevin Reverchon, Loïs Taulelle
4 51 ltaulell
# This file/program is part of gZFS free software
5 51 ltaulell
# See COPYING file for details
6 51 ltaulell
#
7 1 kreverch
8 8 kreverch
function restrictedIP {
9 8 kreverch
10 13 kreverch
for IP in $(echo $restricted|sed -e "s/;/ /g")
11 8 kreverch
do
12 8 kreverch
    echo "iqn.$TODAY:$(hostname)-ens-zfs-iscsi-$target $IP" >>/etc/iet/initiators.allow
13 8 kreverch
done
14 8 kreverch
15 8 kreverch
}
16 8 kreverch
17 8 kreverch
function nointeractive {
18 1 kreverch
CHECK_TID=1
19 1 kreverch
while (/bin/grep "tid:$CHECK_TID" /proc/net/iet/volume)
20 1 kreverch
do
21 1 kreverch
   CHECK_TID=$(($CHECK_TID + 1))
22 1 kreverch
done
23 1 kreverch
24 1 kreverch
TODAY=$(date +%Y%m%d%H%M%S)
25 1 kreverch
ietadm --op new --tid=$CHECK_TID --params Name=iqn.$TODAY:$(hostname)-ens-zfs-iscsi-$target
26 1 kreverch
ietadm --op new --tid=$CHECK_TID --lun=$lun --params Path=$devPath,Type=$exportType,IOMode=$iomode
27 1 kreverch
ietadm --op new --tid=$CHECK_TID --user --params=IncomingUser=$login,Password=$passwd
28 1 kreverch
29 1 kreverch
cp /etc/iet/ietd.conf /etc/iet/ietd.conf.$TODAY
30 1 kreverch
31 1 kreverch
echo "" >>/etc/iet/ietd.conf
32 1 kreverch
echo "Target iqn.$TODAY:$(hostname)-ens-zfs-iscsi-$target" >> /etc/iet/ietd.conf
33 1 kreverch
echo "Lun $lun Path=$devPath,Type=$exportType,IOMode=$iomode" >> /etc/iet/ietd.conf
34 1 kreverch
echo "IncomingUser $login $passwd" >>/etc/iet/ietd.conf
35 1 kreverch
echo "Alias $target" >> /etc/iet/ietd.conf
36 1 kreverch
echo "" >> /etc/iet/ietd.conf
37 1 kreverch
echo "" >> /etc/iet/ietd.conf
38 1 kreverch
39 8 kreverch
if [ ! -z $restricted ]
40 8 kreverch
then
41 8 kreverch
   restrictedIP
42 8 kreverch
fi
43 8 kreverch
44 1 kreverch
}
45 1 kreverch
46 1 kreverch
function interactive {
47 1 kreverch
CHECK_TID=1
48 1 kreverch
while (/bin/grep "tid:$CHECK_TID" /proc/net/iet/volume)
49 1 kreverch
do
50 1 kreverch
   CHECK_TID=$(($CHECK_TID + 1))
51 1 kreverch
done
52 40 ltaulell
echo "*** iscsi volume name: ***"
53 1 kreverch
while read inputline
54 1 kreverch
do
55 1 kreverch
   NAME_ISCSI=$inputline
56 40 ltaulell
   echo "*** Are you sure: $inputline ? (y/n) ***"
57 1 kreverch
58 1 kreverch
   while read inputConfirm
59 1 kreverch
   do
60 1 kreverch
      if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ]
61 1 kreverch
      then
62 1 kreverch
         break
63 1 kreverch
      fi
64 40 ltaulell
      echo "*** Are you sure: $inputline ? (y/n) ***"
65 1 kreverch
   done
66 1 kreverch
67 1 kreverch
   if [ "$inputConfirm" = "y" ]
68 1 kreverch
   then
69 1 kreverch
      break
70 1 kreverch
   fi
71 1 kreverch
   if [ "$inputConfirm" != "y" ]
72 1 kreverch
   then
73 40 ltaulell
      echo "*** iscsi volume name: ***"
74 1 kreverch
   fi
75 1 kreverch
done
76 1 kreverch
77 1 kreverch
echo ""
78 40 ltaulell
echo "*** Step I: Initialization of TID and iscsi volume name ***"
79 1 kreverch
TODAY=$(date +%Y%m%d%H%M%S)
80 1 kreverch
ietadm --op new --tid=$CHECK_TID --params Name=iqn.$TODAY:$(hostname)-ens-zfs-iscsi-$NAME_ISCSI
81 1 kreverch
if [ $? -eq 0 ]
82 1 kreverch
then
83 40 ltaulell
   echo "*** Path of zfs device (zvol) to export: ***"
84 1 kreverch
85 1 kreverch
86 1 kreverch
   while read -e inputline
87 1 kreverch
   do
88 1 kreverch
      PATH_ZVOL=$inputline
89 40 ltaulell
      echo "*** Are you sure: $inputline ? (y/n) ***"
90 1 kreverch
91 1 kreverch
      while read inputConfirm
92 1 kreverch
      do
93 1 kreverch
         if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ]
94 1 kreverch
         then
95 1 kreverch
            break
96 1 kreverch
         fi
97 40 ltaulell
         echo "*** Are you sure: $inputline ? (y/n) ***"
98 1 kreverch
      done
99 1 kreverch
100 1 kreverch
      if [ "$inputConfirm" = "y" ]
101 1 kreverch
      then
102 40 ltaulell
         echo "*** Check if zvol path exists... ***"
103 1 kreverch
         ls -l $PATH_ZVOL
104 1 kreverch
         if [ $? -eq 0 ]
105 1 kreverch
         then
106 40 ltaulell
            echo "*** The path is valid... "
107 1 kreverch
            break
108 1 kreverch
         else
109 40 ltaulell
            echo "*** Path doesn't exist... "
110 1 kreverch
         fi
111 1 kreverch
      fi
112 1 kreverch
      if [ "$inputConfirm" != "y" ]
113 1 kreverch
      then
114 40 ltaulell
         echo "*** Path of zfs device (zvol) to export: ***"
115 1 kreverch
      fi
116 1 kreverch
   done
117 1 kreverch
118 1 kreverch
   echo ""
119 40 ltaulell
   echo "*** Step II: initialization of the PATH and iscsi volume LUN ***"
120 1 kreverch
   if [ $? -eq 0 ]
121 1 kreverch
   then
122 40 ltaulell
     echo "*** ISCSI export Type (fileio/blockio): ***"
123 1 kreverch
124 1 kreverch
     while read inputline
125 1 kreverch
     do
126 1 kreverch
        TYPE_EXPORT=$inputline
127 40 ltaulell
        echo "*** Are you sure: $inputline ? (y/n) ***"
128 1 kreverch
129 1 kreverch
        while read inputConfirm
130 1 kreverch
        do
131 1 kreverch
           if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ]
132 1 kreverch
           then
133 1 kreverch
              break
134 1 kreverch
           fi
135 40 ltaulell
           echo "*** Are you sure: $inputline ? (y/n) ***"
136 1 kreverch
        done
137 1 kreverch
138 1 kreverch
        if [ "$inputConfirm" = "y" ]
139 1 kreverch
        then
140 40 ltaulell
           echo "*** Check if the parameter is valid... ***"
141 1 kreverch
           if [ "$TYPE_EXPORT" = "fileio" ]||[ "$TYPE_EXPORT" = "blockio" ]
142 1 kreverch
           then
143 1 kreverch
              break
144 1 kreverch
           else
145 40 ltaulell
              echo "*** ISCSI export Type (fileio/blockio): ***"
146 1 kreverch
           fi
147 1 kreverch
        fi
148 1 kreverch
        if [ "$inputConfirm" != "y" ]
149 1 kreverch
        then
150 40 ltaulell
           echo "*** ISCSI export Type (fileio/blockio): ***"
151 1 kreverch
        fi
152 1 kreverch
     done
153 1 kreverch
154 1 kreverch
   echo ""
155 40 ltaulell
   echo "*** Step II.B: initialization iscsi IOMode ***"
156 40 ltaulell
     echo "*** ISCSI IOMode (ro/wt): ***"
157 1 kreverch
158 1 kreverch
     while read inputline
159 1 kreverch
     do
160 1 kreverch
        iomode=$inputline
161 40 ltaulell
        echo "*** Are you sure: $inputline ? (y/n) ***"
162 1 kreverch
163 1 kreverch
        while read inputConfirm
164 1 kreverch
        do
165 1 kreverch
           if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ]
166 1 kreverch
           then
167 1 kreverch
              break
168 1 kreverch
           fi
169 40 ltaulell
           echo "*** Are you sure: $inputline ? (y/n) ***"
170 1 kreverch
        done
171 1 kreverch
172 1 kreverch
        if [ "$inputConfirm" = "y" ]
173 1 kreverch
        then
174 40 ltaulell
           echo "*** Check if the parameter is valid... ***"
175 6 kreverch
           if [ "$iomode" = "ro" ]||[ "$iomode" = "wt" ]
176 1 kreverch
           then
177 1 kreverch
              break
178 1 kreverch
           else
179 40 ltaulell
              echo "*** ISCSI IOMode (ro/wt): ***"
180 1 kreverch
           fi
181 1 kreverch
        fi
182 1 kreverch
        if [ "$inputConfirm" != "y" ]
183 1 kreverch
        then
184 40 ltaulell
           echo "*** ISCSI IOMode (ro/wt): ***"
185 1 kreverch
        fi
186 1 kreverch
     done
187 1 kreverch
188 1 kreverch
     echo ""
189 40 ltaulell
     echo "*** Step III: initialization of export Type and iscsi IOMode ***"
190 1 kreverch
     ietadm --op new --tid=$CHECK_TID --lun=0 --params Path=$PATH_ZVOL,Type=$TYPE_EXPORT,IOMode=$iomode
191 1 kreverch
     if [ $? -eq 0 ]
192 1 kreverch
     then
193 1 kreverch
194 1 kreverch
       echo ""
195 40 ltaulell
       echo "*** Step IV: Login and password ***"
196 40 ltaulell
       echo "*** Do you enable a restriction login/password: (y/n)"
197 1 kreverch
       while read inputline
198 1 kreverch
       do
199 1 kreverch
           if [ "$inputline" != "y" ] && [ "$inputline" != "n" ]
200 1 kreverch
           then
201 40 ltaulell
              echo "*** Do you enable a restriction login/password: (y/n)"
202 1 kreverch
           else
203 1 kreverch
             if [ "$inputline" = "y" ]
204 1 kreverch
             then
205 40 ltaulell
                 echo "*** Give a login:"
206 1 kreverch
                 while read inputlogin
207 1 kreverch
                 do
208 1 kreverch
                   if [ "$inputlogin" != "" ]
209 1 kreverch
                   then
210 1 kreverch
                      break
211 1 kreverch
                   else
212 40 ltaulell
                      echo "*** Give a login:"
213 1 kreverch
                   fi
214 1 kreverch
                  done
215 1 kreverch
216 40 ltaulell
                  echo "*** Give a password:"
217 1 kreverch
                  while read inputpass
218 1 kreverch
                  do
219 1 kreverch
                     if [ "$inputpass" = "" ]
220 1 kreverch
                     then
221 40 ltaulell
                        echo "*** Give a password:"
222 1 kreverch
                     else
223 1 kreverch
                        break
224 1 kreverch
                     fi
225 1 kreverch
                  done
226 1 kreverch
                  ietadm --op new --tid=$CHECK_TID --user --params=IncomingUser=$inputlogin,Password=$inputpass
227 1 kreverch
                  if [ $? -eq 0 ]
228 1 kreverch
                  then
229 36 kreverch
                    echo "*** Authentication Configuration [OK]"
230 1 kreverch
231 1 kreverch
                    echo ""
232 40 ltaulell
                    echo "*** Step IV: Writting in file ietd.conf ***"
233 40 ltaulell
                    echo "*** Backup of /etc/iet/ietd.conf... "
234 1 kreverch
235 1 kreverch
                    cp /etc/iet/ietd.conf /etc/iet/ietd.conf.$TODAY
236 1 kreverch
237 1 kreverch
                    echo "" >>/etc/iet/ietd.conf
238 1 kreverch
                    echo "Target iqn.$TODAY:$(hostname)-ens-zfs-iscsi-$NAME_ISCSI" >> /etc/iet/ietd.conf
239 1 kreverch
                    echo "Lun 0 Path=$PATH_ZVOL,Type=$TYPE_EXPORT,IOMode=$iomode" >> /etc/iet/ietd.conf
240 1 kreverch
                    echo "IncomingUser $inputlogin $inputpass" >>/etc/iet/ietd.conf
241 1 kreverch
                    echo "Alias $NAME_ISCSI" >> /etc/iet/ietd.conf
242 1 kreverch
                    echo "" >> /etc/iet/ietd.conf
243 1 kreverch
                    echo "" >> /etc/iet/ietd.conf
244 1 kreverch
245 1 kreverch
                    echo ""
246 36 kreverch
                    echo "*** Add of ISCSI $NAME_ISCSI Path:$PATH_ZVOL [OK]"
247 1 kreverch
                    echo "*** FIN ***"
248 1 kreverch
                 else
249 36 kreverch
                    echo "/!\\ Authentication Configuration [ERROR] /!\\"
250 1 kreverch
                 fi
251 1 kreverch
                 break
252 1 kreverch
             else
253 1 kreverch
                    echo ""
254 40 ltaulell
                    echo "*** Step IV: Writting in file ietd.conf ***"
255 40 ltaulell
                    echo "*** Backup of /etc/iet/ietd.conf... "
256 1 kreverch
257 1 kreverch
                    cp /etc/iet/ietd.conf /etc/iet/ietd.conf.$TODAY
258 1 kreverch
259 1 kreverch
                    echo "" >>/etc/iet/ietd.conf
260 1 kreverch
                    echo "Target iqn.$TODAY:$(hostname)-ens-zfs-iscsi-$NAME_ISCSI" >> /etc/iet/ietd.conf
261 1 kreverch
                    echo "Lun 0 Path=$PATH_ZVOL,Type=$TYPE_EXPORT,IOMode=$iomode" >> /etc/iet/ietd.conf
262 1 kreverch
                    echo "IncomingUser $inputlogin $inputpass" >>/etc/iet/ietd.conf
263 1 kreverch
                    echo "Alias $NAME_ISCSI" >> /etc/iet/ietd.conf
264 1 kreverch
                    echo "" >> /etc/iet/ietd.conf
265 1 kreverch
                    echo "" >> /etc/iet/ietd.conf
266 1 kreverch
267 1 kreverch
                    echo ""
268 36 kreverch
                    echo "*** Add of ISCSI $NAME_ISCSI Path:$PATH_ZVOL [OK]"
269 36 kreverch
                    echo "*** END ***"
270 1 kreverch
                    break
271 1 kreverch
             fi
272 1 kreverch
           fi
273 1 kreverch
       done
274 1 kreverch
275 1 kreverch
     else
276 40 ltaulell
       echo "*** Problem during step III (initialization of iscsi export Type). Canceled process... ***"
277 1 kreverch
       ietadm --op delete --tid=$CHECK_TID
278 1 kreverch
     fi
279 1 kreverch
280 1 kreverch
   else
281 40 ltaulell
      echo "*** Problem during step II (initialization of PATH and iscsi volume LUN). Canceled process... ***"
282 1 kreverch
      ietadm --op delete --tid=$CHECK_TID
283 1 kreverch
   fi
284 1 kreverch
285 1 kreverch
else
286 40 ltaulell
   echo "*** Problem during step I (initialization of TID and iscsi volume name). Canceled process... ***"
287 1 kreverch
   ietadm --op delete --tid=$CHECK_TID
288 1 kreverch
fi
289 1 kreverch
}
290 1 kreverch
291 1 kreverch
function usage {
292 1 kreverch
293 40 ltaulell
echo "syntax: " 1>&2
294 1 kreverch
echo "add-iscsi-volume [OPTIONS]" 1>&2
295 1 kreverch
echo "" 1>&2
296 1 kreverch
echo "OPTIONS :" 1>&2
297 1 kreverch
echo "-h : display this message" 1>&2
298 1 kreverch
echo "-d : path device to iscsi export" 1>&2
299 40 ltaulell
echo "-T : export type (Only fileio or blockio)" 1>&2
300 40 ltaulell
echo "-L : lun (Only numeric values)" 1>&2
301 6 kreverch
echo "-o : IO Mode : ro (Read Only) or wt (Read Write)" 1>&2
302 1 kreverch
echo "-l : login if you want a CHAP authentication" 1>&2
303 1 kreverch
echo "-p : password if you want a CHAP authentication" 1>&2
304 40 ltaulell
echo "-R : Specify a list of restricted IP (Separated by a ;)" 1>&2
305 40 ltaulell
echo "-t : name of zfs volume (This field is used to generate alias name iscsi)" 1>&2
306 40 ltaulell
echo "-i : interactive mode (This option is not compatible with others)" 1>&2
307 1 kreverch
308 1 kreverch
}
309 1 kreverch
310 1 kreverch
while getopts "id:T:L:o:l:p:R:t:h" OPTION
311 1 kreverch
do
312 1 kreverch
     case $OPTION in
313 1 kreverch
         h)
314 1 kreverch
             usage
315 1 kreverch
             exit 1
316 1 kreverch
             ;;
317 1 kreverch
         d)
318 1 kreverch
            devPath=$OPTARG
319 1 kreverch
            ;;
320 1 kreverch
         T)
321 1 kreverch
            exportType=$OPTARG
322 1 kreverch
            ;;
323 1 kreverch
         L)
324 1 kreverch
            lun=$OPTARG
325 1 kreverch
            ;;
326 1 kreverch
         o)
327 1 kreverch
            iomode=$OPTARG
328 1 kreverch
            ;;
329 1 kreverch
         l)
330 1 kreverch
            login=$OPTARG
331 1 kreverch
            ;;
332 1 kreverch
         p)
333 1 kreverch
            passwd=$OPTARG
334 1 kreverch
            ;;
335 1 kreverch
         R)
336 1 kreverch
            restricted=$OPTARG
337 1 kreverch
            ;;
338 1 kreverch
         t)
339 1 kreverch
            target=$OPTARG
340 20 ltaulell
            target=$(echo ${target//\//-})
341 1 kreverch
            ;;
342 1 kreverch
         i)
343 1 kreverch
            interactive
344 1 kreverch
            exit 0
345 1 kreverch
            ;;
346 1 kreverch
     esac
347 1 kreverch
done
348 1 kreverch
if [[ -z $devPath ]] || [[ -z $exportType ]] || [[ -z $lun ]] || [[ -z $iomode ]] || [[ -z $target ]]
349 1 kreverch
then
350 1 kreverch
     usage
351 1 kreverch
     exit 1
352 1 kreverch
fi
353 1 kreverch
354 8 kreverch
nointeractive