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
Use DMTF standard fields first. In particular, xFusion's PCIe DeviceBDF
field is OEM-only; portable code should use PCIeFunctions and only consume
the OEM field when the xFusion contract applies.
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.3.0
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.3.0.tar.gz | 181.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| redfish_python_sdk-1.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 336.7 kB
Release files / redfish_python_sdk-1.3.0.tar.gz
| Download URL | redfish_python_sdk-1.3.0.tar.gz |
|---|---|
| Size | 181.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0f06499d674b2d7a15057ec2c3f35e8eccc4c1dcb86ed93599118ae62a249a4c
|
|
BLAKE2b-256 checksum How to use checksums |
bd8c8f26ff1f3312e6ced94faa6fc89ce23726575a862bfa7aab16013932671e
|
| 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.3.0-py3-none-any.whl
| Download URL | redfish_python_sdk-1.3.0-py3-none-any.whl |
|---|---|
| Size | 155.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a2e71f0e2232dafe9578398cb9ae5db876f0b61b30cd38fa0158937375982d56
|
|
BLAKE2b-256 checksum How to use checksums |
52b2d0a87f968b116bee784e3d976557b5fd677a4cfa0a4858900f7d199fa286
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|