Skip to main content

Small operator-side CLI + TUI for driving a rack of IPMI BMCs (status, SoL, power)

Project description

ipmitui

CI license python release

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ipmitui-1.0.0.tar.gz (33.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ipmitui-1.0.0-py3-none-any.whl (24.4 kB view details)

Uploaded Python 3

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

Hashes for ipmitui-1.0.0.tar.gz
Algorithm Hash digest
SHA256 a638a1cab60d50ddbc0cf7a605bade0ad5d1702712b3b442880f85e5e5ab1835
MD5 d7cfc67f62da77b6d3947b42b573bf98
BLAKE2b-256 58d54c8a19395b345a66c4effe2115e8ad3f5dd2b634b158cef47350bafef4f6

See more details on using hashes here.

Provenance

The following attestation bundles were made for ipmitui-1.0.0.tar.gz:

Publisher: ci-cd.yml on safl/ipmitui

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for ipmitui-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d3c0ad0ce665d825b4769f14047ec656777f83aa10c200bb77319d1abaa3c876
MD5 c40b4b3106622fbc193df3405bc05460
BLAKE2b-256 58b889ecadfe9d178ecad0b27f6c39d5af17a1c8e6c250c32f181388dd3d51b2

See more details on using hashes here.

Provenance

The following attestation bundles were made for ipmitui-1.0.0-py3-none-any.whl:

Publisher: ci-cd.yml on safl/ipmitui

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page