Skip to content

Report whether a location's address range is in place on the cell - #32

Merged
scotwells merged 2 commits into
mainfrom
feat/subnet-programmed
Oct 14, 2026
Merged

scotwells merged 2 commits into
mainfrom
feat/subnet-programmed

Conversation

@scotwells

Copy link
Copy Markdown
Collaborator

Why

Every subnet in a project reads NotProgrammed forever, and datumctl names it as the root cause on every network, while the workloads behind it serve traffic. The networking operator leaves the Subnet's Programmed condition for the data plane to close, the way it does for NetworkInterfaces, and nothing on a cell ever closed it.

What changes for a customer

Once the companion PRs land, a network's address range in a location reads Ready only when the cells there actually route it. A range a VPC was built without surfaces as NotProgrammed instead of silently never working.

How

The vpc-controller already builds a VPC per network presence carrying the subnet's range, and marks it ready once the fabric identity lands. A new SubnetReconciler turns that into the report:

VPC state Subnet Programmed
Ready and carries the range True / Programmed
Not built yet, or awaiting fabric identity False / ProgrammingInProgress
Built without the range (address space is fixed at creation) False / NotProgrammed

The condition's observedGeneration is the project's generation stamped on the copy by the operator, falling back to the copy's own, so the project can match the report to what it asked for. It writes only the one condition on the propagated copy; the federation carries it back to the project.

RBAC gains subnets/status update.

Verified

Unit tests for each row above and for the generation fallback. Lint and vet clean.

Rollout

Safe on its own: until the hub aggregates and the operator reads it, the report stays on the cell copy.

Related PRs linked in the first comment.

🤖 Generated with Claude Code

The networking operator leaves a Subnet's Programmed condition for the
data plane to close, and nothing on a Datum cell ever closed it, so every
address range reads as not programmed in the project while its workloads
serve traffic. The answer is here: the VPC built for the network's
presence carries the subnet's range, and is ready once the fabric
identity lands.

A new reconciler writes Programmed on the propagated Subnet copy from
that VPC: in place once a ready VPC carries the range, in progress while
the VPC is being built or awaits its identity, and not programmed for a
range the VPC was built without, since its address space is fixed at
creation. The report is made against the project's generation stamped on
the copy, and the federation carries it back.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@scotwells

Copy link
Copy Markdown
Collaborator Author

Related: project-side reader datum-cloud/network-services-operator#640, hub aggregation https://github.com/datum-cloud/infra/pull/6988. All three are independently safe to ship; the signal is live once all three are deployed.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@scotwells
scotwells marked this pull request as ready for review October 14, 2026 14:07
@scotwells
scotwells requested a review from a team as a code owner October 14, 2026 14:07
@scotwells
scotwells requested a review from privateip October 14, 2026 14:08
@scotwells
scotwells merged commit 55c38b5 into main Oct 14, 2026
8 checks passed
@scotwells
scotwells deleted the feat/subnet-programmed branch October 14, 2026 14:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants