redfish-python-sdk
redfish-python-sdk is a typed, high-level Python SDK for managing multi-vendor BMCs and bare-metal servers through the DMTF Redfish API.
A lightweight Python SDK for managing server BMCs (Baseboard Management Controllers) via the DMTF Redfish protocol. Covers system inventory, hardware inspection, power control, boot management, event subscriptions, and more.
Features
- Comprehensive hardware queries — CPU, memory, drives, GPU, NIC, PCIe, PSU, fans — one line of code each
- Power & boot management — power on/off, restart, PXE/HDD/BIOS boot source switching
- Multi-vendor compatible — auto-adapts to OEM extensions from Huawei, xFusion, Lenovo, HPE, Dell, and others
- Pydantic v2 models — all return values are strongly-typed objects with full IDE autocompletion
- Context manager —
withstatement support for automatic connection cleanup - Minimal dependencies — only
requests,pydantic, andurllib3
Requirements
- Python >= 3.9
- A network-reachable Redfish-compliant BMC endpoint
Installation
# Install from PyPI
pip install redfish-python-sdk
# Or install from GitHub
pip install git+https://github.com/rednote-infra/redfish-python-sdk.git
# Install a specific version
pip install redfish-python-sdk==1.2.3
pip install git+https://github.com/rednote-infra/redfish-python-sdk.git@v1.2.3
# In requirements.txt
# redfish-python-sdk>=1.2.3
Quick Start
Credential management: All BMC credentials should be injected via environment variables. Never hardcode them in your source code. Before running examples or tests, set
export BMC_IP=...,export BMC_USER=...,export BMC_PASSWORD=....
import os
from redfish_sdk import RedfishClient
# Connect to BMC (credentials from environment variables)
client = RedfishClient(
host=os.environ["BMC_IP"],
username=os.environ["BMC_USER"],
password=os.environ["BMC_PASSWORD"],
)
# Get system info
system = client.systems.get()
print(f"Server: {system.manufacturer} {system.model}")
print(f"SN: {system.serial_number}")
print(f"Power: {system.power_state}")
# Get CPU info
for cpu in client.get_processors():
print(f"CPU: {cpu.model}, {cpu.total_cores} cores / {cpu.total_threads} threads")
# Get memory info
for mem in client.get_memory():
print(f"DIMM: {mem.manufacturer} {(mem.capacity_mib or 0) // 1024} GB")
# Get drive info
for drive in client.get_drives():
print(f"Drive: {drive.model} {(drive.capacity_bytes or 0) / 1e12:.1f} TB")
# Don't forget to close
client.close()
Testing
# Run unit tests (no BMC or env vars required)
pytest tests/test_models_mock.py tests/test_client_mock.py -v
# Run offline tests (using pre-collected JSON data)
export REDFISH_JSON_DIR="./testdata"
pytest tests/test_offline_json.py -v
# Run integration tests (requires a real BMC)
export BMC_IP="<your-bmc-ip>"
export BMC_USER="<your-bmc-user>"
export BMC_PASSWORD="<your-bmc-password>"
pytest tests/test_real_bmc.py -v
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the BSD 3-Clause License.
Metadata
Release files for redfish-python-sdk 1.2.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| redfish_python_sdk-1.2.3.tar.gz | 153.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| redfish_python_sdk-1.2.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 289.7 kB
Release files / redfish_python_sdk-1.2.3.tar.gz
| Download URL | redfish_python_sdk-1.2.3.tar.gz |
|---|---|
| Size | 153.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
176c21211b3cf6f583f717b1635072eafd37852deb2ad477ae1d51f01d5ffdb2
|
|
BLAKE2b-256 checksum How to use checksums |
b9945ce2b9e754d185c79a7205037006ee59c2fc00f7ce4aca1a4a159c67b170
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / redfish_python_sdk-1.2.3-py3-none-any.whl
| Download URL | redfish_python_sdk-1.2.3-py3-none-any.whl |
|---|---|
| Size | 136.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c56f5c685fc24e24fdbadfa1009fb886a512ee7b4b9bbe6dbde24bcd27e04744
|
|
BLAKE2b-256 checksum How to use checksums |
5852dfa86b5e0b9ec2698ecefc65337f2b65f74a8b10babed27262982b9a7266
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|