terraform/aws-inventory: decide whether comfyui.coilysiren.me should exist #914
Labels
No labels
burndown-2026-06
burndown-2026-08
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/devrel
role/eval
role/exec
role/frontend
role/gamedev
role/human
role/platform
role/qa
role/sysadmin
role/tpm
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/infrastructure#914
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found while landing #911. Not caused by that change, and deliberately not fixed there, because a DNS mail change is the wrong blast radius to carry a state repair.
The hazard
just terraform-aws-inventory applyplans 3 to destroy today. Verified 2026-08-24 against the live state with a fullterraform plan:The three destroys:
aws_route53_record.home_a["eco-jobs-tracker"]aws_route53_record.home_a["eco-mcp"]aws_route53_record.home_a["grafana"]All three resolve live right now.
dig +short @8.8.8.8 <host>.coilysiren.me Areturns the home public IP for each. An apply removes them from DNS.Why they drifted
They were dropped from the
home_afor_eachmap during the ExternalDNS migration (#339) without a matchingterraform state rm. Terraform still holds them in state, so absence from the map reads as "delete this".ExternalDNS did not adopt them either.
docs/external-dns.mdsays ownership is tracked in companionextdns-*TXT records, and none exists:So each record is currently owned by nothing: out of the terraform config, not in the ExternalDNS registry, still serving traffic.
Second, smaller item
aws_route53_record.comfyuiplans as create. The CNAME is inmain.tfbut absent from state, andcomfyui.coilysiren.medoes not resolve today. The record appears never to have been applied.What resolving this needs
Two decisions, per host, that an operator has to make rather than an agent guess:
eco-jobs-tracker,eco-mcp,grafanashould still resolve at all. If yes, decide the owner: back into thehome_amap, or migrated to ExternalDNS with the label, hostname annotation, and thetargetannotation that keeps it on the home public IP rather than the tailnet IP. If no, an apply deleting it is correct and this becomes a no-op.comfyui.coilysiren.meis still wanted. If yes, the create is correct and the record just needs applying.Until one of those lands, every apply against this module must use
-target. #911 was landed that way.Done means
just terraform-aws-inventory planis clean, or its remaining diff is intentional and reviewed, and no live A record is scheduled for deletion by accident.Correction to the last line of the body: #911's apply has not run yet, it is pending operator approval. Its plan is targeted and clean at
1 to add, 1 to change, 0 to destroy, so the-targetrule stated above is what #911 will be applied under, not something already done.Deleted. Kai's call.
Apply complete! Resources: 0 added, 0 changed, 3 destroyed.Evidence gathered before deleting
Four independent confirmations that all three were dead:
scripts/k8s/retire-zombie-namespaces.sh:148explicitly instructs an operator to delete theeco-mcpandeco-jobs-trackerrecords by hand. The deletion was already the intended end state, it just never happened.coilysiren-eco-mcp-appandcoilysiren-eco-spec-tracker, the k8s namespaces behind those two hostnames. (eco-spec-trackeris the old internal name foreco-jobs-tracker, per its repo digest.)CN=TRAEFIK DEFAULT CERTand returned404. No ingress, no cert-manager certificate, nothing configured for those hosts.eco-app.coilysiren.me, served a realCN=eco-app.coilysiren.meLet's Encrypt certificate and returned200. The Eco SPA, MCP, jobs, and worker service were fused into it, which is why the two Eco names were retired.grafanapredates SigNoz becoming the canonical observability pane.After-state
Authoritative (
ns-1394.awsdns-46.org) and public (8.8.8.8) both empty:Survivors intact, all still on the home IP:
eco-app.coilysiren.mestill returns200.The module is no longer dangerous
The full untargeted plan is now:
Zero destroys. The hazard this issue was opened for is closed. An untargeted apply can no longer delete a live record.
#919 landed alongside, removing the now-stale hand-delete instruction from the retirement script.
One item left, and it needs a decision
aws_route53_record.comfyuistill plans as a create. It is the whole remaining diff.What I found:
comfyui.coilysiren.medoes not resolve and never has. The CNAME has been inmain.tfwithout ever being applied.comfyuinamespace is inretire-zombie-namespaces.sh's retired list, and that script separately cleans up ComfyUI strays left in theforgejonamespace.comfyui.tail09a41b.ts.net., not the cluster. So retiring the k8s namespace does not by itself prove the tailnet ComfyUI is gone.tailscale statuson this host shows nocomfyuipeer, but that is not conclusive, since peer visibility depends on ACLs.just list-tailscale-devicesneedsTAILSCALE_API_KEYor the OAuth pair in the shell, anddocs/tailscale.mdsays admin creds stay out of SSM by design. That is an attended check.Leaning toward removing the CNAME from
main.tf, since the k8s side was retired and the record has never existed. If ComfyUI returns on the tailnet it is a one-line re-add. But that is a decision rather than a cleanup, so leaving this open for Kai.terraform/aws-inventory carries live-DNS-destroying drift: an untargeted apply deletes three A recordsto terraform/aws-inventory: decide whether comfyui.coilysiren.me should existDone, both halves. Closing.
DNS side
aws_route53_record.comfyuiremoved in #920, squashed toa8751f7onmain. The module now plans with zero resource changes against live state. Only the computed outputs move,route53_recordsfrom 17 to 15.Tower side
tailscale serve --bg --https=443 http://127.0.0.1:8188is running onkai-tower-3026.Before-state captured first as a rollback point. The node already had a raw TCP forward and nothing else:
That is passthrough with no TLS termination, which is why 8188 was reachable but 443 was closed.
After, verified from a separate tailnet host:
200, and/system_statsreports ComfyUI 0.29.0 on win32.C=US, O=Let's Encrypt, CN=YE1, valid 2026-08-25 to 2026-11-23.curlaccepts it with no-k, so it is browser-trusted.:8188path still returns200. Nothing that worked before was broken.Rollback if ever needed is
tailscale serve --https=443 off, which leaves the original TCP forward intact.Why the CNAME could not have been repointed
Recorded for the next person who wonders. Three things were broken, and a repoint only fixes the first.
comfyui.<tailnet>.ts.netwas a Tailscale sidecar device belonging to the k3s ComfyUI pod, joined with/coilysiren/comfyui/ts-authkey.retire-zombie-namespaces.shretired that namespace and the device went with it..ts.netnames are not in public DNS. Checked against8.8.8.8: neither the dead sidecar name nor the tower's own name resolves. A public CNAME into one dead-ends unless the client's resolver hands.ts.netto MagicDNS, which is client-side split-DNS behavior rather than something the record can guarantee. Most likely why this record was written and never applied.coilysiren.mename, and 443 and 80 were both closed. The original browser-trusted URL came from cert-manager issuing a Let's Encrypt certificate inside k3s with the sidecar carrying traffic, and that retired with the namespace.tailscale servereaches the same goal through the mechanism designed for it, with no Route53 record and no renewal to babysit.Whole issue, closed out
0 added, 0 changed, 3 destroyed.comfyuiCNAME removed, ComfyUI published over HTTPS instead (#920).just terraform-aws-inventory applyis now safe. The-targetdiscipline this issue forced is no longer load-bearing.Optional follow-up, not filed
The serve config lives in tailscaled's own state, so it survives reboots without help. It would not survive a host rebuild. If that matters, it belongs in a converge script beside
scripts/converge-ollama-windows.ps1. Not filing an issue for it, since the durability that actually matters day to day is already there.