Skip to content

GUACAMOLE-2300: Add IPMI Serial-over-LAN protocol support#1228

Open
ciroiriarte wants to merge 5 commits into
apache:mainfrom
ciroiriarte:feature/ipmi-protocol
Open

GUACAMOLE-2300: Add IPMI Serial-over-LAN protocol support#1228
ciroiriarte wants to merge 5 commits into
apache:mainfrom
ciroiriarte:feature/ipmi-protocol

Conversation

@ciroiriarte

@ciroiriarte ciroiriarte commented Jul 13, 2026

Copy link
Copy Markdown

Client-side support for the new ipmi protocol (see companion guacamole-server PR). Adds the IPMI connection form and a chassis control panel to the client menu.

JIRA: https://issues.apache.org/jira/browse/GUACAMOLE-2300

What's included

  • IPMI protocol connection form and translations.
  • Chassis Control panel: power actions (destructive actions clearly color-coded), Identify Chassis, Send Break, Read Event Log, and a Refresh control.
  • Always-visible power/SOL status overlay; chassis state lifted into a shared ipmiControlService so the panel and overlay stay in sync.
  • In-progress ("Working…") affordance and last-checked timestamp; status updates push automatically on SOL establish/teardown (no manual refresh needed).

Testing

  • Full-stack live regression (browser → guacamole-client → guacd → BMC) against a Supermicro BMC: panel/overlay render, live status auto-update, and the non-destructive control buttons all verified.

Related PRs

Makes IPMI a first-class protocol in the connection editor (previously only
usable via user-mapping.xml). Adds the ipmi.json protocol form with grouped,
progressive-disclosure sections (Network, Authentication, Security & Encryption,
Serial-over-LAN, Power & Boot, Display, Clipboard, Terminal behavior,
Typescript, Screen Recording), including ENUMs for privilege-level, cipher-suite
(3/17), encryption-policy, BMC vendor workaround presets, power-on-connect, and
boot-device; plus the PROTOCOL_IPMI English translations for all sections,
fields, and options.
Adds a guacIpmiControl directive that surfaces out-of-band chassis
management for IPMI connections directly in the client menu, gated on
protocol === 'ipmi'. Console I/O continues over the terminal; this panel
communicates solely over the dedicated 'ipmi-control' pipe stream,
exchanging newline-delimited JSON with the guacd IPMI module.

Features:
 - Live power/SOL-health status badges with authoritative refresh
 - Power controls (on, soft shutdown, cycle, hard reset, off, NMI) with
   confirmation gating on disruptive actions
 - Chassis identify, serial break, and System Event Log viewer

Includes directive, template, styles, and en translations.
…te into a service

Introduces ipmiControlService, which owns per-connection chassis state
(power, SOL health, SEL, last result) and the 'ipmi-control' pipe I/O,
persisting independently of any directive lifecycle. This fixes state
loss across menu open/close (the menu content is destroyed via ng-if)
and provides a single source of truth.

The menu panel (guacIpmiControl) and a new always-visible power badge
(guacIpmiStatus, overlaid top-right of the display) are now thin views
over the service, so operators can see host power state at a glance
without opening the menu.
- Move ng-if off the isolate-scope directive root (an inner wrapper),
  so the template's transcluded scope inherits the shared chassis state;
  previously the badge/panel bound to an empty scope and rendered blank.
- Clear the busy flag on any inbound control message, not only 'result':
  refresh-status replies with 'state' and read-sel with 'sel', which
  otherwise left every control button disabled after the first refresh.
- Default an empty power value to 'unknown' in the badges.
…us overlay

Two UX fixes for the IPMI chassis panel:

- In-progress feedback: while a chassis command is outstanding, replace
  the Refresh button with a spinner + 'Working…' label (all action
  buttons were already disabled via state.busy), and show a 'Checked
  HH:mm:ss' timestamp of the last authoritative status read. Chassis
  operations can take several seconds, so this reassures the operator
  the command is running rather than lost.

- Complete, consolidated status: the always-visible corner overlay now
  shows SOL connection health alongside power (previously power only),
  so an operator watching the console sees full status at a glance
  without opening the menu. SOL-disconnected is rendered red as an
  alert in both the overlay and the menu panel.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant