61 lines
1.5 KiB
Django/Jinja
61 lines
1.5 KiB
Django/Jinja
#!/bin/bash
|
|
# {{ ansible_managed }}
|
|
|
|
BACKUP_TYPE=$1
|
|
BACKUP_DATE=$2
|
|
BACKUP_BASE="{{ backup_base_dir }}"
|
|
SERVER_DIR="{{ minecraft_server_dir }}"
|
|
|
|
# Function to find backup file
|
|
find_backup() {
|
|
local type=$1
|
|
local date=$2
|
|
local dir=""
|
|
|
|
case "$type" in
|
|
daily) dir="{{ backup_daily_dir }}" ;;
|
|
weekly) dir="{{ backup_weekly_dir }}" ;;
|
|
monthly) dir="{{ backup_monthly_dir }}" ;;
|
|
*) echo "Invalid backup type"; exit 1 ;;
|
|
esac
|
|
|
|
if [ "$date" = "latest" ]; then
|
|
ls -1t $dir/*.tar.gz 2>/dev/null | head -n 1
|
|
else
|
|
ls $dir/*${date}*.tar.gz 2>/dev/null | head -n 1
|
|
fi
|
|
}
|
|
|
|
# Main restore process
|
|
BACKUP_FILE=$(find_backup "$BACKUP_TYPE" "$BACKUP_DATE")
|
|
|
|
if [ -z "$BACKUP_FILE" ]; then
|
|
echo "No backup found for type: $BACKUP_TYPE, date: $BACKUP_DATE"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Restoring from: $BACKUP_FILE"
|
|
|
|
# Create restore directory
|
|
RESTORE_DIR="{{ minecraft_base_dir }}/restore_$(date +%Y%m%d_%H%M%S)"
|
|
mkdir -p "$RESTORE_DIR"
|
|
|
|
# Extract backup
|
|
tar -xzf "$BACKUP_FILE" -C "$RESTORE_DIR"
|
|
|
|
# Backup current server
|
|
echo "Backing up current server state..."
|
|
tar -czf "{{ backup_base_dir }}/pre_restore_$(date +%Y%m%d_%H%M%S).tar.gz" \
|
|
-C "{{ minecraft_base_dir }}" server/
|
|
|
|
# Restore files
|
|
echo "Restoring server files..."
|
|
rsync -av --delete "$RESTORE_DIR/server/" "$SERVER_DIR/"
|
|
|
|
# Set permissions
|
|
chown -R {{ minecraft_user }}:{{ minecraft_group }} "$SERVER_DIR"
|
|
|
|
# Clean up
|
|
rm -rf "$RESTORE_DIR"
|
|
|
|
echo "Restore completed successfully!" |