Files
proxmox/scripts/cloudflare/add-gov-portals-xom-dev-dns.sh
defiQUG bea1903ac9
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
Sync all local changes: docs, config, scripts, submodule refs, verification evidence
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-21 15:46:06 -08:00

66 lines
2.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# Add Cloudflare DNS A records for Gov Portals xom-dev subdomains
# Domains: dbis/iccc/omnl/xom.xom-dev.phoenix.sankofa.nexus → 76.53.10.36
#
# Usage: bash scripts/cloudflare/add-gov-portals-xom-dev-dns.sh
# Requires: .env with CLOUDFLARE_API_TOKEN or (CLOUDFLARE_EMAIL + CLOUDFLARE_API_KEY)
# CLOUDFLARE_ZONE_ID_SANKOFA_NEXUS for sankofa.nexus zone
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
cd "$PROJECT_ROOT"
source config/ip-addresses.conf 2>/dev/null || true
[ -f .env ] && set +u && source .env 2>/dev/null || true && set -u
ZONE_ID="${CLOUDFLARE_ZONE_ID_SANKOFA_NEXUS:-}"
PUBLIC_IP="${PUBLIC_IP:-76.53.10.36}"
if [ -n "${CLOUDFLARE_API_TOKEN:-}" ]; then
AUTH_H=(-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN")
elif [ -n "${CLOUDFLARE_API_KEY:-}" ] && [ -n "${CLOUDFLARE_EMAIL:-}" ]; then
AUTH_H=(-H "X-Auth-Email: $CLOUDFLARE_EMAIL" -H "X-Auth-Key: $CLOUDFLARE_API_KEY")
else
echo "Set CLOUDFLARE_API_TOKEN or (CLOUDFLARE_EMAIL + CLOUDFLARE_API_KEY) in .env"
exit 1
fi
[ -z "$ZONE_ID" ] && { echo "Set CLOUDFLARE_ZONE_ID_SANKOFA_NEXUS in .env"; exit 1; }
add_record() {
local name=$1
local data
data=$(jq -n --arg name "$name" --arg content "$PUBLIC_IP" \
'{type:"A",name:$name,content:$content,ttl:1,proxied:true}')
EXISTING=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records?name=${name}.sankofa.nexus&type=A" \
"${AUTH_H[@]}" -H "Content-Type: application/json")
RECORD_ID=$(echo "$EXISTING" | jq -r '.result[0].id // empty')
if [ -n "$RECORD_ID" ] && [ "$RECORD_ID" != "null" ]; then
UPD=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records/${RECORD_ID}" \
"${AUTH_H[@]}" -H "Content-Type: application/json" -d "$data")
if echo "$UPD" | jq -e '.success == true' >/dev/null 2>&1; then
echo " $name.sankofa.nexus: Updated A → $PUBLIC_IP"
else
echo " $name.sankofa.nexus: Update failed"
return 1
fi
else
CR=$(curl -s -X POST "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records" \
"${AUTH_H[@]}" -H "Content-Type: application/json" -d "$data")
if echo "$CR" | jq -e '.success == true' >/dev/null 2>&1; then
echo " $name.sankofa.nexus: Created A → $PUBLIC_IP"
else
echo " $name.sankofa.nexus: Create failed ($(echo "$CR" | jq -r '.errors[0].message // "unknown"' 2>/dev/null))"
return 1
fi
fi
}
echo "Adding Gov Portals xom-dev DNS (sankofa.nexus zone)..."
# Full subdomain: dbis.xom-dev.phoenix.sankofa.nexus → name is "dbis.xom-dev.phoenix" in zone sankofa.nexus
add_record "dbis.xom-dev.phoenix" || true
add_record "iccc.xom-dev.phoenix" || true
add_record "omnl.xom-dev.phoenix" || true
add_record "xom.xom-dev.phoenix" || true
echo "Done."