A Python SDK for interacting with Redfish-compliant BMC endpoints
Project description
Redfish Python SDK
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.0.0
pip install git+https://github.com/rednote-infra/redfish-python-sdk.git@v1.0.0
# In requirements.txt
# redfish-python-sdk>=1.0.0
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file redfish_python_sdk-1.0.0.tar.gz.
File metadata
- Download URL: redfish_python_sdk-1.0.0.tar.gz
- Upload date:
- Size: 99.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4266c8d4b47cfe7ae2405bed0e454338e3121807c707f4b4ae3f08c8eefd333a
|
|
| MD5 |
0aa073e419c434d5b0a0a7280ed2c9a4
|
|
| BLAKE2b-256 |
5fb9bab96d5c46c6b3cbbf6850a02f5e1273edf7d938cfb979d6d55f59f38dd8
|
File details
Details for the file redfish_python_sdk-1.0.0-py3-none-any.whl.
File metadata
- Download URL: redfish_python_sdk-1.0.0-py3-none-any.whl
- Upload date:
- Size: 86.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
15b6405b11cd44e325371f61b3819928714aef37311efb82e9cfb7659ef15158
|
|
| MD5 |
6d2abf69c6b3c217f0183087f0462df8
|
|
| BLAKE2b-256 |
c59778fd4a7e1c1dd52251e27257fe72bbe8ef0990d18a76ef9b41583dfa55c6
|