# overlays/dc-dc-ipv6-family-matrix.yaml
#
# ==== SCOPE NARROWED 2026-07-29 -- THIS FILE IS NOW ceph-mon ONLY ====
#
# It used to carry a `vip` + `prefer-ipv6` pair for ten API charms, every value an
# unrendered {{TOKEN}}. Those are SUPERSEDED: ruling 3 (2026-07-25) plus R2's
# dual-stack ruling put every API VIP in the per-DC overlays, rendered with measured
# values -- `overlays/vr1-dc0-vips.yaml` and `overlays/vr1-dc1-vips.yaml`, generated by
# `scripts/render-dc-overlays.py`, each carrying `prefer-ipv6: true` alongside its own
# six-address vip.
#
# THIS RESOLVES THE "L3-9 COLLISION": two overlays both setting `options.vip` for the
# same app, merged take-last. Measured, BOTH orders now fail -- matrix-last dies on the
# unrendered placeholders, vips-last dies on provider-bundle-check invariant 9 (which
# exists because of L3-9: `prefer-ipv6` survives as its own key while the v6 legs are
# clobbered). The gate closed the SILENT half of this on 2026-07-28; deleting the
# duplicate keys closes the collision itself. The vip and prefer-ipv6 keys were removed
# TOGETHER and must never be separated -- removing the vips alone would have recreated
# the exact defect deliberately.
#
# WHAT SURVIVES HERE, because it exists in NO other file: ceph-mon's ULA-only storage
# and replication networks. ceph-mon appears in neither VIP overlay and never will --
# it is not an HAProxy/pacemaker app and has no vip. Its `prefer-ipv6` is an EITHER/OR
# switch (v6-only), not the additive HAProxy dual-bind the API charms use, which is
# exactly what D-101 wants for these two planes.
#
# The full per-charm sourcing (charm config.yaml reads, the nova-cloud-controller
# "Dual Stack VIPs" commit, the OVN negative result, vault's sort_sans()) is in
# `docs/archive/dc-dc-ipv6-charm-research.md` -- that memo, not this header, is the
# research record, and it is unaffected by this narrowing.
#
# OCTAVIA: the lb-mgmt-net question this file used to raise as an open risk is CLOSED.
# R8 RULED 2026-07-27 that Octavia creates and owns its own IPv6 network, and the two
# Launchpad citations that argued otherwise were read in full and BOTH failed --
# #1913409 is a different installer's bug, Fix Released 2021; #1911788 is not an IPv6
# defect and its actual cause is fixed in the OVS version these nodes install. Octavia's
# own API VIP is dual-family in the per-DC overlays like every other API charm.
#
# ==== STILL NOT RENDERED -- {{TOKEN}} placeholders below ====
# The two CIDRs are placeholders and NOTHING GATES THEM: provider-bundle-check skips any
# application without a `vip`, so ceph-mon is outside every current check. Substitute
# real measured per-DC values before this file goes anywhere near `juju deploy`, and do
# not assume a green gate says anything about it. (Logged as a gap, not fixed here.)
applications:
ceph-mon:
options:
prefer-ipv6: true # CONFIRMED real option, charm-ceph-mon config.yaml
ceph-public-network: "{{DC_STORAGE_ULA_CIDR}}"
ceph-cluster-network: "{{DC_REPLICATION_ULA_CIDR}}"
# NOTE: prefer-ipv6 privacy-extension caveat (charm's own docs):
# "IPv6 privacy extension... must be disabled and a non-temporary
# address must be configured/available" on every ceph-mon unit's
# storage/replication interface -- a real host/OS-level prerequisite,
# not something this overlay can set.
# data-tenant (OVN geneve): deliberately NO overlay entry. Confirmed no
# charm-config toggle exists for ovn-central/ovn-chassis; the plane being
# ULA-only (no v4 present, per D-101) is sufficient on its own -- geneve
# encapsulation follows whatever address family the bound interface has.
# A deliberate absence is only legible if it is written down.