#!/bin/bash # Homelab Backup Script - Managed by Ansible # Host: {{ inventory_hostname }} set -euo pipefail BACKUP_DIR="{{ backup_destination }}" DATE=$(date +%Y%m%d_%H%M%S) HOSTNAME="{{ inventory_hostname }}" BACKUP_FILE="${BACKUP_DIR}/${HOSTNAME}_${DATE}.tar.gz" RETENTION_DAYS="{{ backup_retention_days }}" echo "=== Backup started at $(date) ===" echo "Destination: ${BACKUP_FILE}" # Pre-backup commands {% for cmd in backup_pre_commands %} echo "Running pre-backup: {{ cmd }}" {{ cmd }} {% endfor %} # Create backup tar czf "${BACKUP_FILE}" \ {% for source in backup_sources %} {{ source }} \ {% endfor %} 2>/dev/null || true BACKUP_SIZE=$(du -sh "${BACKUP_FILE}" | cut -f1) echo "Backup created: ${BACKUP_FILE} (${BACKUP_SIZE})" # Post-backup commands {% for cmd in backup_post_commands %} echo "Running post-backup: {{ cmd }}" {{ cmd }} {% endfor %} # Cleanup old backups echo "Removing backups older than ${RETENTION_DAYS} days..." find "${BACKUP_DIR}" -name "${HOSTNAME}_*.tar.gz" -mtime +${RETENTION_DAYS} -delete echo "=== Backup completed at $(date) ==="