|
- #!/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" ] || [ $BRAND = "bhyve" ] ; 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
|