From 26cbb26cebd495fd6260b6af65b37fe5c8a8c00b Mon Sep 17 00:00:00 2001 From: Silvio Rhatto Date: Wed, 4 Jan 2012 15:43:08 -0200 Subject: Support for restoring backups from /var/backups/restore; svn and git restore support --- lib/hydra/backup | 20 ++++++++++++--- share/hydra/deploy | 2 +- share/hydractl/backup-restore | 10 +++++--- share/hydractl/backup-restore-gitosis | 45 +++++++++++++++++++++++++++++----- share/hydractl/backup-restore-site | 6 +++-- share/hydractl/backup-restore-svn | 46 ++++++++++++++++++++++++++++++----- 6 files changed, 108 insertions(+), 21 deletions(-) diff --git a/lib/hydra/backup b/lib/hydra/backup index f98aa0f..9c35ff9 100644 --- a/lib/hydra/backup +++ b/lib/hydra/backup @@ -1,7 +1,7 @@ #!/bin/bash -# Setup environment for backup restored from localhost -function hydra_backup_environment_local { +# Setup environment for the backups website +function hydra_backup_environment_local_website { SITE="$1" BACKUPDIR="/var/sites/backups/site/$SITE" @@ -14,12 +14,26 @@ function hydra_backup_environment_local { RESTOREDIR="$BACKUPDIR/$DATE" else RESTOREDIR="$BACKUPDIR/`date +%Y%m%d`" - fi + fi DB_DUMP_BASE="$RESTOREDIR" mkdir -p $RESTOREDIR } +# Setup environment for backup restored from localhost +function hydra_backup_environment_local { + BACKUPDIR="/var/backups/duplicity" + + if [ ! -z "$DATE" ]; then + RESTOREDIR="/var/backups/restore/$DATE" + else + RESTOREDIR="/var/backups/restore/`date +%Y%m%d`" + fi + + DB_DUMP_BASE="$RESTOREDIR/var/backups/mysql/sqldump/" + mkdir -p $RESTOREDIR +} + # Setup environment for backup restored from remote source function hydra_backup_environment_remote { NODE="$1" diff --git a/share/hydra/deploy b/share/hydra/deploy index adeb6c8..0a8a5de 100755 --- a/share/hydra/deploy +++ b/share/hydra/deploy @@ -9,7 +9,7 @@ hydra_config_load # Command line arguments NODES="$*" -COMMIT="d8e20cc9fa92f07def15ebf3041405627fb66eae" +COMMIT="f360acf0fab1d941bc7de8bec3d22aabd64f49fe" # Build node list if [ -z "$NODES" ]; then diff --git a/share/hydractl/backup-restore b/share/hydractl/backup-restore index 160ed5e..a5bfd42 100755 --- a/share/hydractl/backup-restore +++ b/share/hydractl/backup-restore @@ -2,12 +2,16 @@ # # Backup restoration. # -# TODO: optionally restore from local backup -# # Load. source $APP_BASE/lib/hydra/functions || exit 1 hydra_config_load -hydra_backup_environment_remote $* +# Check restore strategy. +if [ "$1" == "localhost" ]; then + hydra_backup_environment_local $2 restore +else + hydra_backup_environment_remote $1 restore +fi + duplicity restore file:///$BACKUPDIR/ $RESTOREDIR/ diff --git a/share/hydractl/backup-restore-gitosis b/share/hydractl/backup-restore-gitosis index 7da4a05..f569a8e 100755 --- a/share/hydractl/backup-restore-gitosis +++ b/share/hydractl/backup-restore-gitosis @@ -2,15 +2,48 @@ # # Gitosis backup restoration. # -# TODO # Load. source $APP_BASE/lib/hydra/functions || exit 1 hydra_config_load -hydra_backup_environment_remote $* +# Parameters. +DATE="`date +%Y%m%d`" -# Check if folder exist on the backup -# Check if there's already a site folder and backup it -# Copy site folder from backup -# Fix permissions +# Check restore strategy. +if [ "$1" == "localhost" ] || [ "$1" == "`facter hostname`" ]; then + hydra_backup_environment_local $2 restore +else + hydra_backup_environment_remote $1 restore +fi + +# Check if folder exist on the backup. +if [ ! -d "$RESTOREDIR/var/git" ]; then + echo "Git folder does not exist: $RESTOREDIR/var/git" + exit 1 +fi + +# Set git user. +if hydra_check_user gitosis; then + $GIT_USER="gitosis" +else + $GIT_USER="root" +fi + +# Set git group. +if hydra_check_group gitosis; then + $GIT_GROUP="gitosis" +else + $GIT_GROUP="root" +fi + +# TODO: more like backup-site +# Backup it. +mkdir -p /var/site/backups/git/ +mv /var/git /var/site/backups/git/$DATE + +# Copy site folder from backup. +cp -a $RESTOREDIR/var/git /var/git + +# Fix permissions. +chown -R $GIT_USER.$GIT_GROUP /var/git diff --git a/share/hydractl/backup-restore-site b/share/hydractl/backup-restore-site index 4604755..ae8f87a 100755 --- a/share/hydractl/backup-restore-site +++ b/share/hydractl/backup-restore-site @@ -19,8 +19,10 @@ if [ -z "$SITE" ]; then exit 1 fi -# Check restore stratety. -if [ "$1" == "localhost" ]; then +# Check restore strategy. +if [ "$1" == "backups" ]; then + hydra_backup_environment_local_website $2 restore +elif [ "$1" == "localhost" ] || [ "$1" == "`facter hostname`" ]; then hydra_backup_environment_local $2 restore else hydra_backup_environment_remote $1 restore diff --git a/share/hydractl/backup-restore-svn b/share/hydractl/backup-restore-svn index e4b1660..2f15563 100755 --- a/share/hydractl/backup-restore-svn +++ b/share/hydractl/backup-restore-svn @@ -2,15 +2,49 @@ # # Subversion backup restoration. # -# TODO # Load. source $APP_BASE/lib/hydra/functions || exit 1 hydra_config_load -hydra_backup_environment_remote $* +# Parameters. +DATE="`date +%Y%m%d`" -# Check if folder exist on the backup -# Check if there's already a site folder and backup it -# Copy site folder from backup -# Fix permissions +# Check restore strategy. +if [ "$1" == "localhost" ] || [ "$1" == "`facter hostname`" ]; then + hydra_backup_environment_local $2 restore +else + hydra_backup_environment_remote $1 restore +fi + +# Check if folder exist on the backup. +if [ -d "$RESTOREDIR/var/svn" ]; then + echo "SVN folder does not exist: $RESTOREDIR/var/svn" + exit 1 +fi + +# TODO: more like backup-site +# Backup it. +mkdir -p /var/site/backups/svn/ +mv /var/svn /var/site/backups/svn/$DATE + +# Set svn user. +if hydra_check_user svn; then + $SVN_USER="svn" +else + $SVN_USER="root" +fi + +# Set svn group. +if hydra_check_group svn; then + $SVN_GROUP="svn" +else + $SVN_GROUP="root" +fi + +# Copy site folder from backup. +cp -a $RESTOREDIR/var/svn /var/svn + +# Fix permissions. +chown root.root /var/svn +chown -R $SVN_USER.$SVN_GROUP /var/svn/* -- cgit v1.2.3