Newer
Older
openstack-caracal-dc-dc / docs / changelog-20260713-config-xml-path-deleted.md

2026-07-13 -- D-113(a2) COMPLETE: the config.xml path is DELETED

Operator ruling ("I'll defer to your lean"): the OPNsense config.xml template is deleted, not reduced.

Why deleted rather than reduced

The (a2) plan was to shrink the template to a minimal bootstrap (sshd + root key + console + a seeded API key). That turned out to be unnecessary -- every one of those is covered without a config.xml at all:

bootstrap need how it is met now
sshd + root key the D-112(c) console bootstrap (proven on Office1)
an API key opnsense-bootstrap-apikey.sh -- calls OPNsense's OWN model over SSH; no GUI click, no re-implemented crypto
DHCP / firewall / interfaces the REST API (opnsense-api.sh), proven read AND write

So the provisioning chain contains no config.xml anywhere:

boot factory nano -> console bootstrap -> mint API key -> configure over REST

A config.xml renderer that nobody should ever run is not a safety net -- it is a loaded gun pointed at a live router. The 2026-07-13 safety sweep is the evidence: the repo still contained runbook steps telling an operator to render a config and push it to the edge, which by then would have clobbered live API-managed DHCP.

Deleted

  • opentofu/templates/opnsense-config.xml.tmpl
  • scripts/opnsense-render-config.sh + tests/opnsense-render-config/
  • scripts/opnsense-build-config-iso.sh + tests/opnsense-build-config-iso/
  • the opnsense-edge module's config_seed volume + cdrom disk, and its config_iso_path var
  • the xorriso/genisoimage prereq (it existed ONLY for the ISO builder)

All remain in git history. opentofu/templates/README.md is now a tombstone explaining what happened and what to use instead -- people will go looking for that template.

The live change, and why it was safe

Removing the module's ISO wiring touches an INSTANTIATED resource (libvirt_volume.config_seed is in tfstate). Measured with tofu plan BEFORE applying:

module.office1_opnsense.libvirt_domain.vm will be updated IN-PLACE
module.office1_opnsense.libvirt_volume.config_seed will be destroyed
Plan: 0 to add, 1 to change, 1 to destroy.

No replacement of the running domain -- confirmed explicitly (a replacement would have destroyed the live edge). Only the cdrom entry is removed from the disk list and the inert ISO volume is dropped.

Applying it now was the SAFE choice, not the risky one. Leaving the repo/state divergence in place would mean the next tofu apply -- e.g. while building DC1's substrate in Stage 3 -- sweeps up this pending change as a surprise side effect on the running Office1 edge, mid-stage. Deliberate and gated beats incidental and unnoticed.

A lint guard did its job

repo-lint's L3 rule (runbooks must not reference missing scripts) went RED on the tombstone notes, because they named the deleted paths. The rule was RIGHT, and it has no opt-out (only L4 does). Rather than weaken a guard that exists to stop runbooks pointing at dead scripts, the tombstones were reworded to name the bare filename instead of the scripts/ path. The guard stays fully intact; the information is preserved.

Verification

repo-lint 0 fail. opentofu-validate PASS -- root + 10/10 modules standalone. Gauntlet green.

Revert

git revert <this commit>          # restores the template, renderer, ISO builder, harnesses
cd opentofu && tofu apply         # re-creates the (inert) config_seed volume + cdrom

Nothing depends on the ISO: it was never read by anything (D-112).