OpenKeel: the sovereign French Cloud solution of the inherent group, with a European reach Discover inherent

Reverse-spec · Services

designate — Change history

Change history — designate — branch stable/2026.2

Branch stable/2026.2 @ e3dd774db145 — range c96809e315e8..stable/2026.2 (automatic: the point where stable/2026.2 left master, which is the 23.0.0 tag), 11 non-merge commits — target: none — analysed on 2026-10-29

Raw facts (trailers, files, release notes, carry-over commands): [_inventory/history_stable-2026.2.md](_inventory/history_stable-2026.2.md). No target project was given, so the "in target" column is not computed.

#CommitDateCategoryChangeBugImpactIn target
326d9b96afaa72025-09-15fixSOA polling treats a non-authoritative, recursive answer as "zone absent"1802227worker polling; zone deletion on BIND with recursion—
49b394e82b56a2026-02-11fixsink: IPv6 addresses expanded with ipaddress before building record names; invalid addresses skipped1919495sink record names (octetN)—
5e860d65b87252026-03-18fixPATCH /v2/zones/{id} changing only description no longer increments the serial196048701 § PATCH zone; fewer pushes—
629efeab558752026-01-09fixCAA flags accepts 0–255 instead of 0–11966982recordset validation (CAA)—
7181f61c2ac192024-04-15fixstopping a service whose tooz coordinator never started no longer raises2061457shutdown of central/producer—
8ab98ecb5e11b2026-07-10fixdeleting a pool that only contains its catalog zone is allowed2095170DELETE /v2/pools/{id}, designate-manage pool update --delete—
10326b33eb76dd2026-10-20securitynew policy set_floatingip_reverse enforced on PATCH /v2/reverse/floatingips/…216149901 § reverse DNS; policies—
11e3dd774db1452026-10-20securitythe reverse zone of a floating IP is only looked up among the managed-resource tenant's zones; a name taken by another project → 409216710401 § reverse DNS; 02 DuplicateZone—

3. SOA polling ignores recursive answers — fix

  • Commit: 26d9b96afaa74e791202e0cd6ee76f3813416b4b (backport of 7e51612545ca) — review https://review.opendev.org/q/I89c5ef0645f9688afb16c6d3c48b55f9c52b6d76 — bug 1802227.
  • Before / after: after a zone was deleted from a BIND server that is also a recursive resolver, BIND answered the worker's SOA query from the Internet (no AA flag, RA set); the worker read a serial and kept the zone DELETE/PENDING, then ERROR. Now such an answer counts as serial 0, i.e. the zone is gone (designate/dnsutils.py:281).
  • Impact on the specification: 05 polling rules; scenario 3 of 04.
  • Upgrade / operations: none.
  • Carrying it over: self-contained; test designate/tests/unit/test_dnsutils.py.

4. IPv6 addresses in sink record names — fix

  • Commit: 9b394e82b56a0ec09cb952090f12636828c692de (backport of f8599673d2b3) — bug 1919495.
  • Before / after: the octetN variables of formatv6 came from splitting the compressed address on :: and :, so 2001:db8::1 gave wrong groups; now the address is expanded (2001:0db8:0000:…:0001) and every group is available; an invalid address is logged and skipped instead of failing the notification (designate/notification_handler/base.py:83, designate/notification_handler/base.py:133).
  • Impact on the specification: 05 § sink. Deployments using %(octetN)s in formatv6 get different (correct) names: existing records keep their old names until the instance is recreated [inferred].
  • Carrying it over: self-contained; the test fixture claiming IPv6 with an IPv4 address was fixed in the same commit.

5. No serial increment for description-only zone updates — fix

  • Commit: e860d65b872565c1d5ed1941c82c5dc8da98eed8 (backport of b125e005bbf4) — bug 1960487.
  • Before / after: any PATCH of a PRIMARY zone set increment_serial, so editing the description triggered a serial bump, a push to every target and NOTIFYs. Now the serial moves only when a field other than description changed (designate/api/v2/controllers/zones/__init__.py:175). The zone still goes UPDATE/PENDING and is answered 202 **[inferred: _update_zone_in_storage always sets PENDING, designate/central/service.py:1106]**.
  • Impact on the specification: 01 § PATCH zone.
  • Carrying it over: API-only change; test in designate/tests/functional/api/v2/test_zones.py.

6. CAA flags 0–255 — fix

  • Commit: 29efeab55875bac97ce3308d2f4a26f4abdd02f1 (backport of 527277b8c767) — bug 1966982.
  • Before / after: 128 issue "ca.example" (critical flag) was refused with 400; any 8-bit value is now accepted (designate/objects/rrdata_caa.py:29).
  • Carrying it over: one-line change; test designate/tests/unit/objects/test_rrdata_caa.py.

7. Safe stop of an unstarted coordinator — fix

  • Commit: 181f61c2ac19eabd29ec038e767182f028d96acf (backport of 2705ee83949e) — bug 2061457.
  • Before / after: stopping central or the producer when the tooz backend never connected raised ToozError during shutdown; now stop() only leaves the group and stops the coordinator when it is started (designate/coordination.py:91).
  • Carrying it over: test designate/tests/unit/test_coordination.py.

8. Pool delete with only a catalog zone — fix

  • Commit: ab98ecb5e11bca11bcf93c6f78353668628bb6ad (backport of cd29b44d819f) — bug 2095170.
  • Before / after: the "pool must not contain zones" check counted the pool's own catalog zone (the elevated context bypasses the non-admin !CATALOG filter), so a pool with a catalog zone could never be deleted (400 invalid_operation). The check now excludes CATALOG zones; storage deletes the catalog zone with the pool (designate/central/service.py:2522).
  • Impact on the specification: 01 § administration resources, 02 InvalidOperation.
  • Carrying it over: test in designate/tests/functional/central/test_service.py.

10. Authorisation on floating IP PTR updates — security

  • Commit: 326b33eb76ddf35418b2be09b1c9256d379850c4 (backport of e77e3182fdad) — bug 2161499 — release note releasenotes/notes/fix-floatingip-ptr-authz-0ad8d3636b1dcded.yaml.
  • Before / after: update_floatingip called no policy, so a project reader could set or unset the PTR records of the project's floating IPs. The new rule set_floatingip_reverse = admin or (member and project_id) is checked first (designate/central/service.py:2341, designate/common/policies/record.py:63).
  • Upgrade / operations: deployments with custom policy.yaml files must add the rule if they restrict members; readers now get 403.
  • Carrying it over: prerequisite of 11 (same function area); tests in designate/tests/functional/api/v2/test_floatingips.py and designate/tests/functional/central/test_service.py.

11. Reverse zone hijack — security

  • Commit: e3dd774db145f27dbae214fcee50d3a4f5b7e2b5 (backport of 794d99c5bb66) — bug 2167104 — release note releasenotes/notes/fix-floatingip-ptr-zone-hijack-26fa38fa4e1bb2f4.yaml.
  • Before / after: the reverse zone (x.y.z.in-addr.arpa.) was looked up by name across all projects. A project could create that zone first and receive the PTR records of every other project's floating IPs in the range. The lookup and its race-condition fallback are now restricted to managed_resource_tenant_id; a zone of that name owned by anyone else → 409 duplicate_zone (designate/central/service.py:2073, designate/central/service.py:2134).
  • Upgrade / operations: existing hijacked zones are not cleaned up: operators should look for *.in-addr.arpa. zones not owned by the managed-resource tenant [inferred].
  • Carrying it over: apply after 10; test in designate/tests/functional/central/test_service.py.

Maintenance-only changes

CommitSubjectWhy it is usually not carried over
e437032be7d3Update .gitreview for stable/2026.2branch bookkeeping
543ba092a125Update TOX_CONSTRAINTS_FILE for stable/2026.2CI constraints
8cc2b33ca225Send raw zone files in the import teststest-only (bug 2170787): the import tests now post text/dns bodies as raw bytes

Carry-over plan

git cherry-pick -x 26d9b96afaa74e791202e0cd6ee76f3813416b4b   # fix: SOA polling ignores recursive answers
git cherry-pick -x 9b394e82b56a0ec09cb952090f12636828c692de   # fix: IPv6 addresses in sink record names
git cherry-pick -x e860d65b872565c1d5ed1941c82c5dc8da98eed8   # fix: no serial increment for description-only updates
git cherry-pick -x 29efeab55875bac97ce3308d2f4a26f4abdd02f1   # fix: CAA flags 0-255
git cherry-pick -x 181f61c2ac19eabd29ec038e767182f028d96acf   # fix: safe stop of an unstarted coordinator
git cherry-pick -x ab98ecb5e11bca11bcf93c6f78353668628bb6ad   # fix: pool delete with only a catalog zone
git cherry-pick -x 326b33eb76ddf35418b2be09b1c9256d379850c4   # security: policy on floating IP PTR updates (before the next one)
git cherry-pick -x e3dd774db145f27dbae214fcee50d3a4f5b7e2b5   # security: reverse zone hijack

For openkeel-designate, items 3 (polling semantics, if an SOA check is kept), 5, 6, 8, 10 and 11 are behaviour to implement from the start; 4 applies to the sink replacement; 7 has no equivalent.

Source: reverse-spec-designate/06-change-history_stable-2026.2.md. The _rewrite/ and _inventory/ files are not published on the site.