Created 2026-08-03 at operator request as a durable reference. Built from the repo's own MEASURED research, not from general knowledge -- every IPv6 verdict cites its source. Where the repo has NOT assessed a charm's IPv6 behaviour, the cell says NOT ASSESSED rather than guessing (fabricating a compatibility claim is the cardinal sin, CLAUDE.md posture).
Scope: the 33 distinct charms in bundle.yaml (56 applications; hacluster x12 and mysql-router x12 are subordinate instances of one charm each).
D-141 (ADOPTED 2026-08-03) makes IPAM allocations dual-stack and status-distinguished: v4 active, GUA v6 reserved until the consuming layer is capable. This table IS the named promotion gate for the API-charm v6 VIPs -- a reserved v6 VIP block moves to active only when both blocker layers below clear. See docs/design-decisions.md D-141.
A charm being "IPv6-capable" does not make the deployed cloud v6. Two separate things block it, and they are at different layers:
Triaged/Low, open since 2017, NOT fixed in juju 3.6 LTS or 4.0 (release notes checked 2026-08-03: no address-model change). This alone blocks EVERY v6 VIP today, regardless of charm. Measured here: keystone, ceph-mon and vault containers all hold zero global v6.IPv4 is the proven base for every charm -- the entire cloud was built and verified on v4 across VR0 and VR1, so the IPv4 column is "Full" throughout by deployment evidence.
Legend (IPv6 column):
| Charm | Inst. | IPv4 | IPv6 | Evidence (source) |
|---|---|---|---|---|
| barbican | 1 | Full | Capable | Frontend HAProxy binds v6 when ipv6_enabled (kernel sysctl, =0 on nodes); charms.openstack family. Blocked only by juju addressing. stage5-prefer-ipv6-charm-research-20260731.txt F1 |
| cinder | 1 | Full | Capable | charmhelpers HAProxy family, same as barbican. Same research |
| designate | 1 | Full | Capable | charms.openstack family. Same research |
| glance | 1 | Full | Capable | charmhelpers family. Same research |
| keystone | 1 | Full | Capable | charmhelpers family; MEASURED live 2026-08-03 -- v4 VIPs accepted, v6 VIPs rejected ONLY because container has no global v6 (Invalid vips), not a charm defect |
| magnum | 1 | Full | Capable | charms.openstack family. Same research |
| neutron-api | 1 | Full | Capable | charmhelpers family. Same research |
| nova-cloud-controller | 1 | Full | Capable | charmhelpers family. Same research |
| octavia | 1 | Full | Capable | charms.openstack family. Same research |
| openstack-dashboard | 1 | Full | Capable | charmhelpers family. Same research |
| placement | 1 | Full | Capable | charms.openstack family. Same research |
| hacluster | 12 | Full | No | Hard-writes ip_version: ipv4 in templates/corosync.conf, 2.4/stable rev 166 (2026-06-29). LP #2111852 Fix Committed but NOT RELEASED. CURRENT-STATE.md:2498-2500. This is the VIP-manager itself -- it gates every API charm's HA VIP |
| mysql-innodb-cluster | 1 | Full | No | Builds bare user:pw@addr DB URIs invalid for a v6 literal without brackets. CURRENT-STATE.md:2496-2498 |
| mysql-router | 12 | Full | No | Same bare-URI defect as mysql-innodb-cluster (x12 subordinate). Same source |
| ceph-osd | 1 | Full | No | Breaks on a v6-only plane BOTH ways: prefer-ipv6:false -> inet_aton then IPv4-only IN A lookup (LP #2109798, New); true -> bare get_ipv6_addr() returns only SLAAC, but VR1 nodes hold MAAS STATIC v6 (LP #2061836, New on ceph-osd). MEASURED here, rev 953. CURRENT-STATE.md:2480-2489 |
| ceph-mon | 1 | Full | Partial | LP #2061836 Fix Committed on charm-ceph-mon 2024-06-14 (the get_ipv6_addr half). The inet_aton half (LP #2109798) may still apply; ceph-mon not independently re-measured here -- verdict inferred from the LP, not from a live run |
| ovn-central | 1 | Full | No (data plane) | OVN documents the encap column as "The IPv4 address of the encapsulation tunnel endpoint" (ovn-sb.xml:565); every ovn-encap-ip in OVN 24.03's test suite is IPv4. CURRENT-STATE.md:2501-2503. Reported from capture, not independently re-verified |
| ovn-chassis | 2 | Full | No (data plane) | Same OVN encap IPv4-only constraint (ovn-chassis + ovn-chassis-octavia). Same source. NOTE: the bridge-interface-mappings / provider egress path is v4/v6-agnostic (MAC-based) and works |
| neutron-api-plugin-ovn | 1 | Full | NOT ASSESSED | Subordinate to neutron-api; its own v6 behaviour not separately measured. The OVN data-plane constraint above governs the encap, not this plugin's API path |
| ceph-radosgw | 1 | Full | NOT ASSESSED | Has a hacluster VIP (so inherits the hacluster "No" for its VIP), but the radosgw charm's own v6 handling was not measured |
| barbican-vault | 1 | Full | NOT ASSESSED | Subordinate; not measured for v6 |
| ceph-rbd-mirror | 1 | Full | NOT ASSESSED | Cross-DC replication charm; not measured for v6 |
| cinder-backup | 1 | Full | NOT ASSESSED | Subordinate; not measured for v6 |
| cinder-ceph | 1 | Full | NOT ASSESSED | Subordinate; not measured for v6 |
| designate-bind | 1 | Full | NOT ASSESSED | DNS backend; not measured for v6 |
| glance-simplestreams-sync | 1 | Full | NOT ASSESSED | Not measured for v6 |
| magnum-dashboard | 1 | Full | NOT ASSESSED | Horizon plugin; not measured for v6 |
| memcached | 1 | Full | NOT ASSESSED | Not measured for v6 |
| nova-compute | 1 | Full | NOT ASSESSED | Runs on the metal node (not a container), so the juju container-addressing blocker does not apply to it; its own v6 handling not measured |
| octavia-dashboard | 1 | Full | NOT ASSESSED | Horizon plugin; not measured for v6 |
| octavia-diskimage-retrofit | 1 | Full | n/a | Image-build helper; no VIP / not on a v6 network path |
| rabbitmq-server | 1 | Full | NOT ASSESSED | Messaging; not measured for v6 |
| vault | 1 | Full | NOT ASSESSED | Container measured to have no global v6 (layer-1 blocker applies); the vault charm's own v6 handling not separately assessed |
vip: line carries the v4 triple AND the v6 triple (e.g. 10.12.4.50 10.12.8.50 10.12.12.50 2602:...). The v4 legs are live and already ACCEPTED by the charms; only the v6 legs are rejected. "Back to IPv4" = drop the v6 legs from render/values/vr1-dc0-vips.yaml and re-render; the working v4 config stays. Also recoverable from git at the parent of a9e3258 (the D-139 GUA move) and reconstructable from scripts/lib-net.sh (VIP_PREFIX_PROVIDER/ADMIN/INTERNAL = 10.12.4/8/12).Update a row only from a MEASURED source and cite it. When a Launchpad bug changes state, update the cell AND the citation. Promote a NOT ASSESSED to a verdict only after a real measurement (charm artifact read or live run), never from a general expectation.