rufish
An asynchronous Redfish client library for BMC/server out-of-band management in Rust.
[]
= "0.4"
= { = "1", = ["macros", "rt-multi-thread"] }
Quick Start
use RedfishClient;
async
Features
| Category | Capabilities |
|---|---|
| Core | Async HTTP/HTTPS, session auth (X-Auth-Token) + Basic Auth fallback, self-signed cert support, builder pattern |
| Resources | Systems, Chassis, Managers, Processors, Memory, Storage, Drives, NICs, Virtual Media, Certificates |
| Actions | Power control, boot override, BIOS settings, Secure Boot, RAID management, firmware update, log management |
| UI-Friendly | Registry metadata parsing, system health summary, storage overview, enriched logs, hardware topology |
| Fleet Management | Multi-host pool with concurrency control, BIOS config export/import/diff |
| Reliability | Auto-retry with exponential backoff, session auto-renewal on 401 |
| Real-time | SSE event streaming, event subscriptions |
Usage Examples
System Health Dashboard
// One call → aggregated health from System + Thermal + Power
let health = client.get_system_health.await?;
println!; // OK / Warning / Critical
println!;
for t in &health.temperatures
BIOS Configuration (UI-Friendly)
// Get BIOS attributes with full metadata for rendering forms
let attrs = client.get_bios_attributes_full.await?;
for attr in &attrs
// Set BIOS attributes (applied on next boot)
client.set_bios_attributes.await?;
BIOS Config Export/Import (Fleet Deployment)
use BiosConfig;
// Export from golden image server
let config = client.export_bios_config.await?;
let json = config.to_json?;
write?;
// Import to other servers
let config = from_json?;
let diff = client.diff_bios_config.await?;
println!;
client.import_bios_config.await?;
Storage Overview
let storage = client.get_storage_overview.await?;
for vol in &storage.volumes
println!;
Enriched Logs (Auto-Translated)
let logs = client.get_enriched_logs.await?;
for entry in &logs
Real-Time Events (SSE)
use StreamExt;
let mut stream = client.subscribe_sse.await?;
while let Some = stream.next.await
Multi-Host Fleet Management
use RedfishPool;
let mut pool = new; // max 10 concurrent connections
pool.add?;
pool.add?;
pool.add?;
pool.login_all.await;
// Power on all servers
let results = pool.for_each.await;
for r in &results
Firmware Update with Progress
client.update_firmware_with_progress.await?;
Hardware Topology
let topo = client.get_topology.await?;
println!;
for cpu in &topo.system.processors
for dimm in &topo.system.memory
Auto-Retry (Session Renewal + Backoff)
// Automatically re-login on 401, exponential backoff on network errors
let val = client.get_with_retry.await?;
User Account Management
let users = client.list_users.await?;
for u in &users
client.create_user.await?;
client.change_password.await?;
client.set_user_role.await?;
Builder Pattern (Advanced)
let custom = builder
.danger_accept_invalid_certs
.timeout
.build?;
let client = builder
.credentials
.client
.session // restore session
.build?;
Full API Reference
See docs.rs/rufish for complete API documentation.
Module Overview
| Module | Purpose |
|---|---|
rufish (root) |
RedfishClient + all typed resource structs |
rufish::registry |
BIOS/attribute/message registry parsing |
rufish::enriched |
Health summary, storage overview, enriched logs |
rufish::bios_config |
BIOS config export/import/diff |
rufish::topology |
Hardware topology types |
rufish::multi |
RedfishPool for fleet management |
rufish::sse |
SSE event stream types |
Supported Operations
Session: new, builder, login, logout, set_session, session_token, session_uri
Systems: list_systems, get_system, list_processors, get_processor, list_memory, get_memory, list_storage, get_storage, list_ethernet_interfaces, get_ethernet_interface
Chassis: list_chassis, get_chassis, get_power, get_thermal, get_chassis_indicator, set_chassis_indicator
Managers: list_managers, get_manager, get_network_protocol, set_network_protocol, list_manager_ethernet_interfaces, get_manager_ethernet_interface, patch_manager_ethernet_interface, list_serial_interfaces, get_serial_interface, list_virtual_media, get_virtual_media, insert_media, eject_media
Power: reset_system, power_on, power_off, graceful_shutdown, graceful_restart, force_restart, power_cycle, reset_manager
Boot: set_boot_override, set_boot_pxe, set_boot_bios
BIOS: get_bios, get_bios_settings, set_bios_attributes, reset_bios_defaults, get_bios_attributes_full, get_secure_boot, set_secure_boot
Storage: list_volumes, get_volume, create_volume, delete_volume, get_drive
Accounts: get_account_service, list_accounts, list_users, create_user, change_password, set_user_role, set_user_enabled, unlock_user, delete_user
Logs: list_log_entries, clear_log, get_enriched_logs
Events: get_event_service, list_subscriptions, create_subscription, delete_subscription, subscribe, subscribe_sse
Firmware: get_update_service, list_firmware_inventory, get_firmware_item, simple_update, update_firmware_with_progress
Certificates: list_certificates, get_certificate, replace_certificate
Tasks: list_tasks, get_task, wait_task
Registry: list_registries, get_registry, get_message_registry, get_attributes_full
Enriched: get_system_health, get_storage_overview, get_topology, export_bios_config, import_bios_config, diff_bios_config
Fleet: RedfishPool::new, add, add_client, remove, hosts, get, get_mut, login_all, logout_all, for_each
Retry: get_with_retry, patch_with_retry, post_with_retry
Raw: get, get_as, post, patch, delete, get_all_members
License
MIT OR Apache-2.0