Solvik / netbox-agent

Netbox agent to run on your infrastructure's servers
Apache License 2.0
287 stars 74 forks source link

Supermicro only baseboard serial number set #296

Open Garfunkl opened 5 months ago

Garfunkl commented 5 months ago

Describe the bug On our Supermicro Servers there is nearly never a system or chassis serial number set. That leads to this error:

...
File "/usr/local/lib/python3.9/site-packages/pynetbox/core/endpoint.py", line 147, in get raise ValueError(
ValueError: get() returned more than one result. Check that the kwarg(s) passed are valid for this endpoint or use filter() or all() instead.    

Expected behavior Maybe fall back to baseboard serial ?

Environment:

Additional context Working fix in my setup for netbox_agent/vendors/supermicro.py :

def get_service_tag(self):
    default_serial = "0123456789"
    baseboard_serial = self.baseboard[0]['Serial Number'].strip()
    system_serial = str(self.system[0]['Serial Number']).strip() 

    if self.is_blade() or system_serial == default_serial:
        return baseboard_serial
    return system_serial
FlorianHeigl commented 1 month ago

Hi,

as a fellow supermicro user I can confirm that patch is needed.

if you have many, could you complain to supermicro of their incompetence so they finally start getting this right? You might wanna have some conditions that whatever is returned is value is in fact looking like a serial number (so [0-9A-F]{1,20} or something - don't have one to look at right now)

Garfunkl commented 1 month ago

At least for us, it's probably not the fault of Supermicro. Supermicro doesn't sell its servers directly. We have to buy them from resellers, and on the bill, they show up with a custom serial from the reseller.

For example: A Supermicro server with the serial supermicro-xyz shows up as reseller-xyz. I think the resellers are supposed to set those serial numbers, but they nearly never do.

The "workaround" I proposed was to set the system serial number to the motherboard serial number if it is set to the default of "0123456789". Since the motherboard serial is set by Supermicro and is hopefully a unique identifier, this should resolve the issue.