Compare commits

..

No commits in common. "main" and "1.3.1" have entirely different histories.
main ... 1.3.1

2 changed files with 23 additions and 47 deletions

View File

@ -1,3 +1,2 @@
# Cloudflare API Token (must have Zone:Read + DNS:Read permissions) # Cloudflare API Token (must have Zone:Read + DNS:Read permissions)
# Example env file (envs/site1.env)
CLOUDFLARE_API_TOKEN=your_api_token_here CLOUDFLARE_API_TOKEN=your_api_token_here

View File

@ -1,61 +1,38 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
ENV_DIR="./envs" # Load config
source config.conf
EXPORT_FOLDER="export" EXPORT_FOLDER="export"
mkdir -p "$EXPORT_FOLDER" mkdir -p "$EXPORT_FOLDER"
# Find all .env files in the ENV_DIR # Step 1: Fetch all zones from Cloudflare
env_files=("$ENV_DIR"/*.env) echo "Fetching zone list from Cloudflare..."
zones_json=$(curl -s https://api.cloudflare.com/client/v4/zones \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-H "Content-Type: application/json")
if [ ${#env_files[@]} -eq 0 ]; then # Step 2: Parse zones (needs jq)
echo "❌ No .env files found in $ENV_DIR" zone_count=$(echo "$zones_json" | jq '.result | length')
exit 1 echo "Found $zone_count zones."
fi
for env_file in "${env_files[@]}"; do # Step 3: Loop through zones
echo "🔄 Processing environment file: $env_file" for ((i=0; i<zone_count; i++)); do
ZONE_ID=$(echo "$zones_json" | jq -r ".result[$i].id")
SITE_NAME=$(echo "$zones_json" | jq -r ".result[$i].name")
# Load environment variables from .env file TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
set -o allexport OUTPUT_FILE="$EXPORT_FOLDER/${SITE_NAME}_$TIMESTAMP.txt"
source "$env_file"
set +o allexport
if [[ -z "${CLOUDFLARE_API_TOKEN:-}" ]]; then echo "Exporting DNS records for $SITE_NAME..."
echo "⚠️ CLOUDFLARE_API_TOKEN not set in $env_file. Skipping."
continue
fi
# Step 1: Fetch all zones from Cloudflare curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/export" \
echo "Fetching zone list from Cloudflare..."
zones_json=$(curl -s https://api.cloudflare.com/client/v4/zones \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \ -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-H "Content-Type: application/json") -H "Content-Type: application/json" | tee "$OUTPUT_FILE"
# Step 2: Parse zones (needs jq) echo " -> Saved to $OUTPUT_FILE"
zone_count=$(echo "$zones_json" | jq '.result | length')
echo "Found $zone_count zones."
# Step 3: Loop through zones
for ((i=0; i<zone_count; i++)); do
ZONE_ID=$(echo "$zones_json" | jq -r ".result[$i].id")
SITE_NAME=$(echo "$zones_json" | jq -r ".result[$i].name")
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
OUTPUT_FILE="$EXPORT_FOLDER/${SITE_NAME}_$TIMESTAMP.txt"
echo "Exporting DNS records for $SITE_NAME..."
curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/export" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-H "Content-Type: application/json" | tee "$OUTPUT_FILE"
echo " -> Saved to $OUTPUT_FILE"
done
echo "✅ Export complete for $env_file"
echo ""
done done
echo "🎉 All exports finished. Files are in the '$EXPORT_FOLDER' folder." echo "✅ All exports complete. Files are in the '$EXPORT_FOLDER' folder."