Let a data plane own Programmed on network interfaces - #391
Merged
Conversation
scotwells
marked this pull request as ready for review
August 21, 2026 00:57
scotwells
enabled auto-merge
August 21, 2026 00:57
privateip
previously approved these changes
Aug 21, 2026
NSO seeds Programmed=Unknown and leaves it to whoever realizes the interface. Lock that in with regression tests covering the requeue, rejection and Retain-rebind paths, add the ClusterRole a data plane needs to report it, and correct the enhancement's account of which component creates a VPCAttachment. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
scotwells
force-pushed
the
feat/external-programmed-writer
branch
from
August 21, 2026 01:28
33920c6 to
7e71057
Compare
privateip
approved these changes
Aug 21, 2026
4 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
NSO seeds
Programmed=Unknownon aNetworkInterfaceand its claim and then leaves it alone, because the component that realizes the interface owns it. A VPC attachment controller is about to become that component. This confirms NSO will not fight it, and corrects the enhancement's account of how an attachment comes into being.NSO does not overwrite an external writer, on any path.
seedProgrammedand itsNetworkInterfaceequivalent both write only when the condition is absent, and every other write is field-scoped on a freshly read object — nothing assignsstatuswholesale, and nothing touchesstatus.vpcorstatus.attachmentRef. That holds through a requeue, a rejection (which demotes onlyReady, andBound/Allocatedfor a claim that never bound), and a release-and-rebind underreclaimPolicy: Retain. No fix was needed; two regression tests now lock the behaviour in so a future status write cannot quietly clobber the data plane's report.Docs. "Reaching the data plane" said the agent on the node creates the
VPCAttachmentfrom the interface. That direction cannot work: the CNI configuration the attachment produces has to exist before the pod's sandbox is created, so an attachment that only appears as a result of the attach is too late to cause one. The section and its diagram now describe the realized design — the infrastructure provider writes the spec before the pod, the node reports status — and state explicitly which three status fields NSO never writes and never clears.RBAC. Added
networkinterface-dataplane-role, alongside the per-CRD helper roles this repo already ships: read on interfaces and claims, status write on both. The definition belongs here because the resources do; binding it to a specific service account is a deployment concern and stays in infra.One observation left alone, worth a decision elsewhere: under
Retain, an interface released back toAvailablekeeps whateverProgrammedthe data plane last reported, even though nothing is attached. Clearing it would make NSO a writer of a condition it deliberately does not own, so the stale value is the data plane's to correct.make lintclean,internal/controllerenvtest suite green.Related
Programmedis the condition #164's contract leaves to whoever realizes the interface. This confirms NSO will not overwrite an external writer, and locks that in with tests. The first writer is the VPC controller in datum-cloud/cloud#6.datum-cloud/compute#112 is the consumer end: the address and its conditions surface on
Instance.status.🤖 Generated with Claude Code