Files
Ansible-Minecraft-Server/roles/04-backups/templates/restore.sh.j2
hcornet 9ea9ac7254
Some checks failed
Ansible Minecraft Server CI/CD / lint (push) Failing after 21s
Ansible Minecraft Server CI/CD / test (push) Has been skipped
Ansible Minecraft Server CI/CD / deploy (push) Has been skipped
check new version
2025-08-27 07:59:19 +02:00

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!"