Statistiques
| Révision :

root / bin / enable-replica @ 30

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

1 1 kreverch
#!/bin/bash
2 1 kreverch
3 1 kreverch
DIR_CONF_REPLICA="/opt/gZFS/replicas/"
4 1 kreverch
DIR_CRON="/etc/cron.d/"
5 1 kreverch
BIN_ZFS_REPLICA="/sbin/zfs-replica"
6 1 kreverch
7 1 kreverch
function usage {
8 1 kreverch
  echo "USAGE :"
9 1 kreverch
  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
10 1 kreverch
  echo "or" 1>&2
11 1 kreverch
  echo "$0 -i : for a interactive mode" 1>&2
12 1 kreverch
  echo "" 1>&2
13 1 kreverch
  echo "OPTIONS : " 1>&2
14 1 kreverch
  echo "  -o : origin volume or a filesystem to replicate" 1>&2
15 1 kreverch
  echo "  -r : volume or filesystem replicated" 1>&2
16 1 kreverch
  echo "  -n : number replicas to keep" 1>&2
17 1 kreverch
  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
18 1 kreverch
  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
19 1 kreverch
  echo "      on the remote server" 1>&2
20 1 kreverch
  echo "  -m : minute field for cron replication" 1>&2
21 1 kreverch
  echo "  -H : hour field for cron replication" 1>&2
22 1 kreverch
  echo "  -D : Day of Month field for cron replication" 1>&2
23 1 kreverch
  echo "  -M : Month field for cron replication" 1>&2
24 1 kreverch
  echo "  -d : Day of week for cron replication" 1>&2
25 1 kreverch
  echo "  -h : display this message"
26 1 kreverch
27 1 kreverch
}
28 1 kreverch
29 1 kreverch
function checkField4Cron {
30 1 kreverch
  if [[ $OPTARG =~ [a-zA-Z] ]]
31 1 kreverch
  then
32 1 kreverch
     echo "-$OPTION contain a bad value" 1>&2
33 1 kreverch
     exit 1
34 1 kreverch
  fi
35 1 kreverch
}
36 1 kreverch
37 1 kreverch
function createCronFile4Snapshot {
38 20 ltaulell
FILE_NAME=$(echo "replica-"${volfs//\//-})
39 1 kreverch
echo "$MINUTE $HOUR $MONTH $DAYMONTH $DAYWEEK root $BIN_ZFS_REPLICA $DIR_CONF_REPLICA$FILE_NAME.conf" > $DIR_CRON$FILE_NAME
40 1 kreverch
}
41 1 kreverch
42 1 kreverch
function interactive {
43 1 kreverch
zfs list
44 1 kreverch
echo "*** Choix du volume pour l'activation de la replication : ***"
45 1 kreverch
46 1 kreverch
while read inputline
47 1 kreverch
do
48 1 kreverch
   volfs=$inputline
49 1 kreverch
   if [ "$volfs" = "" ]
50 1 kreverch
   then
51 1 kreverch
      echo "*** Choix du volume pour l'activation de la replication : ***"
52 1 kreverch
   else
53 1 kreverch
54 1 kreverch
      echo "*** Etes-vous sur du nom : $inputline ? (y/n) ***"
55 1 kreverch
56 1 kreverch
57 1 kreverch
      while read inputConfirm
58 1 kreverch
      do
59 1 kreverch
        if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ]
60 1 kreverch
         then
61 1 kreverch
            break
62 1 kreverch
         fi
63 1 kreverch
         echo "*** Etes-vous sur du nom : $inputline ? (y/n) ***"
64 1 kreverch
      done
65 1 kreverch
      if [ "$inputConfirm" = "y" ]
66 1 kreverch
      then
67 1 kreverch
         zfs list $volfs
68 1 kreverch
         if [ $? -eq 0 ]
69 1 kreverch
         then
70 1 kreverch
            echo "*** Le volume saisi $volfs existe ***"
71 1 kreverch
            break
72 1 kreverch
         else
73 1 kreverch
            echo "*** Le volume saisi $volfs n'existe pas ***"
74 1 kreverch
            echo "*** Choix du volume pour l'activation de la replication : ***"
75 1 kreverch
         fi
76 1 kreverch
      fi
77 1 kreverch
      if [ "$inputConfirm" != "y" ]
78 1 kreverch
      then
79 1 kreverch
         echo "*** Choix du volume pour l'activation de la replication : ***"
80 1 kreverch
      fi
81 1 kreverch
   fi
82 1 kreverch
done
83 1 kreverch
84 3 kreverch
echo "*** Nom du replica (syntax pool_name/replica_name, exemple zpfront/monvolume) ***"
85 3 kreverch
echo "*** /!\ Le programme ne verifiera pas la validite de votre saisie /!\***"
86 1 kreverch
while read inputline
87 1 kreverch
do
88 1 kreverch
   volfsdestination=$inputline
89 1 kreverch
   if [ "$volfsdestination" = "" ]
90 1 kreverch
   then
91 1 kreverch
      echo "*** Nom du replica (syntax pool_name/replica_name, exemple zpfront/monvolume) ***"
92 1 kreverch
      echo "*** /!\ Le programme ne verifiera pas la validite de votre saisie /!\***"
93 1 kreverch
   else
94 1 kreverch
95 1 kreverch
      echo "*** Etes-vous sur du nom du replica: $inputline ? (y/n) ***"
96 1 kreverch
97 1 kreverch
98 1 kreverch
      while read inputConfirm
99 1 kreverch
      do
100 1 kreverch
        if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ]
101 1 kreverch
         then
102 1 kreverch
            break
103 1 kreverch
         fi
104 1 kreverch
         echo "*** Etes-vous sur du nom : $inputline ? (y/n) ***"
105 1 kreverch
      done
106 1 kreverch
      if [ "$inputConfirm" != "y" ]
107 1 kreverch
      then
108 1 kreverch
         echo "*** Nom du replica (syntax pool_name/replica_name, exemple zpfront/monvolume) ***"
109 1 kreverch
         echo "*** /!\ Le programme ne verifiera pas la validite de votre saisie /!\***"
110 1 kreverch
      else
111 1 kreverch
        break
112 1 kreverch
      fi
113 1 kreverch
   fi
114 1 kreverch
done
115 1 kreverch
116 3 kreverch
echo "*** La replica est-elle sur un serveur distant (y/n)?"
117 1 kreverch
while read inputConfirm
118 1 kreverch
do
119 1 kreverch
   if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ]
120 1 kreverch
   then
121 1 kreverch
      break
122 1 kreverch
   fi
123 1 kreverch
   echo "*** Etes-vous sur du nom : $inputline ? (y/n) ***"
124 1 kreverch
done
125 1 kreverch
if [ "$inputConfirm" = "y" ]
126 1 kreverch
then
127 1 kreverch
   echo "*** Saisir le nom du server : "
128 1 kreverch
   while read inputserver
129 1 kreverch
   do
130 1 kreverch
      if [ "$inputserver" != "" ]
131 1 kreverch
      then
132 1 kreverch
         server=$inputserver
133 1 kreverch
         break
134 1 kreverch
      fi
135 1 kreverch
      echo "*** Saisir le nom du server : "
136 1 kreverch
   done
137 1 kreverch
else
138 1 kreverch
   server=""
139 1 kreverch
fi
140 1 kreverch
141 1 kreverch
echo "*** Nombre de replica a garder : ***"
142 1 kreverch
while read inputline
143 1 kreverch
do
144 1 kreverch
   nbreplica=$inputline
145 3 kreverch
   if [ "$nbreplica" = "" ]
146 1 kreverch
   then
147 1 kreverch
     echo "*** Nombre de snapshot a garder : ***"
148 1 kreverch
   else
149 1 kreverch
     echo "*** Creation du fichier de configuration ***"
150 20 ltaulell
     FILE_NAME=$(echo "replica-"${volfs//\//-})
151 1 kreverch
     >$DIR_CONF_REPLICA$FILE_NAME.conf
152 3 kreverch
      echo "name=$volfs" >> $DIR_CONF_REPLICA$FILE_NAME.conf
153 3 kreverch
      echo "namereplica=$volfsdestination-replica">> $DIR_CONF_REPLICA$FILE_NAME.conf
154 3 kreverch
      echo "nbreplica=$nbreplica" >> $DIR_CONF_REPLICA$FILE_NAME.conf
155 5 kreverch
      echo "lastsnapshotreplicated=" >> $DIR_CONF_REPLICA$FILE_NAME.conf
156 3 kreverch
      echo "server=$server">> $DIR_CONF_REPLICA$FILE_NAME.conf
157 1 kreverch
     break
158 1 kreverch
   fi
159 1 kreverch
done
160 1 kreverch
161 1 kreverch
}
162 1 kreverch
163 1 kreverch
164 1 kreverch
165 1 kreverch
function nointeractive {
166 20 ltaulell
  FILE_NAME=$(echo "replica-"${volfs//\//-})
167 1 kreverch
  >$DIR_CONF_REPLICA$FILE_NAME.conf
168 1 kreverch
  echo "name=$volfs" >> $DIR_CONF_REPLICA$FILE_NAME.conf
169 1 kreverch
  echo "namereplica=$volfsdestination-replica">> $DIR_CONF_REPLICA$FILE_NAME.conf
170 1 kreverch
  echo "nbreplica=$nbreplica" >> $DIR_CONF_REPLICA$FILE_NAME.conf
171 5 kreverch
  echo "lastsnapshotreplicated=" >> $DIR_CONF_REPLICA$FILE_NAME.conf
172 1 kreverch
  echo "server=$server">> $DIR_CONF_REPLICA$FILE_NAME.conf
173 1 kreverch
}
174 1 kreverch
175 1 kreverch
176 1 kreverch
while getopts "is:r:o:n:m:H::D:M:d:h" OPTION
177 1 kreverch
do
178 1 kreverch
     case $OPTION in
179 1 kreverch
         h)
180 1 kreverch
             usage
181 1 kreverch
             exit 1
182 1 kreverch
             ;;
183 1 kreverch
         r)
184 1 kreverch
            volfsdestination=$OPTARG
185 1 kreverch
            ;;
186 1 kreverch
         o)
187 1 kreverch
            volfs=$OPTARG
188 1 kreverch
            ;;
189 1 kreverch
         n)
190 1 kreverch
            nbreplica=$OPTARG
191 1 kreverch
            ;;
192 1 kreverch
         s)
193 1 kreverch
            server=$OPTARG
194 1 kreverch
            ;;
195 1 kreverch
         m)
196 1 kreverch
            checkField4Cron
197 1 kreverch
            MINUTE=$OPTARG
198 1 kreverch
            ;;
199 1 kreverch
         H)
200 1 kreverch
            checkField4Cron
201 1 kreverch
            HOUR=$OPTARG
202 1 kreverch
            ;;
203 1 kreverch
         D)
204 1 kreverch
            checkField4Cron
205 1 kreverch
            DAYMONTH=$OPTARG
206 1 kreverch
            ;;
207 1 kreverch
         M)
208 1 kreverch
            checkField4Cron
209 1 kreverch
            MONTH=$OPTARG
210 1 kreverch
            ;;
211 1 kreverch
         d)
212 1 kreverch
            checkField4Cron
213 1 kreverch
            DAYWEEK=$OPTARG
214 1 kreverch
            ;;
215 1 kreverch
         i)
216 1 kreverch
            interactive
217 1 kreverch
            exit 0
218 1 kreverch
            ;;
219 1 kreverch
     esac
220 1 kreverch
done
221 1 kreverch
if [[ -z $volfsdestination ]] || [[ -z $volfs ]] || [[ -z $nbreplica ]] || [[ -z $MINUTE ]] || [[ -z $HOUR ]] || [[ -z $DAYMONTH ]] || [[ -z $MONTH ]] || [[ -z $DAYWEEK ]]
222 1 kreverch
then
223 1 kreverch
     usage
224 1 kreverch
     exit 1
225 1 kreverch
fi
226 1 kreverch
227 1 kreverch
nointeractive
228 1 kreverch
createCronFile4Snapshot
229 1 kreverch
230 1 kreverch
/etc/init.d/cron restart