#!/bin/bash set -e set -o pipefail if [ -z "${WILD_INSTANCE}" ]; then echo "ERROR: WILD_INSTANCE is not set" exit 1 fi if [ -z "${WILD_API_DATA_DIR}" ]; then echo "ERROR: WILD_API_DATA_DIR is not set" exit 1 fi if [ -z "${KUBECONFIG}" ]; then echo "ERROR: KUBECONFIG is not set" exit 1 fi INSTANCE_DIR="${WILD_API_DATA_DIR}/instances/${WILD_INSTANCE}" EXTERNALDNS_DIR="${INSTANCE_DIR}/apps/externaldns" echo "=== Setting up ExternalDNS ===" echo "" echo "Verifying cert-manager is ready (required for ExternalDNS)..." kubectl wait --for=condition=Available deployment/cert-manager -n cert-manager --timeout=60s 2>/dev/null && \ kubectl wait --for=condition=Available deployment/cert-manager-webhook -n cert-manager --timeout=60s 2>/dev/null || { echo "cert-manager not ready, but continuing with ExternalDNS installation" echo "Note: ExternalDNS may not work properly without cert-manager" } echo "Using pre-compiled ExternalDNS templates..." if [ ! -f "${EXTERNALDNS_DIR}/kustomization.yaml" ]; then echo "ERROR: Compiled templates not found at ${EXTERNALDNS_DIR}" echo "Templates should be compiled before deployment." exit 1 fi echo "Deploying ExternalDNS..." kubectl apply -k ${EXTERNALDNS_DIR}/ echo "Creating Cloudflare API token secret..." SECRETS_FILE="${WILD_API_DATA_DIR}/instances/${WILD_INSTANCE}/secrets.yaml" CLOUDFLARE_API_TOKEN=$(yq '.apps.externaldns.cert-manager\.cloudflareToken' "$SECRETS_FILE" 2>/dev/null | tr -d '"') if [ -z "$CLOUDFLARE_API_TOKEN" ] || [ "$CLOUDFLARE_API_TOKEN" = "null" ]; then echo "ERROR: Cloudflare API token not found." echo "Please ensure cert-manager has been added with a cloudflareToken secret." exit 1 fi kubectl create secret generic cloudflare-api-token \ --namespace externaldns \ --from-literal=api-token="${CLOUDFLARE_API_TOKEN}" \ --dry-run=client -o yaml | kubectl apply -f - echo "Waiting for Cloudflare ExternalDNS to be ready..." kubectl rollout status deployment/external-dns -n externaldns --timeout=60s echo "" echo "ExternalDNS installed successfully" echo "" echo "To verify the installation:" echo " kubectl get pods -n externaldns" echo " kubectl logs -n externaldns -l app=external-dns -f" echo ""