Workspace Crates
RMS is a Cargo workspace. The core service lives in crates/rackmanagementservice
(crate rackmanagementservice), and supporting crates provide the protocol clients
and the firmware-update engine. Each is documented as its own crate below.
redfish_client
A thin, RMS-focused wrapper over the workspace nv-redfish crate. It exposes
exactly the Redfish operations RMS needs - power state and reset, MNNVLink
topology discovery, and multipart firmware upload - behind a small, stable surface
and an RMS-shaped error enum, rather than exposing nv-redfish’s full schema API
to callers.
- Artifact: library (
redfish_client). - Key types:
RedfishClient(a cheap-to-clone handle),RedfishError/Result,NvidiaMnnvlinkTopology(chassis serial, slot, tray index from the Processor OEM block), and passthroughs fromnv-redfish(BmcCredentials,PowerState,ResetType,DataStream,UploadReader). - Key
RedfishClientmethods:new,computer_system_power_state,reset_computer_system,reset_manager,nvidia_mnnvlink_topology, and themultipart_update_firmware*family (with_with_timeout/_from_pathvariants;DEFAULT_UPLOAD_TIMEOUTis 600 s). RedfishErrormirrors gRPC-style status categories (NotFound,Timeout,Unauthenticated,FailedPrecondition, …) so it maps cleanly toRmsError.- Built on:
nv-redfish(featuresbmc-http,computer-systems,managers,processors,update-service),reqwest,tokio. - Used by: re-exported through
crates/rackmanagementservice/src/transport/redfish_client.rsand consumed by the compute nodes (MNNVLink topology) and the GB200 switch node (power/reset).
nvue_client
An intentionally narrow async HTTP client for the NVUE / NVOS REST API, plus the
focused request/response model types shared by RMS and the embedded nvfwupd
crate. It targets a specific NVOS API version and models only the shapes RMS and
nvfwupd actually need; the OpenAPI document is deliberately not vendored.
A distinctive feature is client-TLS rotation: the client builds a complete candidate transport, verifies it with a read-only NVUE request, then atomically swaps it in. A failed or cancelled verification leaves the last-known-good transport active, and in-flight requests finish on their original generation.
- Artifact: library (
nvue_client). - Transport types:
Client,ClientConfig,ClientCredentials,ClientEndpoint,ClientError,NvueResponse,PreparedClientTls,SharedClient(Arc<Client>),ClientTls/ClientTlsPaths. - Domain modules (each maps to an NVUE endpoint family):
action(action-job polling),cluster(NMX controller cluster/app management),platform(platform firmware),revision(NVUE config apply/save),sdn, andsystem(system images, power cycle, user password, gNMI server). - Built on:
reqwest,rustls,secrecy,sha2,tokio. - Used by: the GB200 switch node stack
(
crates/rackmanagementservice/src/nodes/switch_gb200_nvidia/*) for all NVUE transport and cluster, revision, system, and SDN models. Thenvfwupdcrate also depends on it for the switch firmware-update path.
nvfwupd
The embedded firmware-update engine (crate directory crates/rust_nvfwupd, package name
nvfwupd). It performs out-of-band firmware updates on NVIDIA server, switch, and
power-shelf platforms - primarily over Redfish (BMC HTTP), with additional IPMI,
SSH/SFTP, and direct-OS transports. It parses firmware packages, compares
installed versus packaged versions, drives multipart uploads and update tasks,
polls task/job status, and handles activation, background copy (SPI slot swap),
staged updates, factory reset, and CPLD/flint flows.
- Artifact: both a library (
nvfwupd) and a binary (nvfwupd). The binary is bundled into the RMS release image for operator diagnostics. - Firmware package formats: PLDM
.fwpkgpackages (native Rust parsing of the PLDM header, plus anunpackmode), tar packages (e.g. power-shelf firmware), CPLD.vmeimages (switch targets), andflint/Mellanox NIC firmware over SSH. - CLI subcommands:
show_version,update_fw,activate_fw,background_copy,force_update,show_update_progress,perform_factory_reset,show_pkg_content,unpack,make_upd_targets,flint_update, plushelp/version. Global options select the target (-t), OS target (-o), config (-c), and verbosity. - Core abstraction: the async
RFTargettrait, with a concrete target per platform (GB200, GB300/VRNVL72 via wrappers, DGX, GH200, HGX, power shelf, switch).
The workflow API RMS uses
RMS does not build concrete RFTargets. Instead it calls the crate’s workflow
API, its RMS-facing facade:
nvfwupd::workflowdefines the type vocabulary:TargetConfig,ServerType,FirmwareUpdateRequest,UpdateOptions,FirmwareUpdateOutcome,TaskHandle,TaskStatus/TaskState,ActivationRequest/ActivationSummary,FirmwareVersionCheckRequest/FirmwareComponent, and theNvFwUpdErrorenum.nvfwupd::workflow_apiprovides the free async functions RMS calls:get_firmware_inventory,verify_firmware_versions/verify_firmware_target_versions,update_firmware,get_task_status, andactivate_firmware. AWorkflowContextvariant can route switch NVUE requests through an existingnvue_clienttransport.
RMS’s crates/rackmanagementservice/src/nodes/nvfwupd_adapter.rs maps between RMS domain types and these
workflow types; the per-platform compute and power-shelf node modules build a
TargetConfig and call the workflow_api functions directly.
- Built on:
clap,reqwest,russh/russh-sftp,tar,nvue_client(for switch NVUE access),tokio,tracing.