From 51ae92b3d90f4bf0c04d29739fb0d487821ad3f2 Mon Sep 17 00:00:00 2001 From: Pablo Sarria Date: Wed, 9 Jan 2019 19:48:51 +0100 Subject: [PATCH] =?UTF-8?q?a=C3=B1ado=20el=20zonemigrate.sh=20al=20repo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zonemigrate.sh | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 zonemigrate.sh diff --git a/zonemigrate.sh b/zonemigrate.sh new file mode 100644 index 0000000..f566869 --- /dev/null +++ b/zonemigrate.sh @@ -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