Statistiques
| Révision :

root / bin / enable-replica @ 40

Historique | Voir | Annoter | Télécharger (6,37 ko)

1
#!/bin/bash
2
# $Id: enable-replica 40 2013-10-08 14:37:55Z ltaulell $
3

    
4
DIR_CONF_REPLICA="/opt/gZFS/replicas/"
5
DIR_CRON="/etc/cron.d/"
6
BIN_ZFS_REPLICA="/sbin/zfs-replica"
7

    
8
# TODO: traduire les msg
9

    
10
function usage {
11
  echo "USAGE :"
12
  echo "$0 -o volume_fs_to_replicate -r volume_fs_destination -n number_replicas_to_keep -m minute_cron -H hour_cron -D Day_of_Month_cron -M month_cron -d day_of_week_cron [-s server destination]" 1>&2
13
  echo "or" 1>&2
14
  echo "$0 -i : for a interactive mode" 1>&2
15
  echo "" 1>&2
16
  echo "OPTIONS : " 1>&2
17
  echo "  -o : origin volume or a filesystem to replicate" 1>&2
18
  echo "  -r : volume or filesystem replicated" 1>&2
19
  echo "  -n : number replicas to keep" 1>&2
20
  echo "  -s : if replica destination is on another zfs server, you need to specify this option with the name of server." 1>&2
21
  echo "      Warning ! Remote replication use ssh. So please, generate a ssh private/public key and the public key in /root/.ssh/authorized_key" 1>&2
22
  echo "      on remote server" 1>&2
23
  echo "  -m : minute field for cron replication" 1>&2
24
  echo "  -H : hour field for cron replication" 1>&2
25
  echo "  -D : Day of Month field for cron replication" 1>&2
26
  echo "  -M : Month field for cron replication" 1>&2
27
  echo "  -d : Day of week for cron replication" 1>&2
28
  echo "  -h : display this message"
29

    
30
}
31

    
32
function checkField4Cron {
33
  if [[ $OPTARG =~ [a-zA-Z] ]]
34
  then
35
     echo "-$OPTION contain a bad value" 1>&2
36
     exit 1
37
  fi
38
}
39

    
40
function createCronFile4Snapshot {
41
FILE_NAME=$(echo "replica-"${volfs//\//-})
42
echo "$MINUTE $HOUR $MONTH $DAYMONTH $DAYWEEK root $BIN_ZFS_REPLICA $DIR_CONF_REPLICA$FILE_NAME.conf" > $DIR_CRON$FILE_NAME
43
}
44

    
45
function interactive {
46
zfs list
47
echo "*** Choix du volume pour l'activation de la replication : ***" 
48

    
49
while read inputline
50
do
51
   volfs=$inputline
52
   if [ "$volfs" = "" ]
53
   then
54
      echo "*** Choix du volume pour l'activation de la replication : ***" 
55
   else
56

    
57
      echo "*** Etes-vous sur du nom : $inputline ? (y/n) ***"
58

    
59

    
60
      while read inputConfirm
61
      do
62
        if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ]
63
         then
64
            break
65
         fi
66
         echo "*** Etes-vous sur du nom : $inputline ? (y/n) ***"
67
      done
68
      if [ "$inputConfirm" = "y" ]
69
      then
70
         zfs list $volfs
71
         if [ $? -eq 0 ]
72
         then
73
            echo "*** Le volume saisi $volfs existe ***"
74
            break
75
         else
76
            echo "*** Le volume saisi $volfs n'existe pas ***"    
77
            echo "*** Choix du volume pour l'activation de la replication : ***"
78
         fi
79
      fi
80
      if [ "$inputConfirm" != "y" ]
81
      then
82
         echo "*** Choix du volume pour l'activation de la replication : ***"
83
      fi
84
   fi
85
done
86

    
87
echo "*** Nom du replica (syntax pool_name/replica_name, exemple zpfront/monvolume) ***" 
88
echo "*** /!\ Le programme ne verifiera pas la validite de votre saisie /!\***" 
89
while read inputline
90
do
91
   volfsdestination=$inputline
92
   if [ "$volfsdestination" = "" ]
93
   then
94
      echo "*** Nom du replica (syntax pool_name/replica_name, exemple zpfront/monvolume) ***" 
95
      echo "*** /!\ Le programme ne verifiera pas la validite de votre saisie /!\***" 
96
   else
97

    
98
      echo "*** Etes-vous sur du nom du replica: $inputline ? (y/n) ***"
99

    
100

    
101
      while read inputConfirm
102
      do
103
        if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ]
104
         then
105
            break
106
         fi
107
         echo "*** Etes-vous sur du nom : $inputline ? (y/n) ***"
108
      done
109
      if [ "$inputConfirm" != "y" ]
110
      then
111
         echo "*** Nom du replica (syntax pool_name/replica_name, exemple zpfront/monvolume) ***" 
112
         echo "*** /!\ Le programme ne verifiera pas la validite de votre saisie /!\***" 
113
      else
114
        break
115
      fi
116
   fi
117
done
118

    
119
echo "*** La replica est-elle sur un serveur distant (y/n)?"
120
while read inputConfirm
121
do
122
   if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ]
123
   then
124
      break
125
   fi
126
   echo "*** Etes-vous sur du nom : $inputline ? (y/n) ***"
127
done
128
if [ "$inputConfirm" = "y" ]
129
then
130
   echo "*** Saisir le nom du server : "
131
   while read inputserver
132
   do
133
      if [ "$inputserver" != "" ]
134
      then
135
         server=$inputserver
136
         break
137
      fi
138
      echo "*** Saisir le nom du server : "
139
   done
140
else
141
   server=""
142
fi
143
   
144
echo "*** Nombre de replica a garder : ***"
145
while read inputline
146
do
147
   nbreplica=$inputline
148
   if [ "$nbreplica" = "" ]
149
   then
150
     echo "*** Nombre de snapshot a garder : ***"
151
   else
152
     echo "*** Creation du fichier de configuration ***"
153
     FILE_NAME=$(echo "replica-"${volfs//\//-})
154
     >$DIR_CONF_REPLICA$FILE_NAME.conf
155
      echo "name=$volfs" >> $DIR_CONF_REPLICA$FILE_NAME.conf
156
      echo "namereplica=$volfsdestination-replica">> $DIR_CONF_REPLICA$FILE_NAME.conf
157
      echo "nbreplica=$nbreplica" >> $DIR_CONF_REPLICA$FILE_NAME.conf
158
      echo "lastsnapshotreplicated=" >> $DIR_CONF_REPLICA$FILE_NAME.conf
159
      echo "server=$server">> $DIR_CONF_REPLICA$FILE_NAME.conf
160
     break
161
   fi
162
done
163

    
164
}
165

    
166

    
167

    
168
function nointeractive {
169
  FILE_NAME=$(echo "replica-"${volfs//\//-})
170
  >$DIR_CONF_REPLICA$FILE_NAME.conf
171
  echo "name=$volfs" >> $DIR_CONF_REPLICA$FILE_NAME.conf
172
  echo "namereplica=$volfsdestination-replica">> $DIR_CONF_REPLICA$FILE_NAME.conf
173
  echo "nbreplica=$nbreplica" >> $DIR_CONF_REPLICA$FILE_NAME.conf
174
  echo "lastsnapshotreplicated=" >> $DIR_CONF_REPLICA$FILE_NAME.conf
175
  echo "server=$server">> $DIR_CONF_REPLICA$FILE_NAME.conf
176
}
177

    
178

    
179
while getopts "is:r:o:n:m:H::D:M:d:h" OPTION
180
do
181
     case $OPTION in
182
         h)
183
             usage
184
             exit 1
185
             ;;
186
         r)
187
            volfsdestination=$OPTARG
188
            ;;
189
         o)
190
            volfs=$OPTARG
191
            ;;
192
         n)
193
            nbreplica=$OPTARG
194
            ;;
195
         s)
196
            server=$OPTARG
197
            ;;
198
         m)
199
            checkField4Cron
200
            MINUTE=$OPTARG
201
            ;;
202
         H)
203
            checkField4Cron
204
            HOUR=$OPTARG
205
            ;;
206
         D)
207
            checkField4Cron
208
            DAYMONTH=$OPTARG
209
            ;;
210
         M)
211
            checkField4Cron
212
            MONTH=$OPTARG
213
            ;;
214
         d)
215
            checkField4Cron
216
            DAYWEEK=$OPTARG
217
            ;;
218
         i)
219
            interactive
220
            exit 0
221
            ;;
222
     esac
223
done
224
if [[ -z $volfsdestination ]] || [[ -z $volfs ]] || [[ -z $nbreplica ]] || [[ -z $MINUTE ]] || [[ -z $HOUR ]] || [[ -z $DAYMONTH ]] || [[ -z $MONTH ]] || [[ -z $DAYWEEK ]] 
225
then
226
     usage
227
     exit 1
228
fi
229

    
230
nointeractive
231
createCronFile4Snapshot
232

    
233
/etc/init.d/cron restart