|
|
|
@@ -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 |