131 lines
4.5 KiB
Bash
131 lines
4.5 KiB
Bash
#!/bin/bash
|
||
|
||
# Enterprise CI/CD Foundation Cleanup Script
|
||
# This script removes the bootstrap S3 bucket and DynamoDB table
|
||
# Run this AFTER terraform destroy to completely clean up
|
||
|
||
set -e
|
||
|
||
echo "🧹 Foundation Layer Cleanup Script"
|
||
|
||
# Load configuration if available
|
||
if [ -f .backend-config ]; then
|
||
echo "📋 Loading configuration from .backend-config..."
|
||
source .backend-config
|
||
else
|
||
echo "⚠️ No .backend-config found. Using environment variables..."
|
||
BUCKET_NAME="${BUCKET_NAME:-}"
|
||
TABLE_NAME="${TABLE_NAME:-}"
|
||
AWS_REGION="${AWS_REGION:-us-east-1}"
|
||
PROJECT_NAME="${PROJECT_NAME:-enterprise-cicd}"
|
||
ENVIRONMENT="${ENVIRONMENT:-dev}"
|
||
fi
|
||
|
||
# Verify AWS credentials
|
||
echo "🔐 Verifying AWS credentials..."
|
||
aws sts get-caller-identity || {
|
||
echo "❌ AWS credentials not configured or invalid"
|
||
exit 1
|
||
}
|
||
|
||
# Interactive confirmation
|
||
echo ""
|
||
echo "⚠️ WARNING: This will permanently delete bootstrap resources!"
|
||
echo ""
|
||
echo "Resources to delete:"
|
||
echo " S3 Bucket: ${BUCKET_NAME}"
|
||
echo " DynamoDB Table: ${TABLE_NAME}"
|
||
echo " Region: ${AWS_REGION}"
|
||
echo ""
|
||
read -p "Are you sure you want to proceed? (type 'DELETE' to confirm): " confirmation
|
||
|
||
if [ "$confirmation" != "DELETE" ]; then
|
||
echo "❌ Cleanup cancelled"
|
||
exit 1
|
||
fi
|
||
|
||
echo ""
|
||
echo "💀 Starting cleanup process..."
|
||
|
||
# Check if Terraform state still exists
|
||
if [ -f terraform.tfstate ] || [ -f .terraform/terraform.tfstate ]; then
|
||
echo "❌ Error: Terraform state files still exist!"
|
||
echo "Please run 'terraform destroy' first to destroy all infrastructure"
|
||
echo "Then run this cleanup script to remove bootstrap resources"
|
||
exit 1
|
||
fi
|
||
|
||
# Check if S3 bucket contains state files
|
||
if [ -n "${BUCKET_NAME}" ] && aws s3api head-bucket --bucket "${BUCKET_NAME}" 2>/dev/null; then
|
||
STATE_FILES=$(aws s3 ls "s3://${BUCKET_NAME}/foundation/" --recursive 2>/dev/null || echo "")
|
||
if [ -n "${STATE_FILES}" ]; then
|
||
echo "❌ Error: S3 bucket contains Terraform state files!"
|
||
echo "Found state files:"
|
||
echo "${STATE_FILES}"
|
||
echo ""
|
||
echo "Please run 'terraform destroy' first to clean up all infrastructure"
|
||
echo "This will remove the state files from S3"
|
||
exit 1
|
||
fi
|
||
fi
|
||
|
||
# Remove S3 bucket
|
||
if [ -n "${BUCKET_NAME}" ] && aws s3api head-bucket --bucket "${BUCKET_NAME}" 2>/dev/null; then
|
||
echo "🗑️ Removing S3 bucket: ${BUCKET_NAME}"
|
||
|
||
# Remove all objects and versions
|
||
echo " Removing all objects and versions..."
|
||
aws s3api list-object-versions --bucket "${BUCKET_NAME}" \
|
||
--query 'Versions[].[Key,VersionId]' --output text | \
|
||
while read key version; do
|
||
if [ -n "$key" ] && [ -n "$version" ]; then
|
||
aws s3api delete-object --bucket "${BUCKET_NAME}" --key "$key" --version-id "$version"
|
||
fi
|
||
done
|
||
|
||
# Remove delete markers
|
||
aws s3api list-object-versions --bucket "${BUCKET_NAME}" \
|
||
--query 'DeleteMarkers[].[Key,VersionId]' --output text | \
|
||
while read key version; do
|
||
if [ -n "$key" ] && [ -n "$version" ]; then
|
||
aws s3api delete-object --bucket "${BUCKET_NAME}" --key "$key" --version-id "$version"
|
||
fi
|
||
done
|
||
|
||
# Delete the bucket
|
||
aws s3api delete-bucket --bucket "${BUCKET_NAME}" --region "${AWS_REGION}"
|
||
echo "✅ S3 bucket ${BUCKET_NAME} deleted"
|
||
else
|
||
echo "ℹ️ S3 bucket ${BUCKET_NAME} not found or already deleted"
|
||
fi
|
||
|
||
# Remove DynamoDB table
|
||
if [ -n "${TABLE_NAME}" ] && aws dynamodb describe-table --table-name "${TABLE_NAME}" --region "${AWS_REGION}" >/dev/null 2>&1; then
|
||
echo "🗑️ Removing DynamoDB table: ${TABLE_NAME}"
|
||
aws dynamodb delete-table --table-name "${TABLE_NAME}" --region "${AWS_REGION}"
|
||
|
||
# Wait for deletion to complete
|
||
echo "⏳ Waiting for table deletion to complete..."
|
||
aws dynamodb wait table-not-exists --table-name "${TABLE_NAME}" --region "${AWS_REGION}"
|
||
echo "✅ DynamoDB table ${TABLE_NAME} deleted"
|
||
else
|
||
echo "ℹ️ DynamoDB table ${TABLE_NAME} not found or already deleted"
|
||
fi
|
||
|
||
# Clean up local files
|
||
echo "🧹 Cleaning up local files..."
|
||
rm -f backend.tf
|
||
rm -f .backend-config
|
||
rm -f terraform.tfstate.backup
|
||
rm -f .terraform.lock.hcl
|
||
rm -rf .terraform/
|
||
|
||
echo ""
|
||
echo "🎉 Cleanup completed successfully!"
|
||
echo ""
|
||
echo "📋 What was removed:"
|
||
echo " ✅ S3 bucket: ${BUCKET_NAME}"
|
||
echo " ✅ DynamoDB table: ${TABLE_NAME}"
|
||
echo " ✅ Local backend configuration files"
|
||
echo ""
|
||
echo "💡 You can now run the bootstrap script again to create new resources" |