fix: stop scoring every HTTPS port as a BMC; name the missing license

netOrk's discovery took six switches for BMCs: the PortSpec for 443
added 5 points to every device with a web UI, and nothing else scored
them. The port now carries no weight.

The real BMC, a Supermicro X10DRL-i, was not recognised at all. Its web
UI (ATEN firmware) gets a rule, as do iDRAC and iLO; discovery fetches
those landing pages today. A rule for a Redfish error body covers the
service root once discovery reads it.

That board refuses Redfish without a Supermicro license, even the
service root (403 OemLicenseNotPassed, "SUM DCMS OOB"). The library
reports only the status, so open() reads the error body once more and
raises RedfishLicenseError naming the licenses.

Release 0.1.1.
This commit is contained in:
christianmanivong committed 2026-10-13 09:58:40 +02:00
1 parent c7d947a870
commit 93bbc63f3d
10 files changed
+183 -8

No files matched your search

+14 -4
View File
@@ -109,10 +109,20 @@ class RedfishDriver(ManagementControllerDriver):
platform = "redfish"
DRIVER_NAME = "redfish"
#: Every Redfish service answers ``GET /redfish/v1/`` without credentials.
PORT_SPECS = [PortSpec("https", 443, ("/redfish/v1/",))]
HTTP_FINGERPRINT = [FingerprintRule("redfishversion", 10.0),
FingerprintRule("#serviceroot.", 5.0)]
#: Every Redfish service answers ``GET /redfish/v1/`` without credentials. The port
#: itself is worth nothing: every switch with a web UI answers on 443.
PORT_SPECS = [PortSpec("https", 443, ("/redfish/v1/",), weight=0.0)]
HTTP_FINGERPRINT = [
# The service root, and the error body a service refuses it with (an unlicensed
# Supermicro X10 answers 403 with a Redfish error).
FingerprintRule("redfishversion", 10.0),
FingerprintRule("#serviceroot.", 5.0),
FingerprintRule("@message.extendedinfo", 8.0),
# Landing pages of the BMC web UIs: Supermicro X9-X11 (ATEN firmware), iDRAC, iLO.
FingerprintRule("aten international", 6.0),
FingerprintRule("idrac", 6.0),
FingerprintRule("integrated lights-out", 6.0),
]
#: A BMC restart takes a few minutes before Redfish answers again.
REBOOT_SETTLE_SECONDS = 180