Files
smom-dbis-138/scripts/deployment/cloudflare-dns.sh
defiQUG 1fb7266469 Add Oracle Aggregator and CCIP Integration
- Introduced Aggregator.sol for Chainlink-compatible oracle functionality, including round-based updates and access control.
- Added OracleWithCCIP.sol to extend Aggregator with CCIP cross-chain messaging capabilities.
- Created .gitmodules to include OpenZeppelin contracts as a submodule.
- Developed a comprehensive deployment guide in NEXT_STEPS_COMPLETE_GUIDE.md for Phase 2 and smart contract deployment.
- Implemented Vite configuration for the orchestration portal, supporting both Vue and React frameworks.
- Added server-side logic for the Multi-Cloud Orchestration Portal, including API endpoints for environment management and monitoring.
- Created scripts for resource import and usage validation across non-US regions.
- Added tests for CCIP error handling and integration to ensure robust functionality.
- Included various new files and directories for the orchestration portal and deployment scripts.
2025-12-12 14:57:48 -08:00

186 lines
4.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# Cloudflare DNS Configuration Script
# Automates DNS record creation for d-bis.org domain
set -euo pipefail
# Colors for output
# Configuration
ZONE_ID=""
API_TOKEN=""
IP_ADDRESS=""
DOMAIN="d-bis.org"
# Parse arguments
while [[ $# -gt 0 ]]; do
case $1 in
--zone-id)
ZONE_ID="$2"
shift 2
;;
--api-token)
API_TOKEN="$2"
shift 2
;;
--ip)
IP_ADDRESS="$2"
shift 2
;;
--domain)
DOMAIN="$2"
shift 2
;;
*)
echo "Unknown option: $1"
exit 1
;;
esac
done
# Validate arguments
if [ -z "$ZONE_ID" ] || [ -z "$API_TOKEN" ] || [ -z "$IP_ADDRESS" ]; then
echo "Usage: $0 --zone-id <zone_id> --api-token <api_token> --ip <ip_address> [--domain <domain>]"
exit 1
fi
# Logging function
log() {
log_success "[$(date +'%Y-%m-%d %H:%M:%S')] $1"
}
error() {
log_error "[ERROR] $1"
exit 1
}
warn() {
log_warn "[WARNING] $1"
}
# Cloudflare API function
cloudflare_api() {
local method=$1
local endpoint=$2
local data=${3:-}
if [ -n "$data" ]; then
curl -s -X "$method" \
"https://api.cloudflare.com/client/v4/$endpoint" \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" \
-d "$data"
else
curl -s -X "$method" \
"https://api.cloudflare.com/client/v4/$endpoint" \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json"
fi
}
# Check if DNS record exists
check_record() {
local record_type=$1
local record_name=$2
cloudflare_api "GET" "zones/$ZONE_ID/dns_records?type=$record_type&name=$record_name" | \
jq -e '.result | length > 0' > /dev/null 2>&1
}
# Get DNS record ID
get_record_id() {
local record_type=$1
local record_name=$2
cloudflare_api "GET" "zones/$ZONE_ID/dns_records?type=$record_type&name=$record_name" | \
jq -r '.result[0].id'
}
# Create or update DNS record
create_or_update_record() {
local record_type=$1
local record_name=$2
local record_content=$3
local ttl=${4:-300}
local proxied=${5:-true}
if check_record "$record_type" "$record_name"; then
log "Updating DNS record: $record_name ($record_type) -> $record_content"
local record_id=$(get_record_id "$record_type" "$record_name")
local data=$(jq -n \
--arg type "$record_type" \
--arg name "$record_name" \
--arg content "$record_content" \
--argjson ttl "$ttl" \
--argjson proxied "$proxied" \
'{
type: $type,
name: $name,
content: $content,
ttl: $ttl,
proxied: $proxied
}')
local response=$(cloudflare_api "PUT" "zones/$ZONE_ID/dns_records/$record_id" "$data")
if echo "$response" | jq -e '.success' > /dev/null; then
log "DNS record updated successfully"
else
error "Failed to update DNS record: $(echo "$response" | jq -r '.errors[0].message')"
fi
else
log "Creating DNS record: $record_name ($record_type) -> $record_content"
local data=$(jq -n \
--arg type "$record_type" \
--arg name "$record_name" \
--arg content "$record_content" \
--argjson ttl "$ttl" \
--argjson proxied "$proxied" \
'{
type: $type,
name: $name,
content: $content,
ttl: $ttl,
proxied: $proxied
}')
local response=$(cloudflare_api "POST" "zones/$ZONE_ID/dns_records" "$data")
if echo "$response" | jq -e '.success' > /dev/null; then
log "DNS record created successfully"
else
error "Failed to create DNS record: $(echo "$response" | jq -r '.errors[0].message')"
fi
fi
}
# Main function
main() {
log "Configuring Cloudflare DNS for $DOMAIN"
log "Zone ID: $ZONE_ID"
log "IP Address: $IP_ADDRESS"
# Create A record for root domain
create_or_update_record "A" "$DOMAIN" "$IP_ADDRESS" 300 true
create_or_update_record "A" "www.$DOMAIN" "$IP_ADDRESS" 300 true
# Create A record for RPC endpoint
create_or_update_record "A" "rpc.$DOMAIN" "$IP_ADDRESS" 300 true
create_or_update_record "A" "rpc2.$DOMAIN" "$IP_ADDRESS" 300 true
# Create A record for explorer
create_or_update_record "A" "explorer.$DOMAIN" "$IP_ADDRESS" 300 true
# Create CNAME records (if needed)
# create_or_update_record "CNAME" "api.$DOMAIN" "rpc.$DOMAIN" 300 true
log "Cloudflare DNS configuration completed"
log "DNS records may take a few minutes to propagate"
}
# Run main function
main "$@"