Statistiques
| Révision :

root / bin / enable-replica @ 39

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

1
#!/bin/bash
2
# $Id: enable-replica 39 2013-10-08 12:46:21Z ltaulell $
3

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

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

    
28
}
29

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

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

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

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

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

    
57

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

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

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

    
98

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

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

    
162
}
163

    
164

    
165

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

    
176

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

    
228
nointeractive
229
createCronFile4Snapshot
230

    
231
/etc/init.d/cron restart