Skip to content

v0.4.0

Latest

Choose a tag to compare

@scotwells scotwells released this 02 Sep 21:25
22dc031

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 002004 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
  • uniqueWithin separates address spaces; overlapping root pools are refused
  • reclaimPolicy: Retain honoured when a claim is released
  • Cross-project class references, gated by a use check 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