nv-redfish is a modular Rust client stack for Redfish BMC management.
The project combines generated Redfish schema types with a small transport
abstraction and optional ergonomic wrappers for common Redfish services. The
main crate is intentionally feature-gated: enable the service and OEM support
your client needs, or use std-redfish for a broad standard Redfish build.
-
nv-redfish-core- Transport-agnostic primitives and traits used by generated code.
- Includes
Bmc,EntityTypeRef,NavProperty<T>,Action<T, R>,ODataId,ODataETag,ModificationResponse, and Redfish session-create response metadata. - Provides common Redfish/OData value types such as date/time, duration, UUID, decimal, task, action, and navigation-property helpers.
- Does not include an HTTP implementation.
-
nv-redfish-bmc-http- HTTP implementation of
nv_redfish_core::Bmc. - Provides
HttpBmc<C>,BmcCredentials, ETag/cache handling, and theHttpClienttrait. - The built-in reqwest client is behind the
reqwestfeature, enabled by default for this crate. - Supports custom default headers and session-token credential updates, so
callers can use either basic credentials or a Redfish
X-Auth-Token.
- HTTP implementation of
-
nv-redfish- High-level Redfish API over generated schema types.
- Exposes
ServiceRootand feature-gated wrappers for services such as accounts, chassis, systems, sessions, events, telemetry, and updates. - Re-exports
nv-redfish-bmc-httpasnv_redfish::bmc_httpwhen thebmc-httpfeature is enabled. - Generates only the schemas required by enabled features during build.
- Uses feature-gated patch helpers for vendor quirks and schema deviations observed in real BMCs.
-
nv-redfish-bmc-mock- Test BMC implementation used by integration tests and examples.
- Provides expectation helpers for GET, PATCH, POST/create, DELETE, actions, SSE, and Redfish session creation.
-
nv-redfish-csdl-compiler- CSDL/OData XML compiler and Rust code generator.
- Used by
nv-redfishat build time to compile selected standard and OEM Redfish schemas. - Reads Redfish, Swordfish, and OEM CSDL/EDMX documents into a schema index, resolves inheritance and references, compiles a reduced intermediate model, optimizes it, and emits Rust.
- Compilation is rooted at service singletons such as
Service, plus feature-defined include patterns fromredfish/features.toml. - Navigation targets can be limited with wildcard entity-type patterns so generated code contains only the reachable schema surface needed by the selected features.
- Generates read, update, create, excerpt, action, enum, and typedef shapes
consumed by
nv-redfish. - CLI entry points:
Compile: compile standard CSDL from a root singleton into a Rust file.CompileOem: compile OEM CSDL as root schemas while resolving references from standard CSDL files.
nv-redfish has no default features.
Common feature groups:
bmc-http: re-exportnv-redfish-bmc-httpfromnv_redfish::bmc_http.std-redfish: enable a broad standard Redfish surface.- Service features:
accounts,assembly,bios,boot-options,chassis,computer-systems,ethernet-interfaces,event-service,host-interfaces,log-services,managers,memory,network-adapters,network-device-functions,pcie-devices,power,power-supplies,processors,secure-boot,sensors,session-service,storages,telemetry-service,thermal,update-service. - OEM features:
oem-ami,oem-dell,oem-hpe,oem-lenovo,oem-supermicro,oem-nvidia,oem-liteon. - OEM product features:
oem-nvidia-bluefield,oem-nvidia-baseboard,oem-dell-attributes.
For smaller binaries and faster builds, enable only the service and OEM features your client needs.
Cargo.toml:
[dependencies]
nv-redfish = { version = "0.1", features = ["bmc-http"] }
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
url = "2.5"Rust:
use nv_redfish::bmc_http::reqwest::Client;
use nv_redfish::bmc_http::{BmcCredentials, CacheSettings, HttpBmc};
use nv_redfish::ServiceRoot;
use std::sync::Arc;
use url::Url;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let bmc = Arc::new(HttpBmc::new(
Client::new()?,
Url::parse("https://example.com")?,
BmcCredentials::new("admin".into(), "password".into()),
CacheSettings::default(),
));
let root = ServiceRoot::new(Arc::clone(&bmc)).await?;
println!("Vendor: {:?}", root.vendor());
println!("Product: {:?}", root.product());
println!("Redfish version: {:?}", root.redfish_version());
Ok(())
}See examples/readme-minimal for this example as a workspace target.
See examples/session-token for Redfish SessionService authentication using
X-Auth-Token.
- Enable features on
nv-redfish. redfish/build.rsinvokesnv-redfish-csdl-compiler.- The compiler reads
redfish/features.tomlplus selected CSDL XML schemas and generates the schema module compiled intonv-redfish. - High-level wrappers use the generated types and the transport-agnostic
Bmctrait. - Applications provide a BMC implementation, commonly
HttpBmc<Client>fromnv-redfish-bmc-http.
- Keep the transport layer independent from the Redfish schema layer.
- Compile only the schema surface needed by enabled features.
- Support standard Redfish and selected OEM extensions.
- Keep vendor compatibility fixes isolated behind feature-gated patch helpers.
See workspace Cargo.toml.
This project includes Redfish schema files from DMTF's Redfish-Publications repository, licensed under the BSD-3-Clause license.
This project includes Swordfish schema files from SNIA's Swordfish-Publications repository, licensed under the BSD-3-Clause license.
Please see CONTRIBUTING.md for details.