A command-line utility that collects a complete drive inventory — model, serial, firmware version, bay location, capacity, and health — for every drive across all nodes in a Qumulo cluster. It connects to the cluster's REST API for the drive inventory and over SSH to each node to read firmware versions, then flags any drives that are eligible for a firmware update based on published Qumulo advisories.
- Python 3.8 – 3.11
paramiko—pip install paramiko- Network access from the machine running the tool to:
- the cluster REST API (default TCP port
8000), and - SSH (default TCP port
22) on each node.
- the cluster REST API (default TCP port
- An SSH account with
sudoprivileges on the nodes (needed to read drive firmware). By default this is the same Qumuloadminaccount used for the API.
# Basic run against any node or floating IP (prompts for the admin password)
python3 drive_inventory.py --host 10.0.0.1
# Non-interactive, write a CSV report
python3 drive_inventory.py --host 10.0.0.1 --user admin --format csv -o report.csv
# Provide node IPs explicitly (skips auto-discovery)
python3 drive_inventory.py --host 10.0.0.1 --node-ips 10.0.0.1,10.0.0.2,10.0.0.3
# Product-package nodes that use a separate SSH user / key
python3 drive_inventory.py --host 10.0.0.1 --ssh-user ubuntu --ssh-key ~/.ssh/id_rsaRun python3 drive_inventory.py --help for the full list of options.
- Authenticates to the Qumulo REST API and reads the drive inventory
(
/v1/cluster/slots/) — model, serial, bay, capacity, and health for every slot in the cluster. - Discovers a reachable IP per node from the cluster's network status
(falling back gracefully across API versions), or uses the IPs you pass with
--node-ips. - Collects firmware by connecting to each node over SSH in parallel and reading the firmware revision for every NVMe and SATA/SAS device.
- Joins the API inventory with the per-node firmware and checks each drive against the advisory list below.
- The full inventory (all columns, all drives, grouped by node) is written to
a timestamped log file in the current directory, e.g.
drive_inventory_<cluster>_<YYYYMMDD_HHMMSS>.log. - A firmware advisory summary is printed to the screen, listing only the drives that need a firmware update:
===============================================================================================
FIRMWARE UPDATES REQUIRED -- my-cluster
===============================================================================================
Node Slot Model Serial Current FW Target FW
------ ---- -------------------------- ------------------ ------------ ------------
4 5 WDC_WUH722020BLE6L4 9AHVBHXS PQGNW540 PQGNWGC8
------ ---- -------------------------- ------------------ ------------ ------------
Total drives needing update: 1
Reference:
WDC HC560 20TB https://care.qumulo.com/s/article/WDC-HC560-Firmware-Update-Instructions-For-Qumulo
- With
-o/--outputyou can also write the inventory astable,json, orcsv(--format). The JSON output includes anadvisoryobject per matched drive.
If firmware for a node cannot be collected (for example, SSH is blocked), that node's drives still appear in the inventory with their model and serial; their firmware is marked unavailable and the summary notes how many drives could not be checked.
| Advisory | Drive Model | Required Firmware |
|---|---|---|
| HPE a00148409en_us | HPE NVMe SSD (MO001600KYDZR, MO000800KYDZK) |
HPK5 or newer |
| KB 000001305 | Micron 7450 NVMe SSD | E2MU300 |
| KB 000001295 | WDC SN640 NVMe SSD | R1110026 |
| KB 000001304 | WDC HC560 20TB HDD (WDC_WUH722020ALE6L4, WDC_WUH722020BLE6L4) |
PQGNWGC8 |
| KB 000001037 | WDC 14TB HDD (WDC_WUH721414ALE6L4) |
LDGNW400 |
| KB 000001037 | WDC 18TB HDD (WDC_WUH721818ALE6L4) |
PCGNW8C2 |
| KB 000001037 | HGST 12TB HDD (HGST_HUH721212ALE600, HGST_HUH721212ALN600) |
LEGNTB01 |
Most advisories require an exact firmware match — any other revision is reported as needing an update. The HPE NVMe advisory instead specifies a minimum: HPK5 and anything newer (HPK6, and so on) is reported as current, and only older revisions are flagged.
The HPE advisory covers nine drive models, but only the two that Qumulo ships on
HPE platforms are enabled. The other seven are listed commented-out in
HPE_HPK5_MODELS in drive_inventory.py and can be switched on by removing the
# from their line if a future platform uses them.
Refer to the linked Qumulo Care article for each advisory before performing any firmware update.
test_drive_inventory.py covers the advisory matching logic, the inventory join,
and the output formatters. No cluster access or network is required:
python3 -m unittest test_drive_inventory -v
By default the tool uses one password prompt for both the REST API and SSH,
assuming the SSH account matches the Qumulo admin account. If SSH uses a
different account, use the SSH override options:
--ssh-user <name>— SSH username, if different from--user.--ssh-key <path>— path to an SSH private key (skips password auth).--ssh-password <pw>— SSH password, if different from the API password.--ssh-port <n>— SSH port (default22).
The tool never stores credentials; the password is only held in memory for the duration of the run.
'paramiko' is required but not installed— runpip install paramiko.- A node reports an SSH error — confirm the machine running the tool can
reach that node on port 22 and that the SSH account has
sudoaccess. You can pass IPs directly with--node-ipsif auto-discovery picks unreachable addresses. - Firmware shows as unavailable for all nodes — usually an SSH auth or reachability problem; verify the SSH user/key and network path to the nodes.
Released under the MIT License.