| @@ -0,0 +1,90 @@ | |||
| #!/usr/bin/bash | |||
| if [ "$#" -ne 2 ]; then | |||
| echo "Illegal number of parameters" | |||
| echo "Usage: $0 {UUID} {DESTINYNODE}" | |||
| exit 1 | |||
| fi | |||
| UUID=$1 | |||
| NODODESTINO=$2 | |||
| KEYFILE="/usbkey/ssh/id_rsa" | |||
| DESTINYPORT="2221" | |||
| SSH="ssh -i $KEYFILE -p $DESTINYPORT" | |||
| SCP="scp -P $DESTINYPORT -i $KEYFILE" | |||
| CFG="/zones/tools/cfg" | |||
| BRAND=`/usr/sbin/vmadm get ${UUID} | json brand | tr -d '\n'` | |||
| ZONEPATH=`vmadm get ${UUID} | json zonepath | tr -d '\n' | sed 's/\///'` | |||
| # chequeamos la existencia del archivo llave | |||
| if [ ! -f $KEYFILE ]; then | |||
| echo "ssh $KEYFILE inexistent!" | |||
| echo "Create it please" | |||
| exit 1 | |||
| fi | |||
| snapshot() | |||
| { | |||
| zfs snapshot $1@`date +%Y%m%d` | |||
| zfs send $1@`date +%Y%m%d` | $SSH $NODODESTINO zfs receive $1 | |||
| zfs snapshot $1@`date +%Y%m%d`.incremental | |||
| zfs send -i $1@`date +%Y%m%d` $1@`date +%Y%m%d`.incremental | $SSH $NODODESTINO zfs receive $1 | |||
| } | |||
| # capturamos el alias que vmadm usa en base64 y que da problemas con el mitico zonecfg | |||
| ALIAS=`vmadm get ${UUID} | json alias | tr -d '\n'` | |||
| zonecfg -z ${UUID} "select attr name=alias; set value=temporal; end" | |||
| # creamos snapshot, lo enviamos, creamos incremental y la enviamos | |||
| snapshot ${ZONEPATH} | |||
| # verificamos si estamos tratando con una kvm y si es asi la respaldamos | |||
| echo "verificamos filesystems (kvm) adicionales..." | |||
| if [ $BRAND = "kvm" ]; then | |||
| FILESYSTEM=`vmadm get ${UUID} | json disks.0.zfs_filesystem | tr -d '\n'` | |||
| snapshot ${FILESYSTEM} | |||
| fi | |||
| # verificamos si tenemos datasets adicionales y los enviamos | |||
| echo "verificamos datasets adicionales..." | |||
| DATASET=`vmadm get ${UUID} | json datasets.0 | tr -d '\n'` | |||
| if [ -n "${DATASET}" ]; then | |||
| snapshot ${DATASET} | |||
| fi | |||
| # exportamos configuracion | |||
| echo "exportamos configuracion..." | |||
| zonecfg -z ${UUID} export > $CFG/${UUID}.cfg | |||
| $SCP $CFG/${UUID}.cfg $NODODESTINO:$CFG/${UUID}.cfg | |||
| # destino | |||
| echo "enviamos config a destino..." | |||
| $SSH $NODODESTINO zonecfg -z ${UUID} < $CFG/${UUID}.cfg | |||
| $SSH $NODODESTINO zoneadm -z ${UUID} attach | |||
| $SSH $NODODESTINO zoneadm -z ${UUID} halt | |||
| # reestablecemos el alias que usa vmadm | |||
| $SSH $NODODESTINO vmadm update ${UUID} alias=${ALIAS} | |||
| vmadm update ${UUID} alias=${ALIAS} | |||
| # detenemos la zona en local | |||
| zoneadm -z ${UUID} halt | |||
| # iniciamos la zona en remoto | |||
| $SSH $NODODESTINO zoneadm -z ${UUID} boot | |||
| # TODO: | |||
| # - puede haber mas de un FILESYSTEM en la zona, necesitamos iterar por el array y lanzar la funcion snapshot sobre cada uno de ellos | |||
| # - puede haber mas de un DATASET en la zona, necesitamos iterar por el array y lanzar la funcion snapshot sobre cada uno | |||