Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 80 additions & 0 deletions backup-virsh/backup-virsh.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
#!/bin/bash

#
# Name: backup-virsh.sh
# Author: justinas@eofnet.lt
# Description: Backups virsh xml machines on target host, It will copy to Elkarbackup only the modified xml files.
# Use: JOB level -> Pre-Script
#

URL=`echo $ELKARBACKUP_URL | cut -d ":" -f1` # user@serverip
USER="${URL%@*}" # user
HOST="${URL#*@}" # host
DIR=`echo $ELKARBACKUP_URL | cut -d ":" -f2` # path
TMP=/tmp/ebvirshbackup

SSHPARAMS="-i /var/lib/elkarbackup/.ssh/id_rsa -o StrictHostKeyChecking=no $ELKARBACKUP_SSH_ARGS"

TEST=`ssh $SSHPARAMS $USER@$HOST "test -f /usr/bin/virsh && echo $?"`

if [ ! ${TEST} ]; then
echo "[ERROR] virsh binary doesn't exist /usr/bin/virsh on target machine"
exit 1
fi

if [ "$ELKARBACKUP_LEVEL" != "JOB" ]
then
echo "Only allowed at job level" >&2
exit 1
fi


if [ "$ELKARBACKUP_EVENT" == "PRE" ]
then
# If backup directory doesn't exist, create it
TEST=`ssh $SSHPARAMS $USER@$HOST "test -d $DIR && echo $?"`
if [ ! ${TEST} ]; then
echo "[INFO] Backup directory $DIR doesn't exist. Creating..."
ssh $SSHPARAMS $USER@$HOST "mkdir -p $DIR"
fi
# If tmp directory doesn't exist, create it
TEST=`ssh $SSHPARAMS $USER@$HOST "test -d $TMP && echo $?"`
if [ ! ${TEST} ]; then
echo "[INFO] TMP directory $TMP doesn't exist. Creating..."
ssh $SSHPARAMS $USER@$HOST "mkdir -p $TMP"
fi
# Get all virsh instances
instances=`ssh $SSHPARAMS $USER@$HOST "/usr/bin/virsh list --all --name"`
RESULT=$?
if [ $RESULT -ne 0 ]; then
echo "ERROR: $instances"
exit 1
else
for dom in $instances; do
# Doing dump
ssh $SSHPARAMS $USER@$HOST "/usr/bin/virsh dumpxml $dom > \"$TMP/$dom.xml\""
# If we already have an old version...
TEST=`ssh $SSHPARAMS $USER@$HOST "test -f $DIR/$dom.xml && echo $?"`
if [ ${TEST} ]; then
# Diff
#echo "making a diff"
TEST=`ssh $SSHPARAMS $USER@$HOST "diff -q <(cat $TMP/$dom.xml|head -n -1) <(cat $DIR/$dom.xml|head -n -1) > /dev/null && echo $?"`
#echo "diff result: [$TEST]"
# If Diff = false, copy tmp dump file
if [ ! ${TEST} ]; then
ssh $SSHPARAMS $USER@$HOST "cp $TMP/$dom.xml $DIR/$dom.xml"
echo "[$dom.xml] Changes detected. New dump saved."
else
echo "[$dom.xml] No changes detected. Nothing to save."
fi
else
echo "[$dom.xml] First dump created!"
ssh $SSHPARAMS $USER@$HOST "cp $TMP/$dom.xml $DIR/$dom.xml"
fi

done
fi
fi


exit 0