summaryrefslogtreecommitdiff
path: root/mail/dns/setup-route53.py
diff options
context:
space:
mode:
Diffstat (limited to 'mail/dns/setup-route53.py')
-rwxr-xr-xmail/dns/setup-route53.py34
1 files changed, 22 insertions, 12 deletions
diff --git a/mail/dns/setup-route53.py b/mail/dns/setup-route53.py
index 0864c9a..a54fc91 100755
--- a/mail/dns/setup-route53.py
+++ b/mail/dns/setup-route53.py
@@ -128,22 +128,32 @@ def main():
changes.append(txt_record(f"{SELECTOR}._domainkey.{domain}", dkim_value))
changes.append(txt_record(f"_dmarc.{domain}", "v=DMARC1; p=none"))
- print(f"{len(changes)} 件の DNS レコードを UPSERT します...")
+ print(f"{len(changes)} 件の DNS レコードを個別に UPSERT します...")
+ ok, skipped = 0, 0
for c in changes:
rrs = c["ResourceRecordSet"]
- print(f" {rrs['Type']} {rrs['Name']}")
+ name = rrs["Name"]
+ rtype = rrs["Type"]
+ try:
+ client.change_resource_record_sets(
+ HostedZoneId=zone_id,
+ ChangeBatch={
+ "Comment": "Mail auth records (SPF/DKIM/DMARC) via hetzner-infra",
+ "Changes": [c],
+ },
+ )
+ print(f" OK {rtype} {name}")
+ ok += 1
+ except client.exceptions.InvalidChangeBatch as e:
+ msg = str(e)
+ if "CNAME" in msg or "conflicting" in msg:
+ print(f" SKIP {rtype} {name} (既存の CNAME と競合)")
+ skipped += 1
+ else:
+ raise
- resp = client.change_resource_record_sets(
- HostedZoneId=zone_id,
- ChangeBatch={
- "Comment": "Mail auth records (SPF/DKIM/DMARC) via hetzner-infra",
- "Changes": changes,
- },
- )
- info = resp["ChangeInfo"]
print()
- print(f"Change ID : {info['Id']}")
- print(f"Status : {info['Status']}")
+ print(f"完了: {ok} 件成功 / {skipped} 件スキップ")
print()
print("確認コマンド (数分後):")
for domain in [PRIMARY] + service_domains: