Compare commits
	
		
			1 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 0a90e4c305 | 
| @ -1,2 +1,3 @@ | ||||
| # Cloudflare API Token (must have Zone:Read + DNS:Read permissions) | ||||
| # Example env file (envs/site1.env) | ||||
| CLOUDFLARE_API_TOKEN=your_api_token_here | ||||
| @ -1,38 +1,61 @@ | ||||
| #!/bin/bash | ||||
| set -euo pipefail | ||||
| 
 | ||||
| # Load config | ||||
| source config.conf | ||||
| 
 | ||||
| ENV_DIR="./envs" | ||||
| EXPORT_FOLDER="export" | ||||
| mkdir -p "$EXPORT_FOLDER" | ||||
| 
 | ||||
| # Step 1: Fetch all zones from Cloudflare | ||||
| 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") | ||||
| # Find all .env files in the ENV_DIR | ||||
| env_files=("$ENV_DIR"/*.env) | ||||
| 
 | ||||
| # Step 2: Parse zones (needs jq) | ||||
| zone_count=$(echo "$zones_json" | jq '.result | length') | ||||
| echo "Found $zone_count zones." | ||||
| if [ ${#env_files[@]} -eq 0 ]; then | ||||
|     echo "❌ No .env files found in $ENV_DIR" | ||||
|     exit 1 | ||||
| fi | ||||
| 
 | ||||
| # 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") | ||||
| for env_file in "${env_files[@]}"; do | ||||
|     echo "🔄 Processing environment file: $env_file" | ||||
|      | ||||
|     # Load environment variables from .env file | ||||
|     set -o allexport | ||||
|     source "$env_file" | ||||
|     set +o allexport | ||||
| 
 | ||||
|     TIMESTAMP=$(date +"%Y%m%d_%H%M%S") | ||||
|     OUTPUT_FILE="$EXPORT_FOLDER/${SITE_NAME}_$TIMESTAMP.txt" | ||||
|     if [[ -z "${CLOUDFLARE_API_TOKEN:-}" ]]; then | ||||
|         echo "⚠️  CLOUDFLARE_API_TOKEN not set in $env_file. Skipping." | ||||
|         continue | ||||
|     fi | ||||
| 
 | ||||
|     echo "Exporting DNS records for $SITE_NAME..." | ||||
| 
 | ||||
|     curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/export" \ | ||||
|     # Step 1: Fetch all zones from Cloudflare | ||||
|     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" | tee "$OUTPUT_FILE" | ||||
|         -H "Content-Type: application/json") | ||||
| 
 | ||||
|     echo " -> Saved to $OUTPUT_FILE" | ||||
|     # Step 2: Parse zones (needs jq) | ||||
|     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 | ||||
| 
 | ||||
| echo "✅ All exports complete. Files are in the '$EXPORT_FOLDER' folder." | ||||
| echo "🎉 All exports finished. Files are in the '$EXPORT_FOLDER' folder." | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user