Skip to content

docs: release 2.0 - #4448

Closed
polarweasel wants to merge 15 commits into
NVIDIA:mainfrom
polarweasel:ab/tag-v2.0-features
Closed

docs: release 2.0#4448
polarweasel wants to merge 15 commits into
NVIDIA:mainfrom
polarweasel:ab/tag-v2.0-features

Conversation

@polarweasel

Copy link
Copy Markdown
Contributor

Final cleanup for v2.0

Related issues

Closes #4202.

Type of Change

  • 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
  • Manual testing performed
  • No testing required (docs, internal refactor, etc.)

Signed-off-by: Alex Ball aball@nvidia.com

Signed-off-by: Alex Ball <aball@nvidia.com>
@polarweasel
polarweasel requested a review from nv-dmendoza July 31, 2026 17:49
@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: b009361c-2ff5-42bd-8ac7-56ec8fe1fd34

📥 Commits

Reviewing files that changed from the base of the PR and between fb96e37 and b466b1a.

⛔ Files ignored due to path filters (14)
  • Cargo.lock is excluded by !**/*.lock
  • rest-api/proto/core/gen/v1/common_nico.pb.go is excluded by !**/*.pb.go, !**/gen/**, !rest-api/**/*.pb.go
  • rest-api/proto/core/gen/v1/nico_nico.pb.go is excluded by !**/*.pb.go, !**/gen/**, !rest-api/**/*.pb.go
  • rest-api/sdk/standard/api_operating_system.go is excluded by !rest-api/sdk/standard/api_*.go
  • rest-api/sdk/standard/api_sku.go is excluded by !rest-api/sdk/standard/api_*.go
  • rest-api/sdk/standard/model_operating_system_create_request.go is excluded by !rest-api/sdk/standard/model_*.go
  • rest-api/sdk/standard/model_operating_system_update_request.go is excluded by !rest-api/sdk/standard/model_*.go
  • rest-api/sdk/standard/model_sku.go is excluded by !rest-api/sdk/standard/model_*.go
  • rest-api/sdk/standard/model_sku_chassis.go is excluded by !rest-api/sdk/standard/model_*.go
  • rest-api/sdk/standard/model_sku_create_request.go is excluded by !rest-api/sdk/standard/model_*.go
  • rest-api/sdk/standard/model_sku_ethernet_device.go is excluded by !rest-api/sdk/standard/model_*.go
  • rest-api/sdk/standard/model_sku_infiniband_device.go is excluded by !rest-api/sdk/standard/model_*.go
  • rest-api/sdk/standard/model_sku_storage.go is excluded by !rest-api/sdk/standard/model_*.go
  • rest-api/sdk/standard/model_sku_update_request.go is excluded by !rest-api/sdk/standard/model_*.go
📒 Files selected for processing (150)
  • .github/workflows/ci.yaml
  • AGENTS.md
  • Cargo.toml
  • STYLE_GUIDE.md
  • crates/admin-cli/src/credential/force_bmc/args.rs
  • crates/admin-cli/src/rpc.rs
  • crates/admin-cli/src/vpc/create/args.rs
  • crates/admin-cli/src/vpc/show/cmd.rs
  • crates/api-core/src/cfg/README.md
  • crates/api-core/src/cfg/file.rs
  • crates/api-core/src/db_init.rs
  • crates/api-core/src/dpf_services.rs
  • crates/api-core/src/ethernet_virtualization.rs
  • crates/api-core/src/handlers/bmc_credential_rotation.rs
  • crates/api-core/src/handlers/finder.rs
  • crates/api-core/src/handlers/vpc.rs
  • crates/api-core/src/instance/mod.rs
  • crates/api-core/src/ipxe.rs
  • crates/api-core/src/setup.rs
  • crates/api-core/src/tests/common/api_fixtures/mod.rs
  • crates/api-core/src/tests/finder.rs
  • crates/api-core/src/tests/instance_allocate.rs
  • crates/api-core/src/tests/instance_config_update.rs
  • crates/api-core/src/tests/ipxe.rs
  • crates/api-core/src/tests/machine_network.rs
  • crates/api-core/src/tests/machine_states.rs
  • crates/api-core/src/tests/network_segment.rs
  • crates/api-core/src/tests/power_shelf_state_controller/bmc_rotation.rs
  • crates/api-core/src/tests/power_shelf_state_controller/error_state.rs
  • crates/api-core/src/tests/power_shelf_state_controller/maintenance.rs
  • crates/api-core/src/tests/power_shelf_state_controller/mod.rs
  • crates/api-core/src/tests/power_shelf_state_controller/reprovisioning.rs
  • crates/api-core/src/tests/vpc.rs
  • crates/api-core/tests/integration/compute_allocation.rs
  • crates/api-core/tests/integration/forge_agent_control.rs
  • crates/api-db/migrations/20260722120001_bmc_suppressions.sql
  • crates/api-db/migrations/20260730120000_machine_boot_interface_status.sql
  • crates/api-db/migrations/20260730120001_power_shelf_bmc_credential_rotation_requested.sql
  • crates/api-db/migrations/20260731123242_vpc_routing_profile_overrides.sql
  • crates/api-db/src/machine.rs
  • crates/api-db/src/machine_desired_boot_interface.rs
  • crates/api-db/src/machine_interface_address.rs
  • crates/api-db/src/migrations/mod.rs
  • crates/api-db/src/power_shelf.rs
  • crates/api-db/src/sql/machine_snapshots.sql.template
  • crates/api-db/src/sql/managed_hosts.sql.template
  • crates/api-db/src/vpc.rs
  • crates/api-model/src/lib.rs
  • crates/api-model/src/machine/json.rs
  • crates/api-model/src/machine/mod.rs
  • crates/api-model/src/machine/slas.rs
  • crates/api-model/src/machine/status.rs
  • crates/api-model/src/machine_boot_interface.rs
  • crates/api-model/src/power_shelf/mod.rs
  • crates/api-model/src/power_shelf/slas.rs
  • crates/api-model/src/test_support/machine_snapshot.rs
  • crates/api-model/src/vpc/capability.rs
  • crates/api-model/src/vpc/mod.rs
  • crates/api-model/src/vpc/routing_profile.rs
  • crates/api-web/src/tests/env.rs
  • crates/api-web/src/vpc.rs
  • crates/api-web/templates/vpc_detail.html
  • crates/bmc-mock/src/redfish/computer_system.rs
  • crates/bmc-proxy/Cargo.toml
  • crates/bmc-proxy/src/bmc_proxy.rs
  • crates/bmc-proxy/src/config.rs
  • crates/bmc-proxy/src/main.rs
  • crates/bmc-proxy/src/metrics.rs
  • crates/bmc-proxy/src/setup.rs
  • crates/credential-rotation/src/lib.rs
  • crates/dpf/src/flavor.rs
  • crates/dpf/src/lib.rs
  • crates/dpf/src/sdk.rs
  • crates/dpf/src/types.rs
  • crates/machine-a-tron/src/api_client.rs
  • crates/machine-a-tron/src/machine_state_machine.rs
  • crates/machine-controller/src/handler.rs
  • crates/machine-controller/src/handler/rotation.rs
  • crates/machine-controller/src/io.rs
  • crates/machine-controller/src/metrics.rs
  • crates/machine-controller/tests/integration/bmc_rotation.rs
  • crates/machine-controller/tests/integration/maintenance.rs
  • crates/machine-controller/tests/integration/power_management.rs
  • crates/power-shelf-controller/Cargo.toml
  • crates/power-shelf-controller/src/context.rs
  • crates/power-shelf-controller/src/handler.rs
  • crates/power-shelf-controller/src/io.rs
  • crates/power-shelf-controller/src/lib.rs
  • crates/power-shelf-controller/src/ready.rs
  • crates/power-shelf-controller/src/rotating_bmc.rs
  • crates/redfish/src/libredfish/test_support.rs
  • crates/rpc/build.rs
  • crates/rpc/proto/common.proto
  • crates/rpc/proto/forge.proto
  • crates/rpc/src/model/power_shelf.rs
  • crates/rpc/src/model/vpc.rs
  • crates/test-harness/src/managed_host.rs
  • crates/trace-propagation/src/lib.rs
  • crates/trace-propagation/tests/no_global_propagator.rs
  • crates/trace-propagation/tests/non_w3c_propagator.rs
  • crates/uuid/src/device/mod.rs
  • docs/configuration/component-manager-rms.md
  • docs/configuration/dns.md
  • docs/configuration/machine_identity.md
  • docs/configuration/secrets-storage.md
  • docs/hcl.md
  • docs/manuals/vpc/flat_vpcs_zero_dpu.md
  • docs/observability/tracing.md
  • docs/operations/firmware-updates.md
  • docs/operations/monitoring-health.md
  • docs/operations/nvos-password-rotation.md
  • docs/operations/tenant-lifecycle-cleanup.md
  • docs/provisioning/boot-interfaces-and-dpu-modes.md
  • docs/provisioning/machine-validation.md
  • fern/changelog/2026-01-23.mdx
  • fern/changelog/2026-02-12.mdx
  • fern/changelog/2026-05-15.mdx
  • fern/changelog/2026-07-31.mdx
  • fern/docs.yml
  • fern/fern.config.json
  • rest-api/api/pkg/api/handler/instancetype.go
  • rest-api/api/pkg/api/handler/operatingsystem.go
  • rest-api/api/pkg/api/handler/operatingsystem_templated_proxy_test.go
  • rest-api/api/pkg/api/handler/operatingsystem_test.go
  • rest-api/api/pkg/api/handler/sku.go
  • rest-api/api/pkg/api/handler/sku_test.go
  • rest-api/api/pkg/api/model/expectedmachine_test.go
  • rest-api/api/pkg/api/model/operatingsystem.go
  • rest-api/api/pkg/api/model/operatingsystem_templated_test.go
  • rest-api/api/pkg/api/model/operatingsystem_test.go
  • rest-api/api/pkg/api/model/sku.go
  • rest-api/api/pkg/api/model/sku_test.go
  • rest-api/api/pkg/api/routes.go
  • rest-api/api/pkg/api/routes_test.go
  • rest-api/db/pkg/db/model/operatingsystem.go
  • rest-api/db/pkg/db/model/operatingsystem_ipxe_test.go
  • rest-api/db/pkg/db/model/operatingsystem_test.go
  • rest-api/db/pkg/db/model/sku.go
  • rest-api/db/pkg/db/model/sku_test.go
  • rest-api/db/pkg/migrations/20260729020000_sku_description.go
  • rest-api/docs/index.html
  • rest-api/openapi/oasdiff-breaking-changes-ignore.txt
  • rest-api/openapi/spec.yaml
  • rest-api/proto/core/src/v1/common_nico.proto
  • rest-api/proto/core/src/v1/nico_nico.proto
  • rest-api/workflow/pkg/activity/operatingsystem/operatingsystem.go
  • rest-api/workflow/pkg/activity/operatingsystem/operatingsystem_test.go
  • rest-api/workflow/pkg/activity/sku/sku.go
  • rest-api/workflow/pkg/activity/sku/sku_test.go
  • scripts/check-migration-filenames.sh

Summary by CodeRabbit

  • New Features

    • Added per-VPC routing profile overrides and effective profile visibility.
    • Added automatic boot-interface configuration tracking and reconciliation.
    • Added power-shelf BMC credential rotation, including forced rotation.
    • Added SKU creation, updating, and deletion through the REST API.
    • Expanded operating-system ownership, authorization, and site visibility controls.
    • Added configurable request tracing for the BMC proxy.
  • Documentation

    • Added release badges, redirects, formatting improvements, and v2.0 upgrade guidance.

Walkthrough

The 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.

Changes

Platform behavior changes

Layer / File(s) Summary
Boot-interface convergence
crates/api-model/..., crates/api-db/..., crates/machine-controller/...
Machines persist boot-interface observations and reconcile desired configurations through BootConfiguring, with allocation gating, Redfish verification, retry handling, SLA reporting, and restart-safe state transitions.
VPC routing-profile overrides
crates/api-core/..., crates/api-model/..., crates/api-db/..., crates/rpc/..., crates/api-web/...
VPCs accept presence-aware routing-profile overrides, persist them, resolve effective profiles, expose them through RPC and web responses, and reject unsupported seeded configurations.
Power-shelf BMC rotation
crates/power-shelf-controller/..., crates/credential-rotation/..., crates/api-core/...
Power shelves support passive and forced BMC credential rotation with vendor probing, quarantine, retry state, persistence, and controller integration.
REST API ownership and SKU management
rest-api/api/..., rest-api/db/..., rest-api/openapi/spec.yaml
Operating-system ownership and visibility rules now support provider and tenant scopes. SKU create, update, and delete endpoints synchronize Core and REST records and support schema version 5 fields.
BMC proxy tracing
crates/bmc-proxy/..., crates/trace-propagation/...
The BMC proxy supports configurable OTLP tracing, W3C propagation, middleware clients, span classification, and graceful exporter shutdown.

Supporting updates

Layer / File(s) Summary
Migration and DPF configuration
.github/workflows/ci.yaml, AGENTS.md, STYLE_GUIDE.md, crates/api-core/src/dpf_services.rs, crates/dpf/...
CI validates new migration timestamps. Migration naming guidance was added. DPF Weave configuration and daemon-set resource propagation were updated.
Documentation and release metadata
docs/..., fern/...
Documentation badges, tables, examples, changelog metadata, redirects, observability guidance, and Fern configuration were updated.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related PRs

Suggested labels: rest-api

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the primary change: documentation updates for the 2.0 release.
Description check ✅ Passed The description states that the pull request performs final v2.0 documentation cleanup and identifies the related issue.
Linked Issues check ✅ Passed The changes address issue #4202 through documentation badges, changelog updates, redirects, and release-format cleanup.
Out of Scope Changes check ✅ Passed The changes are limited to documentation content, changelog metadata, redirects, and related Fern configuration.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.rs

ast-grep timed out on this file


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

@polarweasel

Copy link
Copy Markdown
Contributor Author

/ok to test

@nv-dmendoza nv-dmendoza left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@polarweasel
polarweasel force-pushed the ab/tag-v2.0-features branch from 7ee26b3 to fb96e37 Compare July 31, 2026 19:31
@copy-pr-bot

copy-pr-bot Bot commented Jul 31, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

polarweasel and others added 14 commits July 31, 2026 12:35
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>
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>
@polarweasel
polarweasel force-pushed the ab/tag-v2.0-features branch from fb96e37 to b466b1a Compare July 31, 2026 19:36
@polarweasel
polarweasel requested review from a team as code owners July 31, 2026 19:36
@github-actions

Copy link
Copy Markdown

🔐 TruffleHog Secret Scan

No secrets or credentials found!

Your code has been scanned for 700+ types of secrets and credentials. All clear! 🎉

🔗 View scan details

🕐 Last updated: 2026-07-31 19:39:27 UTC | Commit: b466b1a

@polarweasel

Copy link
Copy Markdown
Contributor Author

Well that rebase went sideways. Closing and cherry-picking.

@coderabbitai coderabbitai Bot mentioned this pull request Jul 31, 2026
10 tasks
@polarweasel
polarweasel deleted the ab/tag-v2.0-features branch July 31, 2026 20:00
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.

docs: 2.0.0 updates