#!/bin/sh
#	$Id: vm_backup.sh,v 1.1 2007/05/21 17:49:02 sfrancis Exp $

###############
# vm_backup.sh: use tar/vcbMounter to make backups of VMs
# must be run from a machine that has filers NFS mounted as root
# requires key-based SSH root access to ESX hosts 
###############
# $SSH: path to ssh; some systems may have it elsewhere than /usr/bin/ssh
# $SSH_OPTS: this is where the private half of the root access keypair is
#            specified; other options (e.g. compression) could go here too
# $BKDIR: path to backup dir on the machine this script runs on
# $BKPATH: path to backups from perspective of ESX hosts
# $BKLIST: textfile(s) with colon-delimited FQDN & cluster of each VM
#          e.g.: paz02adm901.admin.inf:2
#                paz02htp451.admin.inf:1
#                paz02app825.sites.homestore.net:4
# $LOG: logfile(s) for timestamps and output from backup operations
###############
# run with the following cronjobs (3 clusters in parallel):
# 40 23 * * 0-4 /usr/local/bin/vm_backup.sh c1
# 41 23 * * 0-4 /usr/local/bin/vm_backup.sh c2
# 42 23 * * 0-4 /usr/local/bin/vm_backup.sh c4
###############

[ `id -u` = 0 ] || { echo "got root?" ; exit 1 ; }

[ $1 ] || { echo "usage: $0 [c1|c2|c4]" ; exit 1 ; }

CLUSTER=$1

DATE=`/bin/date +%Y%m%d`
TIME=`/bin/date +%H:%M:%S`
WEEKDAY=`/bin/date +%a`
SSH=/usr/bin/ssh
SSH_OPTS="-i /root/.ssh/id_dsa.vi3"
BKDIR=/mnt/paz02dsd945/vol3/nfs-phx-vmx-data-02/backups
BKLIST=$BKDIR/bklist.$CLUSTER.$WEEKDAY
BKPATH=/vmfs/volumes/nfs-phx-vmx-data-02/backups/
LOG=$BKDIR/logs/bklog-$DATE-$CLUSTER.txt

echo "############################################################" >>$LOG
echo "# backups for $WEEKDAY $DATE cluster $CLUSTER starting at $TIME #" >>$LOG
echo "############################################################" >>$LOG

case $CLUSTER in
"c1")
  ESXHOST=paz02vmx1075.admin.inf
  ;;

"c2")
  ESXHOST=paz02vmx2039.admin.inf
  ;;

"c4")
  ESXHOST=paz02vmx1078.admin.inf
  ;;
esac

for VM in `grep -v '^#' $BKLIST | awk -F: '{print $1}'`
do
  echo -n "backing up VM $VM in $CLUSTER at `/bin/date +%H:%M:%S` ... " >>$LOG
  echo >>$LOG
  $SSH $SSH_OPTS $ESXHOST \
   "/usr/sbin/vcbMounter -a ipaddr:$VM -r $BKPATH/$CLUSTER/$VM -t fullvm -L 6 \
    && tar czf $BKPATH/$CLUSTER/$VM.tgz $BKPATH/$CLUSTER/$VM/ >>$LOG \
    && rm -rf $BKPATH/$CLUSTER/$VM/" 2>&1 >>$LOG \
  && echo "done." >>$LOG || echo "$VM backup FAILED - see $LOG"
done

echo "############################################################" >>$LOG
echo "# backups for $WEEKDAY $DATE cluster $CLUSTER complete at `/bin/date +%H:%M:%S` #" >>$LOG
echo "############################################################" >>$LOG

echo >>$LOG
echo -n "removing files > 7 days old ... " >>$LOG \
 && find $BKDIR -type f -name '*.tgz' -mtime +7 | xargs rm \
 && echo "done." >>$LOG || echo "file removal FAILED! - see $LOG"

exit 0
