This commit is contained in:
Solvik Blum 2019-09-03 11:40:22 +02:00
parent bc031c32ca
commit 741f241607
No known key found for this signature in database
GPG key ID: CC12B3DC262B6C47
4 changed files with 66 additions and 31 deletions

View file

@ -18,14 +18,14 @@ MANUFACTURERS = {
def run(config): def run(config):
manufacturer = dmidecode.get_by_type('Chassis')[0].get('Manufacturer') manufacturer = dmidecode.get_by_type('Chassis')[0].get('Manufacturer')
server = MANUFACTURERS[manufacturer](dmi=dmidecode) server = MANUFACTURERS[manufacturer](dmi=dmidecode)
print(config.netbox.url)
print(config.netbox.token)
if config.debug: if config.debug:
server.print_debug() server.print_debug()
if config.register: if config.register:
server.netbox_create() server.netbox_create(config)
if config.update_all: if config.update_all or config.update_network or config.update_location or \
server.netbox_update() config.update_inventory:
server.netbox_update(config)
return True return True

View file

@ -15,19 +15,6 @@ INVENTORY_TAG = {
} }
def create_tags():
for key, tag in INVENTORY_TAG.items():
nb_tag = nb.extras.tags.get(
name=tag['name']
)
if not nb_tag:
nb_tag = nb.extras.tags.create(
name=tag['name'],
slug=tag['slug'],
comments=tag['name'],
)
class Inventory(): class Inventory():
""" """
Better Inventory items coming, see: Better Inventory items coming, see:
@ -52,14 +39,25 @@ class Inventory():
""" """
def __init__(self, server): def __init__(self, server):
if config.inventory is None or config.update_inventory is None: self.create_netbox_tags()
return None
self.server = server self.server = server
netbox_server = self.server.get_netbox_server() netbox_server = self.server.get_netbox_server()
self.device_id = netbox_server.id if netbox_server else None self.device_id = netbox_server.id if netbox_server else None
self.raid = None self.raid = None
self.disks = [] self.disks = []
def create_netbox_tags():
for key, tag in INVENTORY_TAG.items():
nb_tag = nb.extras.tags.get(
name=tag['name']
)
if not nb_tag:
nb_tag = nb.extras.tags.create(
name=tag['name'],
slug=tag['slug'],
comments=tag['name'],
)
def get_cpus(self): def get_cpus(self):
model = None model = None
nb = None nb = None
@ -315,7 +313,7 @@ class Inventory():
self.create_netbox_memory(memory) self.create_netbox_memory(memory)
def create(self): def create(self):
if not config.inventory: if config.inventory is None:
return False return False
self.create_netbox_cpus() self.create_netbox_cpus()
self.create_netbox_memory() self.create_netbox_memory()

View file

@ -503,6 +503,7 @@ class Network():
def update_netbox_network_cards(self): def update_netbox_network_cards(self):
if config.update_all is None or config.update_network is None: if config.update_all is None or config.update_network is None:
print(config)
return None return None
logging.debug('Updating NIC...') logging.debug('Updating NIC...')

View file

@ -30,6 +30,33 @@ class ServerBase():
) )
return datacenter return datacenter
def update_netbox_location(self, server):
dc = self.get_datacenter()
rack = self.get_rack()
nb_rack = self.get_netbox_rack()
nb_dc = self.get_netbox_datacenter()
update = False
if dc and server.site.slug != nb_dc.slug:
logging.info('Datacenter location has changed from {} to {}, updating'.format(
server.site.slug,
nb_dc.slug,
))
update = True
server.site = nb_dc.id
if rack and server.rack != nb_rack:
logging.info('Rack location has changed from {} to {}, updating'.format(
server.rack,
nb_rack,
))
update = True
server.rack = nb_rack
if nb_rack is None:
server.face = None
server.position = None
return update, server
def get_rack(self): def get_rack(self):
rack = Rack() rack = Rack()
return rack.get() return rack.get()
@ -175,7 +202,7 @@ class ServerBase():
def get_netbox_server(self): def get_netbox_server(self):
return nb.dcim.devices.get(serial=self.get_service_tag()) return nb.dcim.devices.get(serial=self.get_service_tag())
def netbox_create(self): def netbox_create(self, config):
logging.debug('Creating Server..') logging.debug('Creating Server..')
datacenter = self.get_netbox_datacenter() datacenter = self.get_netbox_datacenter()
rack = self.get_netbox_rack() rack = self.get_netbox_rack()
@ -205,8 +232,9 @@ class ServerBase():
self.network = Network(server=self) self.network = Network(server=self)
self.network.create_netbox_network_cards() self.network.create_netbox_network_cards()
self.inventory = Inventory(server=self) if config.inventory:
self.inventory.create() self.inventory = Inventory(server=self)
self.inventory.create()
logging.debug('Server created!') logging.debug('Server created!')
def _netbox_update_chassis_for_blade(self, server, datacenter): def _netbox_update_chassis_for_blade(self, server, datacenter):
@ -235,7 +263,7 @@ class ServerBase():
# Set slot for blade # Set slot for blade
self._netbox_set_blade_slot(chassis, server) self._netbox_set_blade_slot(chassis, server)
def netbox_update(self): def netbox_update(self, config):
""" """
Netbox method to update info about our server/blade Netbox method to update info about our server/blade
@ -246,11 +274,12 @@ class ServerBase():
* new network infos * new network infos
""" """
logging.debug('Updating Server...') logging.debug('Updating Server...')
server = nb.dcim.devices.get(serial=self.get_service_tag()) server = nb.dcim.devices.get(serial=self.get_service_tag())
if not server: if not server:
raise Exception("The server (Serial: {}) isn't yet registered in Netbox, register" raise Exception("The server (Serial: {}) isn't yet registered in Netbox, register"
'it before updating it'.format(self.get_service_tag())) 'it before updating it'.format(self.get_service_tag()))
update = False update = 0
if self.is_blade(): if self.is_blade():
datacenter = self.get_netbox_datacenter() datacenter = self.get_netbox_datacenter()
# if it's already linked to a chassis # if it's already linked to a chassis
@ -269,14 +298,21 @@ class ServerBase():
# for every other specs # for every other specs
# check hostname # check hostname
if server.name != self.get_hostname(): if server.name != self.get_hostname():
update = True update += 1
server.hostname = self.get_hostname() server.hostname = self.get_hostname()
if config.update_all or config.update_location:
ret, server = self.update_netbox_location(server)
update += ret
# check network cards # check network cards
self.network = Network(server=self) if config.update_all or config.update_network:
self.network.update_netbox_network_cards() self.network = Network(server=self)
self.network.update_netbox_network_cards()
# update inventory # update inventory
self.inventory = Inventory(server=self) if config.update_all or config.update_inventory:
self.inventory.update() self.inventory = Inventory(server=self)
self.inventory.update()
if update: if update:
server.save() server.save()
logging.debug('Finished updating Server!') logging.debug('Finished updating Server!')