Replaces pool-by-name claiming with the IPClass model, and makes IPAM
self-service.
Breaking
IPPool.status.capacity is now a string rather than an integer, and
IPClaim.spec.poolRef / spec.poolSelector are gone. Pools and claims written
by v0.3.1 cannot be decoded by this release: get, list, patch and even
delete all fail on them, and a single undecodable pool fails list ippools
for its whole project. Delete existing pools and claims before upgrading —
release the claims first, since a pool holding allocations refuses to delete.
IPClassSpec.Visibility, IPClassSpec.BackingProjects and UID on ScopeRef
/ ObjectRef were also removed, but each was added after v0.3.1 and never
shipped, so nothing in a v0.3.1 deployment refers to them.
Database migrations 002–004 apply automatically on rollout. They are
additive and safe on a populated database, but there is no down-migration.
The class model
A claim now names an IPClass and carries a scope, rather than naming a pool.
Classes declare who their pools serve; pools publish themselves to classes via
spec.classNames, and only within their own project. The allocator resolves a
claim's class and provisions that class's pool chain on first claim.
- New cluster-scoped kind
IPClass, with per-family default-class selection uniqueWithinseparates address spaces; overlapping root pools are refusedreclaimPolicy: Retainhonoured when a claim is released- Cross-project class references, gated by a
usecheck on the referenced class - Class reservations applied to the pools a class provisions
Claims made without a class name resolve to the default class for their address
family. A deployment with no IPClass objects authored cannot serve claims —
author classes before pointing consumers at this release.
Allocation engine
Rewritten on the standard library: a streaming first-fit search that pages from
a recorded floor instead of loading the whole pool, with a maintained
consumption total rather than a recomputed one. largestFreePrefix and summed
utilization are gone; utilizationPercent is now fractional.
Enablement
IPAM is now self-service: a project enables it without provider approval.
Entitlements already sitting in PendingApproval resolve to Active on their
own once this ships — no approvals to grant, nothing to recreate.
Also
- Public error taxonomy (
pkg/ipamerrors) with reason codes that survive the wire - Metrics for automatic pool provisioning, and a provider dashboard
- New CLI commands:
class,claim,allocation,address,scope - Duplicate claim or child-pool names return 409 rather than 500
- Claims are refused into a namespace that is missing or terminating
- Writes from a caller with no project are refused
- arm64 images are now actually built for arm64