- #!/bin/bash
-
- usage()
- {
- echo "Usage: $0 [ -n NODE ] [ -z UUID ] [ -h hostname ] [ -p port ] [ -k KEY ] [ -d dir ] [ -u user ]" >&2
- exit 1
- }
-
- while getopts "n:z:h:p:k:d:u:" opt;
- do
- case "$opt" in
- n)
- NODE=$OPTARG
- ;;
- z)
- UUID=$OPTARG
- ;;
- h)
- HOSTNAME=$OPTARG
- ;;
- p)
- PORT=$OPTARG
- ;;
- k)
- KEY=$OPTARG
- ;;
- d)
- DIR=$OPTARG
- ;;
- u)
- USER=$OPTARG
- ;;
- \?)
- echo "Error: Invalid Option: -${OPTARG}" >&2
- usage
- ;;
- :)
- echo "Error: -${OPTARG} requires an argument."
- usage
- ;;
- *)
- usage
- ;;
- esac
- done
-
- shift $((OPTIND-1))
-
- if [ -z "${UUID}" ] || [ -z "${NODE}" ] || [ -z ${HOSTNAME} ] || [ -z ${PORT} ] || [ -z ${KEY} ] || [ -z "${DIR}" ] || [ -z "${USER}" ]; then
- usage
- fi
-
- SSH="ssh -i $KEY -p ${PORT} -l ${USER} -o StrictHostKeyChecking=no"
- SCP="scp -q -i $KEY -P ${PORT} -o StrictHostKeyChecking=no"
- DSTDIR="${DIR}/${UUID}"
-
- #################
- # functions
- #################
-
- check_err()
- {
- STATUS=$?
- if [ ${STATUS} -ne 0 ]; then
- echo "Unexpected error: ${STATUS}"
- exit ${STATUS}
- fi
- }
-
- remove_vps()
- {
- VPS=$1
- echo "Deleteing VPS ${VPS}..."
- vmadm destroy ${VPS}
- check_err
- echo "...done."
- }
-
- recover_dataset()
- {
- VPS=$1
- echo "Recovering VPS ${VPS}..."
- ${SSH} ${HOSTNAME} "dd if=${DIR}/${NODE}/${VPS}/${VPS}.zfs bs=4M" | /usr/sbin/zfs receive zones/${VPS}
- check_err
- echo "...done."
- }
-
- recover_config()
- {
- VPS=$1
- echo "Recovering config from backup..."
- ${SCP} ${USER}@${HOSTNAME}:${DIR}/${NODE}/${VPS}/${VPS}.cfg /zones/tools/descargas/
- cat /zones/tools/descargas/${VPS}.cfg | zonecfg -z ${VPS}
-
- check_err
- echo "...done."
- }
-
- final_steps()
- {
- VPS=$1
- echo "Attaching dataset..."
- zoneadm -z ${VPS} attach
- check_err
- echo "...done."
- echo "Booting VPS..."
- zoneadm -z ${VPS} boot
- check_err
- echo "...done."
- }
-
- #################
- # main
- #################
-
- echo "---
- BACKUP_SERVER: ${HOSTNAME}
- UUID to restore: ${UUID}
- ---"
-
- remove_vps ${UUID}
-
- recover_config ${UUID}
-
- recover_dataset ${UUID}
-
- final_steps ${UUID}
|