Solvik / netbox-agent

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

Supermicro only baseboard serial number set #296

Open Garfunkl opened 6 months ago

Garfunkl commented 6 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 2 months 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 2 months 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.

TiagoTT commented 3 weeks ago

Thank you @Garfunkl for the proposed solution. We are facing the same issue with the default serial number in many of our Supermicro servers and I took the liberty to pick you proposed solution and opened this pull request: https://github.com/Solvik/netbox-agent/pull/321 In this other pull request there is also a new command line option to update the serial number of existing servers, which we needed to update the old serial numbers with the new ones without removing the server object from Netbox: https://github.com/Solvik/netbox-agent/pull/320