Small operator-side CLI + TUI for driving a rack of IPMI BMCs (status, SoL, power)
Project description
ipmitui
Small operator-side CLI + TUI for driving a rack of IPMI BMCs. One TOML
config of machines, one shell-out per call to ipmitool, parallel scans for
the live power-state table. Power, Serial-over-LAN, sanity checks, and an
interactive table with add / edit / delete.
Sibling to bty: bty owns image catalogs,
PXE plans and deploys; ipmitui owns power state and console access. They
stay separate so each stays small and operator-readable.
Install
pipx install . # from a checkout
pipx install git+https://github.com/safl/ipmitui
Requires ipmitool on $PATH (apt install ipmitool on Debian / Ubuntu).
Config
Default path: ~/.config/ipmitui/machines.toml (override with --config or
$IPMITUI_CONFIG). The file is written 0600 because passwords may be
plaintext.
[defaults]
user = "ADMIN"
pass_cmd = "pass show lab/{name}-bmc" # {name} is the machine's name
[[machine]]
name = "lab-01"
host = "10.20.30.10"
description = "headend BMC, warp rack"
[[machine]]
name = "lab-02"
host = "10.20.30.11"
user = "OTHER" # overrides the default user
password = "inline-secret" # plaintext; for lab-only / quick start
[ui]
glyphs = true # Nerd Font icons in the TUI (toggle live with "g")
Per machine, give either password (inline) or pass_cmd (a shell command
whose first stdout line is the password); pass_cmd keeps the file
plaintext-free with pass / gopass / op / sops. --config may be
repeated to merge several files, a simple way to group hosts:
ipmitui --config warp.toml --config wave.toml # both racks in one view
Commands
Running ipmitui with no subcommand opens the interactive TUI.
ipmitui # interactive TUI (default)
ipmitui tui # same, explicit
ipmitui status # one-shot parallel scan, print table, exit
ipmitui check # exit non-zero if any machine is unreachable / auth-fails
ipmitui sol lab-01 # exec into `ipmitool sol activate`
ipmitui on lab-01 # power on
ipmitui off lab-01 # power off (hard)
ipmitui soft lab-01 # graceful shutdown (ACPI)
ipmitui cycle lab-01 # power cycle
ipmitui reset lab-01 # power reset
ipmitui ipmitool lab-01 mc info # raw passthrough with the auth prefix filled in
Flags: --config PATH (repeatable), --workers N (parallel scan width,
default 8), --interval S (TUI refresh seconds, default 5), --version.
TUI keys
f or / focus the filter (matches name / host / note)
i or Enter open the action picker for the selected machine
(picker: j/k or arrows to move, Enter to act, Esc/q to cancel)
a / e / d add / edit / delete a machine
r refresh now
g toggle Nerd Font glyphs
h or Space help
q quit
j / k move the cursor (alongside the arrow keys)
Esc clear the filter / close a popup
The action picker offers serial console (SoL) and the power ops. Edits are saved back to the primary config file.
Development
make hooks # install the pre-commit gate (ruff + hygiene)
make check # ruff lint + format-check + tests
make test # tests only
CI (.github/workflows/ci-cd.yml) runs lint + tests on every PR and on
main; a green main auto-tags v<version> and the tag publishes a GitHub
release.
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 ipmitui-1.0.0.tar.gz.
File metadata
- Download URL: ipmitui-1.0.0.tar.gz
- Upload date:
- Size: 33.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a638a1cab60d50ddbc0cf7a605bade0ad5d1702712b3b442880f85e5e5ab1835
|
|
| MD5 |
d7cfc67f62da77b6d3947b42b573bf98
|
|
| BLAKE2b-256 |
58d54c8a19395b345a66c4effe2115e8ad3f5dd2b634b158cef47350bafef4f6
|
Provenance
The following attestation bundles were made for ipmitui-1.0.0.tar.gz:
Publisher:
ci-cd.yml on safl/ipmitui
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ipmitui-1.0.0.tar.gz -
Subject digest:
a638a1cab60d50ddbc0cf7a605bade0ad5d1702712b3b442880f85e5e5ab1835 - Sigstore transparency entry: 1851923415
- Sigstore integration time:
-
Permalink:
safl/ipmitui@56e2683f9dfb8380e417310c68106dc351ff6a0e -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/safl
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci-cd.yml@56e2683f9dfb8380e417310c68106dc351ff6a0e -
Trigger Event:
push
-
Statement type:
File details
Details for the file ipmitui-1.0.0-py3-none-any.whl.
File metadata
- Download URL: ipmitui-1.0.0-py3-none-any.whl
- Upload date:
- Size: 24.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d3c0ad0ce665d825b4769f14047ec656777f83aa10c200bb77319d1abaa3c876
|
|
| MD5 |
c40b4b3106622fbc193df3405bc05460
|
|
| BLAKE2b-256 |
58b889ecadfe9d178ecad0b27f6c39d5af17a1c8e6c250c32f181388dd3d51b2
|
Provenance
The following attestation bundles were made for ipmitui-1.0.0-py3-none-any.whl:
Publisher:
ci-cd.yml on safl/ipmitui
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ipmitui-1.0.0-py3-none-any.whl -
Subject digest:
d3c0ad0ce665d825b4769f14047ec656777f83aa10c200bb77319d1abaa3c876 - Sigstore transparency entry: 1851923610
- Sigstore integration time:
-
Permalink:
safl/ipmitui@56e2683f9dfb8380e417310c68106dc351ff6a0e -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/safl
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci-cd.yml@56e2683f9dfb8380e417310c68106dc351ff6a0e -
Trigger Event:
push
-
Statement type: