Skip to content

fix(recipes): address VR200/RKE2 review follow-ups from #2520 - #2589

Merged
yuanchen8911 merged 1 commit into
NVIDIA:mainfrom
yuanchen8911:fix/vr200-review-followups
Sep 4, 2026
Merged

fix(recipes): address VR200/RKE2 review follow-ups from #2520#2589
yuanchen8911 merged 1 commit into
NVIDIA:mainfrom
yuanchen8911:fix/vr200-review-followups

Conversation

@yuanchen8911

@yuanchen8911 yuanchen8911 commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Summary

Follow-up to #2520. Addresses the three bounded review findings from that PR's approval; the fourth is deliberately left to an issue (see below).

Motivation / Context

#2520 merged with a multi-persona review reporting 0 blockers and 0 majors, plus two 🟡 Minors and a 🔵 Nitpick explicitly called "safe-to-defer polish." This PR clears them while they are still fresh, rather than leaving them to rot in a merged PR's thread.

Follow-up to: #2520
Related: #2572, #2587

Type of Change

  • Bug fix (non-breaking change that fixes an issue)
  • Documentation update

Component(s) Affected

  • Recipe engine / data (pkg/recipe)
  • Validator (pkg/validator, validators/performance)

Implementation Notes

Stale v2.2.1 provenance (tlsroute-crd.yaml). The header still credited "agentgateway v2.2.1" as the reason the CRD is vendored. Those were the last v2.2.1 strings in the tree after #2520 dropped the pins, and the risk is not cosmetic — a maintainer trusting that provenance could revert the registry toward the v2.2.x line, which still declares 39 unbounded rule: matches(self, ...) CEL rules that a Kubernetes 1.37 apiserver rejects. That is precisely the breakage #2587 fixed and #2520's pin-drop preserved. The line-1 "Gateway API v1.2.1 experimental channel" reference is the CRD's own upstream source and is left alone.

Drift guard did not cover vr200/rke2 (validators/performance/nccl_test.go). TestNVLSRuntimeYAMLReferencesIMEXClaim listed gb200/eks and gb200/oke explicitly, so the vr200/rke2 runtime added in #2520 was never checked. That guard exists because a name mismatch between the template and ncclIMEXClaimTemplateName produces an opaque "claim not found" pod-admission failure rather than a test failure — so a mistyped name would pass every unit test and surface only on live VR hardware.

Rather than appending one path, the set is now derived by glob, so the next accelerator or service is covered the moment its template lands. A zero-match guard fails the test if the glob matches nothing, so it cannot pass while checking nothing. The guard now runs three subtests where it ran two.

Node targeting differs between the rebooting CRs (both VR200 leaves). nodewright-customizations declares nodeScheduling.accelerated, so --accelerated-node-selector flows into the tuning Skyhook CR; dranet and rdma-netns-exclusive declare no scheduling block and hardcode nodeSelector: nvidia.com/gpu.present, so those flags bypass them. On the NFD-labeled reference clusters all three selectors agree and nothing changes — it only diverges when an operator narrows the GPU node set, at which point the tuning reboot retargets to the subset while the RDMA reboot and DraNet still fan out to every gpu.present node. Documented in the caveat that already discusses the reboots, rather than templating the selectors, which would be a behavior change beyond this PR's scope.

Deliberately not addressed here

The review's remaining nitpick — that tuning evidence is status: complete-only, so the three documented-inert nvidia-tuned settings ride as no-ops while evidence records "tuning applied" — is not in this PR. It touches recipes/checks/nodewright-customizations/health-check.yaml, which neither #2520 nor this PR modifies, and the fix is an AICR-side effective-state assertion rather than a comment. The reviewer framed it as a tracking-issue item gating GA, and it belongs with the other Preview-to-GA conditions in #2572 rather than expanding this diff.

The two-Skyhook concurrent-reboot hazard is likewise out of scope and remains tracked in #2572.

Testing

go test ./validators/performance/ ./pkg/recipe/... ./pkg/bundler/
golangci-lint run -c .golangci.yaml ./validators/performance/...
make update-goldens
yamllint recipes/overlays/

All pass; golangci-lint reports 0 issues. TestNVLSRuntimeYAMLReferencesIMEXClaim now covers gb200/eks, gb200/oke and vr200/rke2 — three subtests where it previously ran two.

The render golden moved for vr200-rke2-ubuntu-inference-dynamo only, and the cause is the CRD header rather than the overlays: tlsroute-crd.yaml is copied verbatim into the bundle through rke2-inference.yaml's manifestFiles, so its header comment is part of the rendered bytes. The overlay comment edits do not move any golden — the YAML loader parses those away. That also accounts for the asymmetry: vr200-rke2-ubuntu-inference-dynamo is the only leaf in the chain that pulls tlsroute-crd.yaml, so a one-line delta is both correct and complete.

TestCatalogParityGolden, the BOM freshness tests, and the registry inventory are unchanged, which is expected — resolution records which values file a component points at rather than its content, and the BOM renders chart templates rather than vendored manifests.

Risk Assessment

  • Low — Isolated change, well-tested, easy to revert

Two comment-only edits and one test-coverage widening. No recipe behavior, pin, or generated artifact semantics change.

Rollout notes: None.

Checklist

  • Tests pass locally
  • Linter passes
  • I did not skip/disable tests to make CI green
  • I added/updated tests for new functionality — widened the IMEX drift guard
  • Changes follow existing patterns in the codebase
  • Commits are cryptographically signed (git commit -S)

Three items from the NVIDIA#2520 review, each bounded to what it corrects.

The vendored TLSRoute CRD header still credited agentgateway v2.2.1 as the
reason it exists. Those were the last v2.2.1 strings in the tree after NVIDIA#2520
dropped the pins, and the risk is not cosmetic: a maintainer trusting that
provenance could revert the registry toward the v2.2.x line, which still
carries the unbounded CEL rules a Kubernetes 1.37 apiserver rejects. Reworded
version-agnostic; the Gateway API v1.2.1 reference on line 1 is the CRD's own
upstream source and stays.

TestNVLSRuntimeYAMLReferencesIMEXClaim listed its templates explicitly and so
never covered vr200/rke2 when that runtime landed. A mistyped claim name would
pass every unit test and surface only as an opaque pod-admission failure on
live hardware. Derive the set by glob instead, with a zero-match guard so the
test cannot pass while checking nothing.

Both VR200 leaves now record that node targeting differs between the rebooting
CRs: --accelerated-node-selector reaches the tuning CR, while dranet and
rdma-netns-exclusive hardcode nvidia.com/gpu.present. Identical on NFD-labeled
reference clusters; only diverges when an operator narrows the GPU node set.

Signed-off-by: Yuan Chen <yuanchen97@gmail.com>
@yuanchen8911
yuanchen8911 requested review from a team as code owners September 4, 2026 20:26
@yuanchen8911 yuanchen8911 added the theme/recipes Recipe expansion, overlays, mixins, and component registry label Sep 4, 2026
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Recipe evidence check

Protected recipes

Recipes with committed evidence (recipes/evidence/<slug>/<source>/<digest>.yaml) that this PR affects: 2

Recipe Source Pointer Verify Digest match
vr200-rke2-ubuntu-inference-dynamo 5bf9e82f0e90a11528ac85f4bcb866c8 sha256-84bbc65b3e8c7944078298a2969fbe33775e02d2f9fed3d33021dae85cd32a0c ✅ passed ⚠️ stale (5e4a5f11113d… vs current 7c5e6fd98d0e…)
vr200-rke2-ubuntu-inference-dynamo 5bf9e82f0e90a11528ac85f4bcb866c8 sha256-fbd7e54a9c0bc2599234d248c022b471bbd2fdf9b913241ec35b5a08fa87f6ed ✅ passed ⚠️ stale (f1c583536fa8… vs current 7c5e6fd98d0e…)
vr200-rke2-ubuntu-training 5bf9e82f0e90a11528ac85f4bcb866c8 sha256-106150bfc5d3755c894197644813db4269208836b05d33cae209fb4926ec25ad ✅ passed ⚠️ stale (d9467460a59e… vs current bdc6e830100f…)
vr200-rke2-ubuntu-training 5bf9e82f0e90a11528ac85f4bcb866c8 sha256-2790d0d0be9e622a96422bf93db10ef0841dd9d6b5f79f9dde226686d9133bf6 ✅ passed ⚠️ stale (e9e7e71b2276… vs current bdc6e830100f…)
vr200-rke2-ubuntu-training 5bf9e82f0e90a11528ac85f4bcb866c8 sha256-d9a6f1c694e17028e89747893d8a74b62c2a3c2583c8070e70c922baaef5f33b ✅ passed ⚠️ stale (84769e71832a… vs current bdc6e830100f…)
Other affected recipes without evidence yet: 1

These recipes are affected by this PR but carry no committed evidence pointer, so there is
nothing to verify. This is expected — evidence is hardware-gated and added over time.

  • vr200-rke2-ubuntu-inference

How to refresh evidence

Run on a cluster matching the recipe's criteria:

aicr snapshot -o snapshot.yaml
# Profiled families (AKS/GKE gpuStack): hydrate the recipe with the
# pointer's recorded 'profile:' selection first — validating the raw
# overlay resolves only the declaration default, and 'aicr validate'
# has no --profile flag. AKS additionally needs the pool projection
# (GKE uses the plain snapshot above):
#   az aks nodepool list -g <rg> --cluster-name <cluster> -o json > pools.json
#   aicr snapshot --aks-gpu-pools pools.json -o snapshot.yaml
#   aicr recipe -s snapshot.yaml --intent <intent> [--platform <platform>] \
#     --profile <name>=<value> -o recipe.yaml
# State the target leaf's intent/platform explicitly (the snapshot
# fingerprint supplies service/accelerator/OS but intent and platform
# default to 'any') and pass -r recipe.yaml below instead of the raw
# overlay.
aicr validate \
  -r recipes/overlays/<slug>.yaml \
  -s snapshot.yaml \
  --emit-attestation ./out \
  --push ghcr.io/<your-fork>/aicr-evidence
# Copy to the per-source path printed in the emit 'copyTo' hint:
#   recipes/evidence/<slug>/<source>/<bundle-digest>.yaml

This gate is warning-only and never blocks merge. See ADR-007 for the trust model.

@coderabbitai

coderabbitai Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: c6317c84-bff7-4815-b156-4261aa769e13

📥 Commits

Reviewing files that changed from the base of the PR and between bb0b059 and 955be59.

📒 Files selected for processing (5)
  • pkg/bundler/testdata/stock_render_golden.yaml
  • recipes/components/agentgateway-crds/manifests/tlsroute-crd.yaml
  • recipes/overlays/vr200-rke2-ubuntu-inference.yaml
  • recipes/overlays/vr200-rke2-ubuntu-training.yaml
  • validators/performance/nccl_test.go

Included review availability: Your plan provides up to 12 included reviews per hour; 11 remain after this review.


📝 Walkthrough

Walkthrough

The change updates the inference bundle golden digest, revises TLSRoute CRD comments, and documents node-targeting behavior in inference and training overlays. The NVLS validation test now discovers and validates all matching runtime templates instead of two fixed paths.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: ⚪ Minimal · up to 955be

This updates deployment documentation and golden metadata while expanding NVLS template validation coverage; no current merge-blocking production or runtime risk is identified.

Suggested reviewers: arangogutierrez

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately identifies the pull request as a fix addressing review follow-ups related to the VR200/RKE2 changes. It is concise and related to the main changes, although it does not mention th…
Description check ✅ Passed The description clearly explains the three review follow-ups, affected files, scope boundaries, implementation details, and testing. It is directly related to the changeset.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

@yuanchen8911
yuanchen8911 enabled auto-merge (squash) September 4, 2026 20:48
@yuanchen8911
yuanchen8911 merged commit 2897093 into NVIDIA:main Sep 4, 2026
73 of 76 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/bundler area/recipes size/S theme/recipes Recipe expansion, overlays, mixins, and component registry

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants