Supermicro server can guess their slot via the config file (#50)
This commit is contained in:
parent
136a356cec
commit
0faee59bde
4 changed files with 33 additions and 1 deletions
|
@ -25,4 +25,10 @@ rack_location:
|
||||||
# driver: "file:/tmp/datacenter"
|
# driver: "file:/tmp/datacenter"
|
||||||
# regex: "(.*)"
|
# regex: "(.*)"
|
||||||
|
|
||||||
|
# Some servers dont report the slot, since most people put it in the hostname
|
||||||
|
# here's a way to extract it and maintain correct slot location in Netbox
|
||||||
|
# slot_location:
|
||||||
|
# driver: 'cmd:hostname'
|
||||||
|
# regex: '.*-(\d+)'
|
||||||
|
|
||||||
inventory: true
|
inventory: true
|
||||||
|
|
|
@ -18,6 +18,9 @@ DATACENTER_LOCATION_REGEX = None
|
||||||
RACK_LOCATION_DRIVER_FILE = None
|
RACK_LOCATION_DRIVER_FILE = None
|
||||||
RACK_LOCATION = None
|
RACK_LOCATION = None
|
||||||
RACK_LOCATION_REGEX = None
|
RACK_LOCATION_REGEX = None
|
||||||
|
SLOT_LOCATION_DRIVER_FILE = None
|
||||||
|
SLOT_LOCATION = None
|
||||||
|
SLOT_LOCATION_REGEX = None
|
||||||
|
|
||||||
if config.get('datacenter_location'):
|
if config.get('datacenter_location'):
|
||||||
dc_loc = config.get('datacenter_location')
|
dc_loc = config.get('datacenter_location')
|
||||||
|
@ -31,6 +34,13 @@ if config.get('rack_location'):
|
||||||
RACK_LOCATION = rack_location.get('driver')
|
RACK_LOCATION = rack_location.get('driver')
|
||||||
RACK_LOCATION_REGEX = rack_location.get('regex')
|
RACK_LOCATION_REGEX = rack_location.get('regex')
|
||||||
|
|
||||||
|
if config.get('slot_location'):
|
||||||
|
slot_location = config['slot_location']
|
||||||
|
SLOT_LOCATION_DRIVER_FILE = slot_location.get('driver_file')
|
||||||
|
SLOT_LOCATION = slot_location.get('driver')
|
||||||
|
SLOT_LOCATION_REGEX = slot_location.get('regex')
|
||||||
|
|
||||||
|
|
||||||
NETWORK_IGNORE_INTERFACES = None
|
NETWORK_IGNORE_INTERFACES = None
|
||||||
NETWORK_IGNORE_IPS = None
|
NETWORK_IGNORE_IPS = None
|
||||||
NETWORK_LLDP = None
|
NETWORK_LLDP = None
|
||||||
|
|
|
@ -2,7 +2,8 @@ import importlib
|
||||||
import importlib.machinery
|
import importlib.machinery
|
||||||
|
|
||||||
from netbox_agent.config import DATACENTER_LOCATION, DATACENTER_LOCATION_DRIVER_FILE, \
|
from netbox_agent.config import DATACENTER_LOCATION, DATACENTER_LOCATION_DRIVER_FILE, \
|
||||||
DATACENTER_LOCATION_REGEX, RACK_LOCATION, RACK_LOCATION_DRIVER_FILE, RACK_LOCATION_REGEX
|
DATACENTER_LOCATION_REGEX, RACK_LOCATION, RACK_LOCATION_DRIVER_FILE, RACK_LOCATION_REGEX, \
|
||||||
|
SLOT_LOCATION, SLOT_LOCATION_DRIVER_FILE, SLOT_LOCATION_REGEX
|
||||||
|
|
||||||
|
|
||||||
class LocationBase():
|
class LocationBase():
|
||||||
|
@ -67,3 +68,12 @@ class Rack(LocationBase):
|
||||||
driver_file = RACK_LOCATION_DRIVER_FILE
|
driver_file = RACK_LOCATION_DRIVER_FILE
|
||||||
regex = RACK_LOCATION_REGEX
|
regex = RACK_LOCATION_REGEX
|
||||||
super().__init__(driver, driver_value, driver_file, regex)
|
super().__init__(driver, driver_value, driver_file, regex)
|
||||||
|
|
||||||
|
|
||||||
|
class Slot(LocationBase):
|
||||||
|
def __init__(self):
|
||||||
|
driver = SLOT_LOCATION.split(':')[0] if SLOT_LOCATION else None
|
||||||
|
driver_value = ':'.join(SLOT_LOCATION.split(':')[1:]) if SLOT_LOCATION else None
|
||||||
|
driver_file = SLOT_LOCATION_DRIVER_FILE
|
||||||
|
regex = SLOT_LOCATION_REGEX
|
||||||
|
super().__init__(driver, driver_value, driver_file, regex)
|
||||||
|
|
6
netbox_agent/vendors/supermicro.py
vendored
6
netbox_agent/vendors/supermicro.py
vendored
|
@ -1,3 +1,4 @@
|
||||||
|
from netbox_agent.location import Slot
|
||||||
from netbox_agent.server import ServerBase
|
from netbox_agent.server import ServerBase
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,6 +7,11 @@ class SupermicroHost(ServerBase):
|
||||||
return self.get_product_name().startswith('SBI')
|
return self.get_product_name().startswith('SBI')
|
||||||
|
|
||||||
def get_blade_slot(self):
|
def get_blade_slot(self):
|
||||||
|
if self.is_blade():
|
||||||
|
# Some Supermicro servers don't report the slot in dmidecode
|
||||||
|
# let's use a regex
|
||||||
|
slot = Slot()
|
||||||
|
return slot.get()
|
||||||
# No supermicro on hands
|
# No supermicro on hands
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue