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