An OMV box is a NAS built on Debian, but this driver inherited LinuxDriver alone
and implemented the storage getters by name, because inheriting StorageDriver as
well would have let its NotImplementedError stubs shadow LinuxDriver's working
package and service methods. DEVICE_CLASS = "storage" then existed to tell
netOrk what the class hierarchy no longer said.
napalm-device-types v1.0 makes role bases declaration-only, so both roles can be
declared honestly and in the order that matters:
class OpenMediaVaultDriver(StorageDriver, LinuxDriver):
device_class comes from that first base now, so DEVICE_CLASS is gone.
The driver inherits LinuxDriver for the OS surface and set TYPE_LABEL to
"Storage", but netOrk derives device_class from an issubclass chain that
reaches OSDriver before StorageDriver and returned "linux". The UI gates
the Storage tab on device_class === "storage", so an OMV device showed a
Storage label in the list and no Storage tab on the detail page — while
its disks, pools, volumes and shares were being collected and persisted
the whole time.
netOrk now honours an explicit DEVICE_CLASS attribute before falling back
to the chain, mirroring how it already honours TYPE_LABEL.
Refs christianmanivong/netork#111
get_device_warnings() now returns only {code, meta} — severity, title,
message, and action are resolved centrally by netork's
WARNING_CATALOG (netork/core/device_warnings.py), not by the driver.
Keeps this driver independent of netork and avoids per-vendor drift in
how the same warning code is presented.
The TYPE_LABEL attribute on the base class hierarchy is now the
canonical way for drivers to declare their device category. The
storage_device sentinel flag is removed — classification is determined
by reading TYPE_LABEL via getattr() in the backend.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>