Files
homelab/scripts/terraform-state-backup.sh
T

57 lines
1.7 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Terraform state backup script
# Backs up Terraform state to local directory and verifies S3 backend accessibility
set -e
BACKUP_DIR="$HOME/.terraform-backups/homelab"
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
STATE_BACKUP="$BACKUP_DIR/$TIMESTAMP-terraform.tfstate"
mkdir -p "$BACKUP_DIR"
echo "=== Terraform State Backup ==="
echo "Backup directory: $BACKUP_DIR"
# Navigate to terraform directory
cd "$(dirname "${BASH_SOURCE[0]}")/../terraform" || exit 1
# Pull state from remote backend
echo "Pulling Terraform state from S3..."
terraform state pull > "$STATE_BACKUP" && \
echo "✓ State backed up to $STATE_BACKUP" || \
echo "⚠️ Failed to pull state (S3 backend may not be initialized)"
# Verify S3 bucket
echo ""
echo "Verifying S3 backend accessibility..."
if [ -z "$KUBECONFIG" ]; then
echo "⚠️ KUBECONFIG not set. Run: core auth login"
exit 1
fi
if kubectl get pods -n storage -l app=minio &>/dev/null; then
MINIO_POD=$(kubectl get pods -n storage -l app=minio -o jsonpath='{.items[0].metadata.name}')
echo "MinIO pod: $MINIO_POD"
# Check bucket
if kubectl exec -n storage "$MINIO_POD" -- mc ls minio/terraform-state &>/dev/null; then
echo "✓ S3 bucket 'terraform-state' accessible"
else
echo "⚠️ S3 bucket 'terraform-state' not found or inaccessible"
echo " To create: kubectl exec -n storage $MINIO_POD -- mc mb minio/terraform-state"
fi
else
echo "⚠️ MinIO not running in storage namespace"
fi
# Keep only last 30 backups
echo ""
echo "Cleaning up old backups (keeping last 30)..."
ls -t "$BACKUP_DIR"/*.tfstate 2>/dev/null | tail -n +31 | xargs -r rm && \
echo "✓ Cleanup complete" || \
echo "️ No old backups to remove"
echo ""
echo "Backup complete. Location: $STATE_BACKUP"