#!/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