Statistiques
| Révision :

root / bin / add-iscsi-volume @ 20

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

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