IOM1's HostName field contains binary artifacts that decode to garbage
unicode characters (e.g. prefixing a UUID). Strip any character
outside printable ASCII (0x20–0x7F) from all string fields returned by
_parse_network_data.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Mirrors the same change made to option 1 — asks which IOM the serial
cable is connected to after login, then uses that selection in all
Redfish paths for network settings, IOM firmware, and Fabric Card firmware.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The serial path already paused at the disconnect-cable prompt. The
network path had no equivalent, causing results to flash and disappear.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The Redfish response nests the version under
Oem.VikingEnterpriseSolutions.Version.ActiveFirmwareVersion, not
Oem.Version.ActiveFirmwareVersion. Fixed in both redfish.py
(_get_fabric_fw_version, used by network check and firmware workflow)
and workflow_check.py (serial inline parsing).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
_parse_network_data now returns mac, hostname, and link_status extracted
from the Redfish EthernetInterfaces/1 response (MACAddress, HostName,
LinkStatus fields confirmed present in live IOM output).
_print_results gains a second table — Interface Details (IOM | MAC | Hostname)
— between the Network Settings and Firmware Versions tables. Network Settings
table drops the redundant Origin column and adds Link Status instead.
Both _check_via_serial and _check_via_network updated to unpack and pass
the additional fields. fetch_current_config in workflow_serial.py also
updated to use the same address-parsing logic and trimmed table layout.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The serial cable connects to IOM1's console port. IOM2 cannot be queried
or configured via the serial connection. Updated all serial-path code to
reflect this:
workflow_serial.py:
- fetch_current_config: query IOM1 only, single-row table
- collect_network_config: prompt for IOM1 settings only, drop IOM2 section
- apply_configuration: apply to IOM1 only, single-row result table
- print_summary: IOM1-only table, updated warning text
workflow_check.py (_check_via_serial):
- Query IOM1 only for network settings, IOM firmware, and Fabric Card firmware
CLAUDE.md updated to document the IOM1-only serial limitation.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The BMC serial number (e.g. MXE3000048LHA03C) is embedded in the IOM
hostname shown in the serial login prompt. It also doubles as the root
password, so no manual entry is needed.
- If at login prompt: extract serial from 'hostname login:' line
- If already logged in: run 'hostname' on the shell and extract serial
- Falls back to prompt_password() if extraction fails either way
_login_serial_console() now returns (success, password) instead of bool.
Callers in workflow_serial.py and workflow_check.py updated accordingly.
CLAUDE.md updated to document the behaviour and remove it from planned features.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Either IOM can reach the other via Redfish, so there's no need to collect
separate IOM1/IOM2 addresses. Firmware update and system check now prompt
for one IP per shelf with a note that either IOM's address works.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds workflow_check.py: a read-only diagnostic that queries current network
settings and firmware versions (IOM + Fabric Card) from both IOMs. Accessible
via a new main menu option (3 — System Check); Exit moves to option 4.
Supports both serial console (curl over the serial session) and direct network
(HTTPS to management IP) connection methods.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>