#!/bin/bash # # Paso 8 del cutover: mover el A record del apex y de www a Hetzner. # # Se cambia SOLO el content. proxied=true se mantiene (la web va por Cloudflare) y # no se toca nada mas de la zona: el MX, el wildcard, los NS de cdmon y los TXT # (SPF y brevo) se quedan igual, asi que el correo no se ve afectado. # # ROLLBACK: volver a poner 134.0.10.170 en estos dos mismos ids. # set -uo pipefail set -a; . ~/.hermes/profiles/feadulta/.env 2>/dev/null; set +a ZONE=5aa15f0f9cf7d45f3710177bb4a66aba NUEVA_IP=188.40.120.157 APEX=807be63daf5a2ce9cfc710dcc1ef0a21 WWW=0ce31fc2fbf5316434ace0c944909c59 mover() { local id=$1 name=$2 curl -s -X PATCH \ -H "Authorization: Bearer $FEA_CF_API_TOKEN" -H "Content-Type: application/json" \ "https://api.cloudflare.com/client/v4/zones/$ZONE/dns_records/$id" \ --data "{\"content\":\"$NUEVA_IP\"}" \ | python3 -c " import sys,json d=json.load(sys.stdin) if d.get('success'): r=d['result']; print(' OK %-20s -> %s proxied=%s' % (r['name'], r['content'], r['proxied'])) else: print(' FALLO %s: %s' % ('$name', d.get('errors'))) " } echo "== $(date '+%F %T %Z') moviendo los A records:" mover "$APEX" feadulta.com mover "$WWW" www.feadulta.com echo "" echo "== estado en la zona tras el cambio:" curl -s -H "Authorization: Bearer $FEA_CF_API_TOKEN" \ "https://api.cloudflare.com/client/v4/zones/$ZONE/dns_records?type=A&per_page=100" \ | python3 -c ' import sys,json for r in json.load(sys.stdin)["result"]: print(" %-22s %-16s proxied=%s" % (r["name"], r["content"], r["proxied"])) ' echo "" echo "== purgando la cache de Cloudflare:" curl -s -X POST \ -H "Authorization: Bearer $FEA_CF_API_TOKEN" -H "Content-Type: application/json" \ "https://api.cloudflare.com/client/v4/zones/$ZONE/purge_cache" --data '{"purge_everything":true}' \ | python3 -c ' import sys,json d=json.load(sys.stdin) print(" purga OK" if d.get("success") else " NO se pudo purgar: %s" % d.get("errors")) print(" (si falla es que el token solo tiene permiso de DNS: hay que purgar desde el panel)") '