Salt extension for out-of-band server management via Redfish (with IPMI fallback): power, boot-device override, inventory, and sensors.
Project description
saltext-bmc
A Salt extension for out-of-band management of bare-metal servers via their BMC (Baseboard Management Controller). Speaks Redfish first and IPMI as a fallback (auto-detected by default), with a uniform interface for:
- power control (on / off / cycle / reset, graceful or forced)
- boot-device override (disk, PXE, UEFI HTTP, BIOS setup, CD, USB — one-shot or persistent)
- inventory (manufacturer, model, serial, UUID, BIOS version, BMC firmware)
- sensors (temperatures, fans, voltages)
- a low-level
bmc_redfishpassthrough for raw GET/POST/PATCH/DELETE against any Redfish endpoint
Primary use case: automated bare-metal provisioning (e.g. UEFI HTTP Boot for ESXi
installs) where Salt needs to power-cycle a host and steer its next boot.
See PLAN.md for the full design.
Install
pip install saltext.bmc # Redfish only
pip install 'saltext.bmc[ipmi]' # adds pyghmi for the IPMI fallback
Requires Python ≥ 3.10 and Salt ≥ 3008.
Quick start
Configure one or more BMC profiles in Pillar:
saltext.bmc:
profiles:
bmc-host-01:
host: 10.0.0.5
username: root
password: calvin
verify_ssl: false
# backend defaults to 'auto' — probes Redfish, falls back to IPMI.
# Set to 'redfish' or 'ipmi' explicitly to skip the probe.
# backend: redfish
legacy-host:
host: 10.0.0.7
username: ADMIN
password: ADMIN
backend: ipmi
port: 623 # IPMI-only override
Execution module:
salt-call --local bmc.power_status bmc-host-01
salt-call --local bmc.set_boot_device bmc-host-01 device=http persistent=False
salt-call --local bmc.power_cycle bmc-host-01
salt-call --local bmc.get_system_info bmc-host-01
salt-call --local bmc.get_sensor_data bmc-host-01
# Connection kwargs work without a pillar profile:
salt-call --local bmc.power_status host=10.0.0.5 username=root password=calvin verify_ssl=False
State module:
my-host-boot:
bmc.boot_device:
- name: bmc-host-01
- device: http
- persistent: false
my-host-power:
bmc.powered:
- name: bmc-host-01
- power: 'on'
Low-level Redfish passthrough (Redfish-only profiles):
salt-call --local bmc_redfish.get /redfish/v1/ name=bmc-host-01
salt-call --local bmc_redfish.patch /redfish/v1/Systems/1 \
body='{"AssetTag": "rack-7-slot-3"}' name=bmc-host-01
Resource type
For Salt 3008+ resource-driven workflows, the same operations are exposed as a
bmc resource type with per-host targeting:
# Pillar
resources:
bmc:
bmc-host-01:
host: 10.10.10.5
username: root
password: calvin
verify_ssl: false
salt bmc-host-01 bmc_host.power_status # by resource ID alone
salt -C 'T@bmc:bmc-host-01' bmc_host.power_status # by full SRN (type:id)
salt -C 'T@bmc' bmc_host.power_cycle # all bmc resources
What's not here
- Serial-over-LAN console (
sol) — SOL is inherently interactive and is better served byipmitool sol activateor your BMC's web console. We do not ship abmc.sol_activate. - IPMI-side
bmc_redfish.*— the low-level passthrough is Redfish-only by design; it errors immediately if the resolved profile usesbackend: ipmi.
License
Apache 2.0
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 saltext_bmc-0.0.1.tar.gz.
File metadata
- Download URL: saltext_bmc-0.0.1.tar.gz
- Upload date:
- Size: 88.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
610d84a0e55a92349b514e4a6d33214401414239600264cc99c6f96021a8c264
|
|
| MD5 |
feeefadcbe8415d84ae6d68f748a3bc4
|
|
| BLAKE2b-256 |
b8f6922b6fd2918c0b29870813867ea1689af09ef66ef140da7b194a1235c249
|
Provenance
The following attestation bundles were made for saltext_bmc-0.0.1.tar.gz:
Publisher:
deploy-package-action.yml on salt-extensions/saltext-bmc
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
saltext_bmc-0.0.1.tar.gz -
Subject digest:
610d84a0e55a92349b514e4a6d33214401414239600264cc99c6f96021a8c264 - Sigstore transparency entry: 1764023318
- Sigstore integration time:
-
Permalink:
salt-extensions/saltext-bmc@999664b3379bf13184bdbe295d0990416b92122b -
Branch / Tag:
refs/heads/main - Owner: https://github.com/salt-extensions
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
deploy-package-action.yml@999664b3379bf13184bdbe295d0990416b92122b -
Trigger Event:
workflow_run
-
Statement type:
File details
Details for the file saltext_bmc-0.0.1-py2.py3-none-any.whl.
File metadata
- Download URL: saltext_bmc-0.0.1-py2.py3-none-any.whl
- Upload date:
- Size: 34.5 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3fab2aedaf29a548c21b663ef7be32b8eba9e2d905d1363c86eb945c446ae0ac
|
|
| MD5 |
de62eae3206211af3a3580fa54cec097
|
|
| BLAKE2b-256 |
d58c8f9a30f4a3c3f4f863f67b524ed662070822e390e3ae67995e40cb83f345
|
Provenance
The following attestation bundles were made for saltext_bmc-0.0.1-py2.py3-none-any.whl:
Publisher:
deploy-package-action.yml on salt-extensions/saltext-bmc
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
saltext_bmc-0.0.1-py2.py3-none-any.whl -
Subject digest:
3fab2aedaf29a548c21b663ef7be32b8eba9e2d905d1363c86eb945c446ae0ac - Sigstore transparency entry: 1764023877
- Sigstore integration time:
-
Permalink:
salt-extensions/saltext-bmc@999664b3379bf13184bdbe295d0990416b92122b -
Branch / Tag:
refs/heads/main - Owner: https://github.com/salt-extensions
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
deploy-package-action.yml@999664b3379bf13184bdbe295d0990416b92122b -
Trigger Event:
workflow_run
-
Statement type: