You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
deployment validator polls deprecated Skyhook CR; nodewright v0.18.0 writes status only on NodeWright #2593
The deployment-phase readiness gate polls the deprecatedSkyhook CR for tuning completion, but nodewright-operator v0.18.0 (the version pinned in recipes/registry.yaml) migrates every Skyhook to a NodeWright (nodewright.nvidia.com/v1alpha1) and writes completion status only on the NodeWright. The legacy Skyhook.status stays empty. So on a healthy, fully-tuned cluster the gate polls a status that never populates and times out after its 8m deadline, failing the deployment phase while tuning has genuinely completed.
The API server itself warns on apply: skyhook.nvidia.com/v1alpha1 Skyhook is deprecated; migrate to nodewright.nvidia.com/v1alpha1 NodeWright ... The Skyhook kind will be removed in a future release.
The operator also logs a reconcile conflict loop while trying (and failing) to mirror status back to the legacy object: error updating during migration nodewright status [no-op]: the object has been modified
Where
validators/deployment/expected_resources.go: nodewrightGVR = {Group: "skyhook.nvidia.com", Version: "v1alpha1", Resource: "skyhooks"} and the verifyNodewrightReady poll.
recipes/checks/nodewright-customizations/health-check.yaml: chainsaw assert on Skyhook.status.status == "complete".
Fix options
Read NodeWright (nodewright.nvidia.com/v1alpha1) — the authoritative, non-deprecated kind — with a fallback to Skyhook for older operator versions.
Or gate on the operator version and select the CR accordingly.
Blocks live-hardware validation evidence for any recipe using nodewright-customizations on a v0.18.0 cluster (found while collecting GB300 evidence for #2568).
Regression provenance: the validator's read of the deprecated Skyhook kind is long-standing, but it became load-bearing when the nodewright-operator pin moved v0.17.1 → v0.18.0 in #2355 (merged 0cf961fb, 2026-09-03). v0.17.1 still populated the legacy Skyhook.status; v0.18.0 migrates to NodeWright and writes status only there, with a legacy mirror that fails in a reconcile conflict loop (error updating during migration nodewright status [no-op]: the object has been modified).
The bump itself should not be reverted — it is required on OKE, where cri-o rejects v0.17.1's short-name alpine/kubectl maintenance-hook image (NVIDIA/nodewright#481). The fix belongs on the validator side: read nodewright.nvidia.com/v1alpha1 NodeWright (with a Skyhook fallback for older operators).
Impact today: this blocks live-hardware deployment-phase validation for any recipe carrying nodewright-customizations on a v0.18.0 cluster — found while collecting GB300 evidence for #2568, but not specific to it.
Related: #2594 covers the upgrade-side contract change (v0.18.0 migration + broken legacy mirror). This issue remains the validator-side fix (read NodeWright, fall back to Skyhook).
Version-disposition alternatives now tracked separately: #2595 (downgrade to v0.17.x) and #2594 (stay on v0.18.0, fix the mirror upstream). This validator-side fix is needed either way, since Skyhook is deprecated and slated for removal.
This gates the remaining v1 coverage work rather than sitting beside it: the deployment phase times out on any cluster running the pinned nodewright-operator v0.18.0, so neither the VR200/RKE2 evidence refresh nor a GB300 run on a tuned cluster (PR #2772) can produce deployment-phase evidence until it lands.
ROADMAP §2 requires published deployment, conformance, and performance evidence for every Supported coordinate.
Activity
atif1996 commentedon Sep 5, 2026
Regression provenance: the validator's read of the deprecated
Skyhookkind is long-standing, but it became load-bearing when the nodewright-operator pin moved v0.17.1 → v0.18.0 in #2355 (merged0cf961fb, 2026-09-03). v0.17.1 still populated the legacySkyhook.status; v0.18.0 migrates toNodeWrightand writes status only there, with a legacy mirror that fails in a reconcile conflict loop (error updating during migration nodewright status [no-op]: the object has been modified).The bump itself should not be reverted — it is required on OKE, where cri-o rejects v0.17.1's short-name
alpine/kubectlmaintenance-hook image (NVIDIA/nodewright#481). The fix belongs on the validator side: readnodewright.nvidia.com/v1alpha1 NodeWright(with aSkyhookfallback for older operators).Impact today: this blocks live-hardware deployment-phase validation for any recipe carrying
nodewright-customizationson a v0.18.0 cluster — found while collecting GB300 evidence for #2568, but not specific to it.atif1996 commentedon Sep 5, 2026
Related: #2594 covers the upgrade-side contract change (v0.18.0 migration + broken legacy mirror). This issue remains the validator-side fix (read
NodeWright, fall back toSkyhook).atif1996 commentedon Sep 5, 2026
Version-disposition alternatives now tracked separately: #2595 (downgrade to v0.17.x) and #2594 (stay on v0.18.0, fix the mirror upstream). This validator-side fix is needed either way, since
Skyhookis deprecated and slated for removal.fix(validator): read NodeWright CR and configured runtime-required taint
mchmarny commentedon Sep 8, 2026
Triaged: P2→P1. The current nodewright v0.18.0 status contract makes healthy deployments time out in validation; PR #2597 is actively addressing it.
fix(validator): read NodeWright CR and configured runtime-required taint
mchmarny commentedon Sep 17, 2026
Added to the v1 milestone.
This gates the remaining v1 coverage work rather than sitting beside it: the deployment phase times out on any cluster running the pinned nodewright-operator v0.18.0, so neither the VR200/RKE2 evidence refresh nor a GB300 run on a tuned cluster (PR #2772) can produce deployment-phase evidence until it lands.
ROADMAP §2 requires published deployment, conformance, and performance evidence for every Supported coordinate.
fix(validator): name an empty runtime-required taint env for what it is
fix(bundler): see a pre-rename operator before stripping its taints
3 remaining items
feat(recipes): pin nodewright v0.19.0; safe boundaries stop blocking …
fix(validator): name an empty runtime-required taint env for what it is
fix(bundler): see a pre-rename operator before stripping its taints
fix(validator): retarget the RDMA readiness assert and probe both ope…
fix(upgrade): an all-safe crossing is safe, not blocked
fix(upgrade): an unassessed origin is not rescued by crossing more bo…
fix(validator): resolve the nodewright API group by discovery; pin v0…
feat(recipes): pin nodewright v0.19.0; safe boundaries stop blocking …
fix(validator): name an empty runtime-required taint env for what it is
fix(bundler): see a pre-rename operator before stripping its taints
fix(validator): retarget the RDMA readiness assert and probe both ope…
fix(upgrade): an all-safe crossing is safe, not blocked
fix(upgrade): an unassessed origin is not rescued by crossing more bo…
fix(validator): bind nodewright discovery to the validator context