After an IOM reboot, the Redfish API responds before inter-IOM services
are fully initialized. This causes the Fabric Card upload to fail with
"Failed to send update package to other IOM; Couldn't connect to server".
Two fixes:
1. After _wait_for_iom_online confirms the IOM is back, wait an additional
60s for services to fully initialize before proceeding.
2. Retry the Fabric Card firmware upload up to 3 times with 60s between
attempts, covering cases where services are still starting up.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
A fixed 30s sleep is not enough for a full BMC boot cycle. Add
_wait_for_iom_online() which polls GET /redfish/v1/ every 15s until the
IOM responds (up to 5 minutes), then call it after every IOM restart in
both _update_iom_fw and _update_fabric_fw. This ensures the fabric card
update (and post-update validation) don't run while the IOM is still
booting and unreachable.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Previously prompted separately for each component. Since both updates
use the same firmware file, select it once and pass it to both steps.
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>
- Add firmware/ directory to hold firmware files for techs cloning the repo
- Scan firmware/ (relative to script location) instead of CWD
- Add .fwc to supported firmware extensions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Each ES24N shelf has a unique Admin password (its BMC serial number), so a
single shared password is incorrect for multi-shelf runs. The password prompt
now appears once per shelf inside _collect_shelves(), stored as the first
element of each (password, [(iom, ip), ...]) shelf tuple. _make_targets()
threads the password into each (label, iom, ip, password) target entry, and
_show_fw_versions() uses the per-target password instead of a global one.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The firmware update workflow now supports updating any number of shelves in a
single run. After entering IPs for the first shelf, the user is prompted to
add another; this repeats until done. Firmware file and update-type choices
are made once and applied to all shelves sequentially.
_show_fw_versions() updated to accept (label, iom, ip) tuples so the display
label and Redfish path name can differ for multi-shelf tables (e.g. "S1 / IOM1"
vs "IOM1"). Pre- and post-update version tables include the shelf number when
more than one shelf is being updated.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Update sys.path reference in es24n_conf.py and all documentation
to reflect the new folder name.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>