boma/terraform
sjat 847d9885e2 revert: back out mesh-hardening 1/3 on askari after it broke the Docker host
Incident 2026-06-17: applying base's nftables default-deny (forward policy drop)
to askari — a Docker host — broke container forwarding/NAT on reboot, and the
wt0-only sshd ListenAddress left no break-glass (ip_nonlocal_bind did NOT beat
the boot race). Recovery: disable nftables + restart docker (restore the wiped
NAT masquerade) + force-recreate the coordinator (it FATAL-looped unable to
download its GeoLite2 DB with no egress) -> mesh re-formed.

Back out the enablement so a future deploy can't re-break askari:
- offsite_hosts: base__ssh_listen_mesh_only=false, base__firewall_apply=false
- remove host_vars/askari.yml (manage over the WAN again, not wt0)
- tf/offsite: re-open WAN :22 to ubongo only (break-glass; already applied)

askari now: sshd on all interfaces (Ansible-managed), nftables disabled, WAN :22
open -> stable + reboot-survivable. The base feature code (sshd ListenAddress
option, firewall public zone) stays; it's just not enabled on Docker hosts.
Mesh-hardening 1/3 to be re-spec'd before any retry.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 22:16:17 +02:00
..
environments revert: back out mesh-hardening 1/3 on askari after it broke the Docker host 2026-06-17 22:16:17 +02:00
modules feat(tf/offsite): retire askari's WAN :22 (mesh-only SSH) 2026-06-17 20:51:24 +02:00
README.md docs(review): 2026-06-14 repo audit — M4a doc drift + Traefik→Caddy lag 2026-06-14 18:37:54 +02:00

terraform/

Infrastructure provisioning. Terraform owns VM existence only — creating and destroying Proxmox VMs. It writes no DNS records and configures nothing inside a VM; Ansible owns all of that.

  • modules/proxmox_vm/ — reusable VM module (Proxmox only).
  • modules/hetzner_vm/ — reusable VM module (Hetzner Cloud: server + firewall + SSH key + cloud-init).
  • environments/{staging,production}/ — separate state per environment (Proxmox). Add a VM by editing local.vms in that env's main.tf, then make tf-plantf-applytf-inventory. Not yet terraform inited.
  • environments/offsite/ — the off-site Hetzner host (askari); the one applied environment. Use make tf-* TF_ENV=offsite and tf-inventory-offsite.

Rationale: ADR-006. Handoff to Ansible: ADR-009. Secrets via TF_VAR_* only — never in .tfvars. See STATUS.md for what is provisioned.