Newer
Older
openstack-caracal-dc-dc / docs / changelog-20260714-d119-tofu-apply.md

2026-07-14 -- D-119 OpenTofu rename APPLIED (operator-gated destroying apply)

The tofu apply deferred by the D-119 commit. Executed after explicit operator authorization.

Pre-apply discipline (verify before mutate)

A LIVE re-check immediately before the apply (not the earlier measurement):

dc1-* / mesh-dc* networks   -> 0 DHCP leases each
dc1-pool / dc2-pool         -> 0 volumes each
every libvirt domain        -> none references a dc1-*/mesh-dc* network

Then a fresh tofu plan: 11 to add, 0 to change, 11 to destroy -- all must be replaced (the moved{} blocks). Confirmed empty, so the replace is safe (standing lesson 2: an apply touching a live libvirt object's devices is an outage -- none of these carried anything).

Result

Apply complete! Resources: 11 added, 0 changed, 11 destroyed.

Verified ON THE HOST, not just in state:

  • state holds all 11 under vr1_dc0_* / vr1_dc1_* / mesh_vr1_*;
  • tofu plan -> "No changes" (repo/state back in sync);
  • libvirt shows vr1-dc0-{provider-public,metal-admin,metal-internal,data-tenant,storage,replication}, mesh-vr1-dc0-office1, mesh-vr1-dc0-vr1-dc1, mesh-vr1-dc1-office1, vr1-dc0-pool, vr1-dc1-pool;
  • ZERO old dc1-*/dc2-*/mesh-dc* network or pool names remain.

No collateral

Office1 was never in the plan and is untouched: office1-local, office1-wan, wan, the office1-opnsense edge and voffice1 all present; edge (10.10.0.1) and voffice1 (10.10.0.20) both reachable after the apply.

Why this went before Stage 3

Carrying divergent repo/state into Stage 3 would let a Stage-3 tofu apply silently bundle this 11-resource rename with real DC provisioning. Applying it now, while the objects are empty, kept the rename a clean standalone change.

Revert

The moved{} blocks are symmetric; reverting the D-119 code commit and re-applying renames back. There is nothing to preserve in these objects (they are empty), so a revert is a pure rename.