clean up supermicro some more.. start on inventory fixups.

This commit is contained in:
Thomas Davis 2019-08-29 12:01:10 -07:00
commit 95acc9d873
3 changed files with 34 additions and 10 deletions

View file

@ -313,7 +313,7 @@ class Inventory():
if not INVENTORY_ENABLED: if not INVENTORY_ENABLED:
return False return False
self.create_netbox_cpus() self.create_netbox_cpus()
self.create_netbox_memory() self.create_netbox_memories()
self.create_netbox_raid_cards() self.create_netbox_raid_cards()
self.create_netbox_disks() self.create_netbox_disks()
return True return True
@ -322,7 +322,7 @@ class Inventory():
if not INVENTORY_ENABLED: if not INVENTORY_ENABLED:
return False return False
self.update_netbox_cpus() self.update_netbox_cpus()
self.update_netbox_memory() self.update_netbox_memories()
self.update_netbox_raid_cards() self.update_netbox_raid_cards()
self.update_netbox_disks() self.update_netbox_disks()
return True return True

View file

@ -15,7 +15,10 @@ class ServerBase():
self.dmi = dmi self.dmi = dmi
else: else:
self.dmi = dmidecode.parse() self.dmi = dmidecode.parse()
self.system = self.dmi.get_by_type('System') self.system = self.dmi.get_by_type('System')
self.chassis = self.dmi.get_by_type('Chassis')
self.system = self.dmi.get_by_type('Baseboard')
self.bios = self.dmi.get_by_type('BIOS') self.bios = self.dmi.get_by_type('BIOS')
self.network = None self.network = None

View file

@ -1,6 +1,18 @@
from netbox_agent.location import Slot from netbox_agent.location import Slot
from netbox_agent.server import ServerBase from netbox_agent.server import ServerBase
"""
Supermicro DMI can be messed up. They depend on the vendor
to set the correct values. The endusers cannot
change them without buying a license from Supermicro.
There are 3 serial numbers in the system
1) Chassis - this the chassis
2) Baseboard - this is used for the blade.
3) System - this is ignored.
"""
class SupermicroHost(ServerBase): class SupermicroHost(ServerBase):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
@ -8,8 +20,8 @@ class SupermicroHost(ServerBase):
self.manufacturer = 'Supermicro' self.manufacturer = 'Supermicro'
def is_blade(self): def is_blade(self):
blade = self.get_product_name().startswith('SBI') blade = self.system[0]['Product Name'].startswith('SBI')
blade |= self.get_product_name().startswith('SYS') blade |= self.system[0]['Product Name'].startswith('SYS')
return blade return blade
def get_blade_slot(self): def get_blade_slot(self):
@ -21,17 +33,26 @@ class SupermicroHost(ServerBase):
# No supermicro on hands # No supermicro on hands
return None return None
def get_chassis_name(self): def get_service_tag(self):
if not self.is_blade(): return self.baseboard[0]['Serial Number'].strip()
return None
return 'Chassis {}'.format(self.get_service_tag()) def get_product_name(self):
if self.is_blade():
return self.baseboard[0]['Product Name'].strip()
return self.system[0]['Product Name'].strip()
def get_chassis(self): def get_chassis(self):
if self.is_blade(): if self.is_blade():
return self.dmi.get_by_type('Chassis')[0]['Version'] return "{} Chassis".format(self.system[0]['Product Name'].strip())
return self.get_product_name() return self.get_product_name()
def get_chassis_service_tag(self): def get_chassis_service_tag(self):
if self.is_blade(): if self.is_blade():
return self.dmi.get_by_type('Chassis')[0]['Serial Number'] return self.chassis[0]['Serial Number'].strip()
return self.get_service_tag() return self.get_service_tag()
def get_chassis_name(self):
if not self.is_blade():
return None
return 'Chassis {}'.format(self.get_chassis_service_tag())