|
- #!/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 -u $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 $?
- }
-
- # mostramos mac a exporar por VXLAN
- echo "mostramos mac e ips a exportar via VXLAN..."
- vmadm get ${UUID} | json nics.0.ips nics.0.mac
-
- # 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 y enviamos a destino..."
-
- zonecfg -z ${UUID} export | $SSH $SERVER "zonecfg -z ${UUID}"
-
- # modificamos de acuerdo a la config de datacenter remoto
- echo "modificamos config de acuerdo a datacenter remoto..."
-
- echo "
- select net physical=eth0
- clear vlan-id
- set global-nic=v/100
- add property (name=mtu,value="1200")
- remove property (name=gateway,value="194.53.148.1")
- remove property (name=gateways,value="194.53.148.1")
- add property (name=gateway,value="194.53.148.2")
- add property (name=gateways,value="194.53.148.2")
- end" | $SSH $SERVER "zonecfg -z ${UUID}"
-
- # montamos el dataset
-
- $SSH $SERVER zfs mount ${ZONEPATH}
-
- # instalamos
-
- $SSH $SERVER zoneadm -z ${UUID} attach
-
- # detenemos la zona en local
-
- zoneadm -z ${UUID} halt
-
- # actualizamos la zona en local para que no inicie
-
- vmadm udpate ${UUID} autoboot=false
-
- # 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
|