|
- #!/usr/bin/bash
-
- usage()
- {
- echo "Usage: $0 -z UUID -h hostname" >&2
- exit 1
- }
-
- while getopts "z:h:" opt;
- do
- case "$opt" in
- z)
- UUID=$OPTARG
- ;;
- h)
- SERVER=$OPTARG
- ;;
- *)
- usage
- ;;
- esac
- done
-
- shift $((OPTIND-1))
-
- if [ -z "${UUID}" ] || [ -z "${SERVER}" ]; then
- usage
- fi
-
- 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
-
- check()
- {
- if [ $1 != 0 ]; then
- echo "exiting ... $1"
- exit $1
- else echo "done."
- fi
- }
-
- snapshot()
- {
- echo "creando snapshot de $1 ..."
- zfs snapshot $1@`date +%Y%m%d`
- check $?
- echo "enviando snapshot de $1 a $SERVER ..."
- zfs send $1@`date +%Y%m%d` | $SSH $SERVER zfs receive $1
- check $?
- echo "creando snapshot incremental de $1 ..."
- zfs snapshot $1@`date +%Y%m%d`.incremental
- check $?
- echo "enviando snapshot incremental de $1 a $SERVER ..."
- zfs send -i $1@`date +%Y%m%d` $1@`date +%Y%m%d`.incremental | $SSH $SERVER zfs receive $1
- check $?
- }
-
- # 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 bhyve/kvm y si es asi la respaldamos
- echo "verificamos filesystems (bhyve|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 $SERVER:$CFG/${UUID}.cfg
-
- # destino
- echo "enviamos config a destino..."
-
- $SSH $SERVER zonecfg -z ${UUID} < $CFG/${UUID}.cfg
- $SSH $SERVER zoneadm -z ${UUID} attach
- $SSH $SERVER zoneadm -z ${UUID} halt
-
- # reestablecemos el alias que usa vmadm
-
- $SSH $SERVER 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 $SERVER 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
|