Statistiques
| Révision :

root / bin / add-iscsi-volume @ 1

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

1
#!/bin/bash
2

    
3

    
4

    
5
function automatic {
6
#echo "*** Recherche d'un TID disponible ***"
7
CHECK_TID=1
8
while (/bin/grep "tid:$CHECK_TID" /proc/net/iet/volume)
9
do
10
   CHECK_TID=$(($CHECK_TID + 1))
11
done 
12
#cat /proc/net/iet/volume
13
#echo "RESULTAT : TID disponible est $CHECK_TID"
14

    
15
TODAY=$(date +%Y%m%d%H%M%S)
16
ietadm --op new --tid=$CHECK_TID --params Name=iqn.$TODAY:$(hostname)-ens-zfs-iscsi-$target
17
ietadm --op new --tid=$CHECK_TID --lun=$lun --params Path=$devPath,Type=$exportType,IOMode=$iomode
18
ietadm --op new --tid=$CHECK_TID --user --params=IncomingUser=$login,Password=$passwd
19

    
20
cp /etc/iet/ietd.conf /etc/iet/ietd.conf.$TODAY
21

    
22
echo "" >>/etc/iet/ietd.conf
23
echo "Target iqn.$TODAY:$(hostname)-ens-zfs-iscsi-$target" >> /etc/iet/ietd.conf
24
echo "Lun $lun Path=$devPath,Type=$exportType,IOMode=$iomode" >> /etc/iet/ietd.conf
25
echo "IncomingUser $login $passwd" >>/etc/iet/ietd.conf
26
echo "Alias $target" >> /etc/iet/ietd.conf
27
echo "" >> /etc/iet/ietd.conf
28
echo "" >> /etc/iet/ietd.conf
29

    
30
}
31

    
32
function interactive {
33
#echo "*** Recherche d'un TID disponible ***"
34
CHECK_TID=1
35
while (/bin/grep "tid:$CHECK_TID" /proc/net/iet/volume)
36
do
37
   CHECK_TID=$(($CHECK_TID + 1))
38
done 
39
#cat /proc/net/iet/volume
40
#echo "RESULTAT : TID disponible est $CHECK_TID"
41
echo "*** Nom du volume iscsi : ***" 
42
while read inputline
43
do
44
   NAME_ISCSI=$inputline 
45
   echo "*** Etes-vous sur du nom : $inputline ? (y/n) ***"
46
   
47
   while read inputConfirm
48
   do
49
      if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ]
50
      then
51
         break
52
      fi
53
      echo "*** Etes-vous sur du nom : $inputline ? (y/n) ***" 
54
   done
55

    
56
   if [ "$inputConfirm" = "y" ]
57
   then
58
      break
59
   fi
60
   if [ "$inputConfirm" != "y" ]
61
   then
62
      echo "*** Nom du volume iscsi : ***"
63
   fi
64
done
65

    
66
echo ""
67
echo "*** Etape I : Initialisation du TID et du Nom de volume ISCSI ***"
68
TODAY=$(date +%Y%m%d%H%M%S)
69
ietadm --op new --tid=$CHECK_TID --params Name=iqn.$TODAY:$(hostname)-ens-zfs-iscsi-$NAME_ISCSI
70
if [ $? -eq 0 ]
71
then
72
   echo "*** Path du device zfs (zvol) à exporter : ***"
73
   
74

    
75
   while read -e inputline
76
   do
77
      PATH_ZVOL=$inputline
78
      echo "*** Etes-vous sur du path : $inputline ? (y/n) ***"
79

    
80
      while read inputConfirm
81
      do
82
         if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ]
83
         then
84
            break
85
         fi
86
         echo "*** Etes-vous sur du nom : $inputline ? (y/n) ***"
87
      done
88

    
89
      if [ "$inputConfirm" = "y" ]
90
      then
91
         echo "*** Check si le path zvol existe ...***"
92
         ls -l $PATH_ZVOL
93
         if [ $? -eq 0 ]
94
         then
95
            echo "*** Le path est valide ..."
96
            break
97
         else
98
            echo "*** Le path saisi n'existe pas ...."
99
         fi
100
      fi
101
      if [ "$inputConfirm" != "y" ]
102
      then
103
         echo "*** Path du device zfs (zvol) à exporter : ***"
104
      fi
105
   done
106
  
107
   echo "" 
108
   echo "*** Etape II : initialisation du PATH et du LUN du volume iscsi ***"
109
   if [ $? -eq 0 ]
110
   then
111
     echo "*** Type d'export ISCSI (fileio/blockio) : ***"
112
     
113
     while read inputline
114
     do
115
        TYPE_EXPORT=$inputline
116
        echo "*** Etes-vous sur du type d'export ISCSI : $inputline ? (y/n) ***"
117

    
118
        while read inputConfirm
119
        do
120
           if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ]
121
           then
122
              break
123
           fi
124
           echo "*** Etes-vous sur du du type d'export ISCSI : $inputline ? (y/n) ***"
125
        done
126

    
127
        if [ "$inputConfirm" = "y" ]
128
        then
129
           echo "*** Check si le parametre saisi est valide ...***"
130
           if [ "$TYPE_EXPORT" = "fileio" ]||[ "$TYPE_EXPORT" = "blockio" ]
131
           then
132
              break
133
           else
134
              echo "*** Type d'export ISCSI (fileio/blockio) : ***"
135
           fi
136
        fi
137
        if [ "$inputConfirm" != "y" ]
138
        then
139
           echo "*** Type d'export ISCSI (fileio/blockio) : ***"
140
        fi
141
     done
142

    
143
   echo "" 
144
   echo "*** Etape II.B : initialisation IOMode iscsi ***"
145
     echo "*** IOMode ISCSI (ro/rw) : ***"
146
     
147
     while read inputline
148
     do
149
        iomode=$inputline
150
        echo "*** Etes-vous sur de IOMode  ISCSI : $inputline ? (y/n) ***"
151

    
152
        while read inputConfirm
153
        do
154
           if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ]
155
           then
156
              break
157
           fi
158
           echo "*** Etes-vous sur du de IOMode ISCSI : $inputline ? (y/n) ***"
159
        done
160

    
161
        if [ "$inputConfirm" = "y" ]
162
        then
163
           echo "*** Check si le parametre saisi est valide ...***"
164
           if [ "$iomode" = "ro" ]||[ "$iomode" = "rw" ]
165
           then
166
              break
167
           else
168
              echo "*** IOMode ISCSI (ro/rw) : ***"
169
           fi
170
        fi
171
        if [ "$inputConfirm" != "y" ]
172
        then
173
           echo "*** IOMode ISCSI (ro/rw) : ***"
174
        fi
175
     done
176
     
177
     echo ""
178
     echo "*** Etape III : initialisation du type d'export et de IOMode iscsi ***"
179
     ietadm --op new --tid=$CHECK_TID --lun=0 --params Path=$PATH_ZVOL,Type=$TYPE_EXPORT,IOMode=$iomode
180
     if [ $? -eq 0 ]
181
     then
182

    
183
       echo ""
184
       echo "*** Etape IV : Login et mot de passe ***"
185
       echo "*** Activer une restriction login/password : (y/n)"
186
       while read inputline
187
       do
188
           if [ "$inputline" != "y" ] && [ "$inputline" != "n" ]
189
           then
190
              echo "*** Activer une restriction login/password : (y/n)"
191
           else
192
             if [ "$inputline" = "y" ]
193
             then
194
                 echo "*** Donner un login :"
195
                 while read inputlogin
196
                 do
197
                   if [ "$inputlogin" != "" ]
198
                   then
199
                      break
200
                   else
201
                      echo "*** Donner un login :"
202
                   fi
203
                  done
204

    
205
                  echo "*** Donner un password :"
206
                  while read inputpass
207
                  do
208
                     if [ "$inputpass" = "" ]
209
                     then
210
                        echo "*** Donner un password :"
211
                     else
212
                        break
213
                     fi
214
                  done
215
                  ietadm --op new --tid=$CHECK_TID --user --params=IncomingUser=$inputlogin,Password=$inputpass
216
                  if [ $? -eq 0 ]
217
                  then
218
                    echo "*** Configuration de l'authentification [OK]"
219
       
220
                    echo ""
221
                    echo "*** Etape IV : Ecriture dans le fichier ietd.conf ***"
222
                    echo "*** Sauvegarde du fichier /etc/iet/ietd.conf ..."
223

    
224
                    cp /etc/iet/ietd.conf /etc/iet/ietd.conf.$TODAY
225

    
226
                    echo "" >>/etc/iet/ietd.conf
227
                    echo "Target iqn.$TODAY:$(hostname)-ens-zfs-iscsi-$NAME_ISCSI" >> /etc/iet/ietd.conf
228
                    echo "Lun 0 Path=$PATH_ZVOL,Type=$TYPE_EXPORT,IOMode=$iomode" >> /etc/iet/ietd.conf
229
                    echo "IncomingUser $inputlogin $inputpass" >>/etc/iet/ietd.conf
230
                    echo "Alias $NAME_ISCSI" >> /etc/iet/ietd.conf
231
                    echo "" >> /etc/iet/ietd.conf
232
                    echo "" >> /etc/iet/ietd.conf       
233
    
234
                    echo ""
235
                    echo "*** Ajout de ISCSI $NAME_ISCSI Path:$PATH_ZVOL [OK]"
236
                    echo "*** FIN ***"
237
                 else
238
                    echo "/!\\ Configuration de l'authentification [ERROR] /!\\"
239
                 fi
240
                 break
241
             else
242
                    echo ""
243
                    echo "*** Etape IV : Ecriture dans le fichier ietd.conf ***"
244
                    echo "*** Sauvegarde du fichier /etc/iet/ietd.conf ..."
245

    
246
                    cp /etc/iet/ietd.conf /etc/iet/ietd.conf.$TODAY
247

    
248
                    echo "" >>/etc/iet/ietd.conf
249
                    echo "Target iqn.$TODAY:$(hostname)-ens-zfs-iscsi-$NAME_ISCSI" >> /etc/iet/ietd.conf
250
                    echo "Lun 0 Path=$PATH_ZVOL,Type=$TYPE_EXPORT,IOMode=$iomode" >> /etc/iet/ietd.conf
251
                    echo "IncomingUser $inputlogin $inputpass" >>/etc/iet/ietd.conf
252
                    echo "Alias $NAME_ISCSI" >> /etc/iet/ietd.conf
253
                    echo "" >> /etc/iet/ietd.conf
254
                    echo "" >> /etc/iet/ietd.conf       
255
    
256
                    echo ""
257
                    echo "*** Ajout de ISCSI $NAME_ISCSI Path:$PATH_ZVOL [OK]"
258
                    echo "*** FIN ***"
259
                    break
260
             fi
261
           fi
262
       done
263

    
264
     else
265
       echo "*** Un probleme est survenu lors de l'etape III (initialisation du type d'export iscsi). Operation abandonnée ...***"
266
       ietadm --op delete --tid=$CHECK_TID
267
     fi
268
     
269
   else
270
      echo "*** Un probleme est survenu lors de l'etape II (initialisation du PATH et LUN du volume iscsi). Opération abandonnée ...***"
271
      ietadm --op delete --tid=$CHECK_TID
272
   fi
273

    
274
else
275
   echo "*** Un probleme est survenu lors de l'etape I (initialisation TID et Nom du volume iscsi). Opération abandonnée ...***"
276
   ietadm --op delete --tid=$CHECK_TID
277
fi
278
}
279

    
280
function usage {
281

    
282
echo "syntax : " 1>&2
283
echo "add-iscsi-volume [OPTIONS]" 1>&2
284
echo "" 1>&2
285
echo "OPTIONS :" 1>&2
286
echo "-h : display this message" 1>&2
287
echo "-d : path device to iscsi export" 1>&2
288
echo "-T : export type. Only fileio or blockio" 1>&2
289
echo "-L : lun. Only numeric value." 1>&2
290
echo "-o : IO Mode : ro (Read Only) or rw (Read Write)" 1>&2
291
echo "-l : login if you want a CHAP authentication" 1>&2
292
echo "-p : password if you want a CHAP authentication" 1>&2
293
echo "-R : Specify a list of restricted IP. Separate such IP by a ;" 1>&2
294
echo "-t : name of zfs volume. This field is used to generate alias name iscsi" 1>&2
295
echo "-i : interactive mode. This option is not compatible with others" 1>&2
296

    
297
}
298

    
299
while getopts "id:T:L:o:l:p:R:t:h" OPTION
300
do
301
     case $OPTION in
302
         h)
303
             usage
304
             exit 1
305
             ;;
306
         d)
307
            devPath=$OPTARG
308
            ;;
309
         T)
310
            exportType=$OPTARG
311
            ;;
312
         L)
313
            lun=$OPTARG
314
            ;;
315
         o)
316
            iomode=$OPTARG
317
            ;;
318
         l)
319
            login=$OPTARG
320
            ;;
321
         p)
322
            passwd=$OPTARG
323
            ;;
324
         R)
325
            restricted=$OPTARG
326
            ;;
327
         t)
328
            target=$OPTARG
329
            target=$(echo ${target/\//-})
330
            ;;
331
         i)
332
            interactive
333
            exit 0
334
            ;;
335
     esac
336
done
337
if [[ -z $devPath ]] || [[ -z $exportType ]] || [[ -z $lun ]] || [[ -z $iomode ]] || [[ -z $target ]]
338
then
339
     usage
340
     exit 1
341
fi
342

    
343
automatic
344