docs: release 2.0 - #4448
Conversation
Signed-off-by: Alex Ball <aball@nvidia.com>
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Enterprise Run ID: ⛔ Files ignored due to path filters (14)
📒 Files selected for processing (150)
Summary by CodeRabbit
WalkthroughThe PR adds boot-interface convergence, VPC routing-profile overrides, power-shelf BMC credential rotation, REST API ownership and SKU management changes, BMC proxy tracing, DPF updates, migration checks, and documentation release updates. ChangesPlatform behavior changes
Supporting updates
Estimated code review effort: 5 (Critical) | ~120 minutes Possibly related PRs
Suggested labels: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches 💡 1🛠️ Fix failing CI checks 💡
🧪 Generate unit tests (beta)
Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 ast-grep (0.45.0)crates/rpc/build.rsast-grep timed out on this file Comment |
|
🌿 Preview your docs: https://nvidia-preview-pull-request-4448.docs.buildwithfern.com/infra-controller Here are the markdown pages you've updated: |
|
/ok to test |
7ee26b3 to
fb96e37
Compare
Signed-off-by: Alex Ball <aball@nvidia.com>
Two database migrations on `main` use SQLx version `20260722120000`. Because SQLx records migration versions as primary keys, fresh database migration fails when the second migration is recorded, blocking Core CI and dependent PRs. This change assigns the newer BMC suppression migration version `20260722120001` without changing its SQL content. It also adds a regression test covering all legacy, squash, and post-squash migrations so duplicate versions fail with a focused diagnostic. ## Related issues Resolves NVIDIA#4427 ## Type of Change - [ ] **Add** - New feature or capability - [ ] **Change** - Changes in existing functionality - [x] **Fix** - Bug fixes - [ ] **Remove** - Removed features or deprecated functionality - [ ] **Internal** - Internal changes (refactoring, tests, docs, etc.) ## Breaking Changes - [ ] **This PR contains breaking changes** ## Testing - [x] Unit tests added/updated - [ ] Integration tests added/updated - [x] Manual testing performed - [ ] No testing required (docs, internal refactor, etc.) ## Additional Notes Databases that recorded `preserve_machine_ipv6_loopback` as version `20260722120000` will apply the BMC suppression migration as `20260722120001` normally. Any database that already recorded `bmc_suppressions` as `20260722120000` requires migration-history repair before upgrading. Signed-off-by: Jay Zhu <jayzhu@nvidia.com> Signed-off-by: Alex Ball <aball@nvidia.com>
…DIA#4389) A desired boot interface can change while an unassigned host is already `Ready`, but the machine controller did not have a durable answer to "has Redfish actually been checked for this desired version?" Treating the desired row itself as proof would make restart and race behavior ambiguous, and could let allocation win while repair is pending. So, this adds a persisted verification observation and a restart-safe `BootConfiguring` path. A `Ready` host captures the exact desired target and version, observes before mutation, reuses the shared HostInit BIOS/job/boot-order work, restores and verifies lockdown, then rereads Redfish and compare-and-swaps only the version it actually checked to verified. An ordinary host that is already correct stays observation-only. The migration gives rows whose machines are already `Ready` or `Assigned` an explicitly assumed baseline instead of scheduling fleet-wide Redfish work. In-flight lifecycle rows remain pending a real observation. This is a small machine-state-gated update with no discovery-dependent joins. MAC-only to full-pair enrichment also carries a current verification forward because adding the Redfish id still names the same physical NIC. This intentionally leaves assigned hosts pending and does not periodically look for later external drift; those are separate follow-ups. It also keeps `BootConfiguring` hosts on discovery iPXE during required reboots and keeps a pending host out of allocation until its desired version is verified. ## Related issues Closes NVIDIA#4246 ## Type of Change - [x] **Add** - New feature or capability - [ ] **Change** - Changes in existing functionality - [ ] **Fix** - Bug fixes - [ ] **Remove** - Removed features or deprecated functionality - [ ] **Internal** - Internal changes (refactoring, tests, docs, etc.) ## Breaking Changes - [ ] **This PR contains breaking changes** ## Testing - [x] Unit tests added/updated - [x] Integration tests added/updated - [ ] Manual testing performed - [ ] No testing required (docs, internal refactor, etc.) ## Additional Notes - `cargo make check-format-nightly` - `cargo make clippy` - `cargo make carbide-lints` - 17 focused API-model boot-interface tests plus the state-label regression - 6 machine-controller Ready boot-config tests - 6 PostgreSQL-backed Ready recovery tests - 12 PostgreSQL migration, versioning, compare-and-swap, and lock-order tests - End-to-end desired-change to verified-Ready progression test - iPXE reboot-state regression test - Independent state-controller, Rust-simplicity, and comment-voice audits - Cloud CodeRabbit review with all substantive threads addressed --------- Signed-off-by: Chet Nichols III <chetn@nvidia.com> Signed-off-by: Alex Ball <aball@nvidia.com>
A retrying Machine-a-Tron boot action can remain at the front of the action queue after a power change. This prevents the queued power-off cleanup and power-cycle timer from running. In the observed failure, a stale `InitialDiscoveryRequest` kept retrying while the BIOS job remained scheduled until the test timed out. This change invalidates work tied to the previous boot when the machine powers off or cycles. BMC-scoped setup, BMC DHCP, and existing power-off cleanup remain queued. Pending machine and agent deadlines are cleared. Action classification uses an exhaustive match so future `FsmAction`, `Timer`, or `BmcEvent` variants require an explicit power-change policy. ## Related issues Resolves NVIDIA#4429 ## Type of Change - [ ] **Add** - New feature or capability - [ ] **Change** - Changes in existing functionality - [x] **Fix** - Bug fixes - [ ] **Remove** - Removed features or deprecated functionality - [ ] **Internal** - Internal changes (refactoring, tests, docs, etc.) ## Breaking Changes - [ ] **This PR contains breaking changes** ## Testing - [x] Unit tests added/updated - [ ] Integration tests added/updated - [ ] Manual testing performed - [ ] No testing required (docs, internal refactor, etc.) Signed-off-by: Jay Zhu <jayzhu@nvidia.com> Signed-off-by: Alex Ball <aball@nvidia.com>
…VIDIA#4432) PR NVIDIA#4389 and PR NVIDIA#4428 independently fixed the same duplicate migration version from opposite sides. The loopback preservation migration first reached `main` in NVIDIA#3913 as `20260722120000`, while the BMC suppression migration came later. NVIDIA#4428 correctly moved the newer BMC migration to `20260722120001`, but NVIDIA#4389 had already renamed the older loopback migration to that same version on an earlier base. Since NVIDIA#4428 merged first, NVIDIA#4389 left `main` with two `20260722120001` migrations and removed the identity existing databases may already have in `_sqlx_migrations`. So, restore `20260722120000_preserve_machine_ipv6_loopback.sql` and leave `20260722120001_bmc_suppressions.sql` where it is. The loopback migration SQL is byte-for-byte identical to NVIDIA#3913, existing database histories keep matching the published version and checksum, and SQLx sees each migration version exactly once again. ## Related issues None -- urgent post-merge repair for NVIDIA#4389 and NVIDIA#4428. ## Type of Change - [ ] **Add** - New feature or capability - [ ] **Change** - Changes in existing functionality - [x] **Fix** - Bug fixes - [ ] **Remove** - Removed features or deprecated functionality - [ ] **Internal** - Internal changes (refactoring, tests, docs, etc.) ## Breaking Changes - [ ] **This PR contains breaking changes** ## Testing - [ ] Unit tests added/updated - [ ] Integration tests added/updated - [x] Manual testing performed - [ ] No testing required (docs, internal refactor, etc.) ## Additional Notes - `cargo test -p carbide-api-db migrations::tests --lib` (4 passed) - `cargo make format-nightly` - `cargo make clippy` - `cargo make carbide-lints` - `git diff --check` - Restored migration blob matches the original NVIDIA#3913 blob exactly (`eaff208e4ea6d3956bdb158a84c45ee6c1362ecf`) - This restores the migration identities intended by NVIDIA#4428. A database first initialized during either brief duplicate-version window may have recorded the wrong checksum at `20260722120000` or `20260722120001`; inspect its schema and migration history and perform site-specific repair before retrying rather than blindly replaying these non-idempotent migrations Signed-off-by: Chet Nichols III <chetn@nvidia.com> Signed-off-by: Alex Ball <aball@nvidia.com>
This enforces that migration files have their timestamp fully populated, and not end in `0000`. Core migrations have more recently been using `...120000` placeholder timestamps, which means two independently authored PRs can both look fine until their versions collide on `main` -- exactly what NVIDIA#4432 is repairing now. The duplicate-version test can tell us once both migrations are together, but it cannot prevent that collision while the PRs are still independent. So, this adds a separate `migration-police` job that looks only at new files under `crates/api-db/migrations/` and rejects timestamps whose minute and second fields are both `00`. Existing migrations stay accepted, and failures name the migration plus the required `YYYYMMDDhhmmss_description.sql` format in the job log. `STYLE_GUIDE.md` and `AGENTS.md` now point contributors at the same fully populated timestamp rule. ## Related issues This supports NVIDIA#4431 ## Type of Change - [x] **Add** - New feature or capability - [ ] **Change** - Changes in existing functionality - [ ] **Fix** - Bug fixes - [ ] **Remove** - Removed features or deprecated functionality - [ ] **Internal** - Internal changes (refactoring, tests, docs, etc.) ## Breaking Changes - [ ] **This PR contains breaking changes** ## Testing - [ ] Unit tests added/updated - [ ] Integration tests added/updated - [x] Manual testing performed - [ ] No testing required (docs, internal refactor, etc.) Focused checks covered a valid full timestamp, a rejected `0000` placeholder, an accepted zero-seconds timestamp with a populated minute, historical migrations against `origin/main`, an invalid base revision, shell syntax, workflow YAML parsing, and `git diff --check`. The required local gates also passed: - `cargo make format-nightly` - `cargo make clippy` - `cargo make carbide-lints` ## Additional Notes `cargo test -p carbide-api-db migration_versions_are_unique --lib` currently fails on the pre-existing duplicate `20260722120001` migration version. NVIDIA#4432 repairs that collision and reports the migration test passing. Signed-off-by: Chet Nichols III <chetn@nvidia.com> Signed-off-by: Alex Ball <aball@nvidia.com>
… IPs (NVIDIA#4395) Previously our search IP address logic mistakenly categorized all statically allocated machine interface addresses as static BMC IPs. Now it looks to the interface type as well as the allocation type to categorize the interface. Additionally, if the response to an IP address search is associated with a switch, the CLI now prints the switch. ## Related issues Internal issue ## Type of Change - [x] **Change** - Changes in existing functionality - [x] **Fix** - Bug fixes ## Breaking Changes - [ ] **This PR contains breaking changes** ## Testing - [x] Unit tests added/updated - [x] Manual testing performed ## Additional Notes --------- Signed-off-by: Leah Itagaki <litagaki@nvidia.com> Signed-off-by: Alex Ball <aball@nvidia.com>
Provider Admins can create, partially update, and delete a SKU for a selected Site. The REST API sends the mutation through Temporal and the Site Agent to that Site's real NICo Core service. POST and PATCH return the Core-backed SKU shape; PATCH preserves fields omitted from the request. This adds REST API support for managing SKUs. Resolves NVIDIA#2810 ### What this PR does Adds Site-scoped REST endpoints to create, partially update, and delete Core-backed SKUs. Mutations run through Temporal and the Site Agent to the selected Site's NICo Core. The writable schema includes SKU v5 storage size bounds and PCI patterns; ignored legacy write fields such as `capacityMb` are rejected. --------- Signed-off-by: Leah Itagaki <litagaki@nvidia.com> Signed-off-by: Alex Ball <aball@nvidia.com>
…a RotatingBmc state (NVIDIA#4406) Drive Ready power shelves through a top-level RotatingBmc state to converge their PMC to the site-wide BMC target, mirroring the switch and machine controllers. The engine gains a DispatchVendor::Probe path so PMCs (whose precise Redfish vendor is not persisted) resolve their vendor via a bounded two-candidate authenticated probe. ## Related issues NVIDIA#367 ## Type of Change - [x] **Add** - New feature or capability - [ ] **Change** - Changes in existing functionality - [ ] **Fix** - Bug fixes - [ ] **Remove** - Removed features or deprecated functionality - [ ] **Internal** - Internal changes (refactoring, tests, docs, etc.) ## Breaking Changes - [ ] **This PR contains breaking changes** ## Testing - [x] Unit tests added/updated - [ ] Integration tests added/updated - [ ] Manual testing performed - [ ] No testing required (docs, internal refactor, etc.) ## Additional Notes Signed-off-by: Alex Ball <aball@nvidia.com>
…IA#4404) Add rust code generator for dpuserviceconfiguration and dpuservicetemplate files for doca-weave-dhcp-agent and doca-weave-flow-controller ## Related issues NVIDIA#3205 ## Type of Change - [x ] **Add** - New feature or capability - [ ] **Change** - Changes in existing functionality - [ ] **Fix** - Bug fixes - [ ] **Remove** - Removed features or deprecated functionality - [ ] **Internal** - Internal changes (refactoring, tests, docs, etc.) ## Breaking Changes - [ ] **This PR contains breaking changes** ## Testing - [x] Unit tests added/updated - [ ] Integration tests added/updated - [ ] Manual testing performed - [ ] No testing required (docs, internal refactor, etc.) ## Additional Notes [dpuserviceconfiguration-doca-weave-dhcp-agent.yaml](https://github.com/user-attachments/files/30560955/dpuserviceconfiguration-doca-weave-dhcp-agent.yaml) [dpuserviceconfiguration-doca-weave-flow-controller.yaml](https://github.com/user-attachments/files/30560962/dpuserviceconfiguration-doca-weave-flow-controller.yaml) [dpuservicetemplate-doca-weave-dhcp-agent.yaml](https://github.com/user-attachments/files/30560971/dpuservicetemplate-doca-weave-dhcp-agent.yaml) [dpuservicetemplate-doca-weave-flow-controller.yaml](https://github.com/user-attachments/files/30561054/dpuservicetemplate-doca-weave-flow-controller.yaml) Signed-off-by: aadvani <aadvani@nvidia.com> Signed-off-by: Alex Ball <aball@nvidia.com>
…DIA#4175) - Adds per-request OTLP spans for BMC proxy calls with HTTP method, path, response status, and target BMC IP. - Continues inbound W3C trace context and injects the resulting context into upstream Redfish and Carbide API requests. - Keeps tracing disabled by default and supports TOML or `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` configuration. - Continues inbound W3C trace context on the proxy span and re-injects it on the BMC hop (standard extract/inject). ## Related issues Closes NVIDIA#2355 ## Type of Change - [x] **Add** - New feature or capability - [ ] **Change** - Changes in existing functionality - [ ] **Fix** - Bug fixes - [ ] **Remove** - Removed features or deprecated functionality - [ ] **Internal** - Internal changes (refactoring, tests, docs, etc.) ## Breaking Changes - [ ] **This PR contains breaking changes** ## Testing - [x] Unit tests added/updated - [ ] Integration tests added/updated - [ ] Manual testing performed - [ ] No testing required (docs, internal refactor, etc.) ## Additional Notes `nico-api` (`crates/api/src/logging.rs`) and `nico-dns` (`crates/dns/src/main.rs`) still propagate OTLP exporter build failures out of startup and never shut their tracer providers down. Aligning them with the behavior introduced here is left to a separate change so this PR stays scoped to the proxy. --------- Signed-off-by: Kun Zhao <kunzhao@nvidia.com> Signed-off-by: Alex Ball <aball@nvidia.com>
Signed-off-by: Alex Ball <aball@nvidia.com>
Adds create-time, per-VPC routing-profile overrides on top of named routing-profiles. Each explicitly supplied override replaces the corresponding base-profile value, while omitted properties continue to inherit from the named profile. The operator-controlled `internal` and `access_tier` properties cannot be overridden at the VPC level. The effective profile is resolved from the current API configuration and persisted VPC overrides rather than stored separately, so API responses reflect changes to the named base profile. ## Related issues NVIDIA#2624 ## Type of Change - [x] **Add** - New feature or capability - [ ] **Change** - Changes in existing functionality - [ ] **Fix** - Bug fixes - [ ] **Remove** - Removed features or deprecated functionality - [ ] **Internal** - Internal changes (refactoring, tests, docs, etc.) ## Breaking Changes - [ ] **This PR contains breaking changes** ## Testing - [x] Unit tests added/updated - [x] Integration tests added/updated - [ ] Manual testing performed - [ ] No testing required (docs, internal refactor, etc.) ## Additional Notes NVIDIA#2624 Signed-off-by: Alex Ball <aball@nvidia.com>
…e Tenant visibility (NVIDIA#4067) This PR continues implementation of Templated iPXE Operating System in NICo REST API. Specifically it adds Providers capabilities regarding Templated iPXE Operating System and makes Providers-created OS visible to Tenants. ## Related issues Builds on NVIDIA#3569. ## Type of Change - [X] **Add** - New feature or capability ## Testing - [X] Unit tests added/updated - [X] Manual tests performed (E2E tests of creation/delete of OS from REST to Core) Signed-off-by: Patrice Breton <pbreton@nvidia.com> Signed-off-by: Alex Ball <aball@nvidia.com>
fb96e37 to
b466b1a
Compare
🔐 TruffleHog Secret Scan✅ No secrets or credentials found! Your code has been scanned for 700+ types of secrets and credentials. All clear! 🎉 🕐 Last updated: 2026-07-31 19:39:27 UTC | Commit: b466b1a |
|
Well that rebase went sideways. Closing and cherry-picking. |
Final cleanup for v2.0
Related issues
Closes #4202.
Type of Change
Breaking Changes
Testing
Signed-off-by: Alex Ball aball@nvidia.com