feat(storage): IBM Storage Virtualize (FlashSystem, Storwize, SVC) REST API plugin - #6406
Open
Valdragon4 wants to merge 9 commits into
Open
feat(storage): IBM Storage Virtualize (FlashSystem, Storwize, SVC) REST API plugin#6406Valdragon4 wants to merge 9 commits into
Valdragon4 wants to merge 9 commits into
Conversation
added 9 commits
September 2, 2026 22:05
Initial import of storage::ibm::flashsystem::restapi as run in production on two FlashSystem 5300 (Storage Virtualize 8.7): twelve modes over the REST API on port 7443. Apache 2.0 headers added; inline comments are still to be translated to English and the modes aligned with the project's coding conventions in the following commits.
Every inline comment now reads in English, with the reasoning kept - why the capacity threshold sits on physical usage, why a Storage Virtualize 'inactive_configured' FC port is not a fault, why the hosts mode inverts offline and degraded, why command responses are cached. Two comments that claimed default thresholds were shipped for latency and capacity were wrong and now state that none is. Two doc blocks in the custom mode sat above the wrong sub and are back above their own. A customer volume group name used as an example is replaced by a neutral one.
Same shape as the Purestorage REST API packages: script_custom plus the plugin tree, no extra dependency - JSON::XS, Digest::MD5 and the HTTP backend are already part of the base.
… modes Named constants instead of numeric codes in every counter definition - COUNTER_TYPE_GLOBAL / COUNTER_TYPE_INSTANCE for the groups, NO_VALUE() for the skipped codes - and option_exit(short_msg => ...) in one call where two were used, as the contribution fast track asks.
Custom mode: port, protocol, timeout, token lifetime and response cache TTL now carry their default and validation in add_options, and check_options no longer re-implements them. The response cache is disabled by default upstream - it is an opt-in for sites splitting the monitoring into many services on one array - so that repeated runs against the same host in tests never share state. Modes: status counters are declared COUNTER_KIND_TEXT instead of 2.
Every --warning-* / --critical-* / --unknown-* option now has its own =item, with the matching default expression under the matching severity, as the pull request checklist asks. Default expressions end with a period. The wildcard entry of the replication mode is spelled out into its six count thresholds. Bullet lists use the plain =item * form. The spell checker dictionary gains the Storage Virtualize vocabulary the help uses: canister, mdisk, vdisk, FlashCore, NVMe, WWPN, NPIV, DRAID, quorum and the ls* command names.
Two defects the first Robot run against the Mockoon exposed: - request_optional never tolerated an HTTP error: request() ends the check through option_exit(), which leaves the process and is not caught by the eval() around it. request() now takes optional => 1 and returns undef on an HTTP or decode failure; request_optional relies on it. A drive whose detailed view is missing falls back to its concise entry, and an unknown path state is no longer read as a fallen path. - Arrays, batteries, power supplies and expansion canisters carry neither name nor id: an alert on one of them read "Battery '-'". Each family now declares its identity field (mdisk_name, battery_id, PSU_id, canister_id).
Completes the previous commit: when a drive's detailed view is not available, its path states are '-' and must not read as both paths down. The default expressions now require a known state.
Twelve suites, fifty cases, run against an anonymised Mockoon environment built from a real FlashSystem 5300 (Storage Virtualize 8.7) collection: WWPNs, serials, cluster ids and drive UIDs are deterministic fakes, hosts, volumes, groups, partitions, pools and systems carry generic names applied consistently across every command, addresses and contact fields are blank, quorum application sites are generic. States are untouched - four hosts offline, one partition in problem, one unfixed alert - so that each mode is exercised through OK, WARNING and CRITICAL: plain run, filters, forced status expressions and numeric thresholds. Expectations are the plugin's real output against the mock, performance data included. 50 tests, 50 passed.
Valdragon4
marked this pull request as ready for review
September 4, 2026 14:10
Valdragon4
requested review from
jean-christophe81 and
sdepassio
and removed request for
a team
September 4, 2026 14:10
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Community contributors
Description
New plugin
storage::ibm::flashsystem::restapifor IBM Storage Virtualize systems — FlashSystem, Storwize and SAN Volume Controller — through the REST API served on port 7443 (Storage Virtualize 8.1.3 and later).The repository currently covers this product line through
storage::ibm::storwize::ssh(four modes over SSH). The REST API exposes much more, and this plugin runs in production on two FlashSystem 5300 (Storage Virtualize 8.7.0.8) with twelve modes:system-statushardwareonline_*/total_*counters and the temperature / power draw metricsdriveslsdrive/<id>views)capacityvolumes--add-all-volumesfor the full listvolume-groupshostseventlogalertentries — the GUI "Recommended Actions" — withmessageentries counted but not alertingfc-portseth-portsperformancereplicationDesign points worth knowing for the review:
--filter-*is empty by default. Default severities follow one rule — CRITICAL means service lost, WARNING means redundancy lost — since every part of this hardware is redundant.--command-cache-ttl, 0 by default) lets a site that splits the monitoring into many services share thels*answers between checks.ls*reads; the prefix (/rest/v1since 8.1.3,/restbefore) is auto-detected or pinned with--api-path.hostsinverts the usual order on purpose:offlineis WARNING (the array cannot tell a deliberately powered-off server from a failed one),degradedis CRITICAL (a running host on eaten-into redundancy). The reasoning is in the help; I am happy to align on whatever default you prefer.Two naming questions — this is why the pull request is opened as a draft:
src/storage/ibm/flashsystem/restapi/. The product line is "Storage Virtualize" and covers Storwize and SVC as well, and the existing SSH plugin lives understorwize/. Would you rather havestorage/ibm/storwize/restapifor symmetry, or a newstorage/ibm/storagevirtualize/restapi? I will move it wherever you say.components; this one calls ithardware. Same answer: I will align.Type of change
How this pull request can be tested ?
Automated tests — twelve Robot suites, fifty cases, against a Mockoon environment built from a real FlashSystem 5300 collection and anonymised (WWPNs, serials, ids, host / volume / partition / system names, addresses):
Each mode is exercised through its plain run, filters, a forced status expression and numeric thresholds, so OK, WARNING and CRITICAL paths are all covered. Result on RHEL 9 with the framework dependencies:
50 tests, 50 passed, 0 failed.Against a real system — an account with the Monitor role is enough:
API facts, for the reviewers (the arrays present a self-signed certificate, hence
-k):Sample outputs — the plugin's real output against the anonymised environment (these are the expectations of the Robot suites):
Also included: the packaging directory (
centreon-plugin-Hardware-Storage-Ibm-Flashsystem-Restapi), one help entry per option with the default expression under the matching severity, and the Storage Virtualize vocabulary the help uses added to the spell checker dictionary.Checklist