diff --git a/netbox_agent/cli.py b/netbox_agent/cli.py index b2b41c5..6a3170e 100644 --- a/netbox_agent/cli.py +++ b/netbox_agent/cli.py @@ -18,14 +18,14 @@ MANUFACTURERS = { def run(config): manufacturer = dmidecode.get_by_type('Chassis')[0].get('Manufacturer') server = MANUFACTURERS[manufacturer](dmi=dmidecode) - print(config.netbox.url) - print(config.netbox.token) + if config.debug: server.print_debug() if config.register: - server.netbox_create() - if config.update_all: - server.netbox_update() + server.netbox_create(config) + if config.update_all or config.update_network or config.update_location or \ + config.update_inventory: + server.netbox_update(config) return True diff --git a/netbox_agent/inventory.py b/netbox_agent/inventory.py index 67c3455..58e0b73 100644 --- a/netbox_agent/inventory.py +++ b/netbox_agent/inventory.py @@ -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(): """ Better Inventory items coming, see: @@ -52,14 +39,25 @@ class Inventory(): """ def __init__(self, server): - if config.inventory is None or config.update_inventory is None: - return None + self.create_netbox_tags() self.server = server netbox_server = self.server.get_netbox_server() self.device_id = netbox_server.id if netbox_server else None self.raid = None 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): model = None nb = None @@ -315,7 +313,7 @@ class Inventory(): self.create_netbox_memory(memory) def create(self): - if not config.inventory: + if config.inventory is None: return False self.create_netbox_cpus() self.create_netbox_memory() diff --git a/netbox_agent/network.py b/netbox_agent/network.py index c65913d..d2cfeb9 100644 --- a/netbox_agent/network.py +++ b/netbox_agent/network.py @@ -503,6 +503,7 @@ class Network(): def update_netbox_network_cards(self): if config.update_all is None or config.update_network is None: + print(config) return None logging.debug('Updating NIC...') diff --git a/netbox_agent/server.py b/netbox_agent/server.py index f57fa9e..6ad3cdd 100644 --- a/netbox_agent/server.py +++ b/netbox_agent/server.py @@ -30,6 +30,33 @@ class ServerBase(): ) 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): rack = Rack() return rack.get() @@ -175,7 +202,7 @@ class ServerBase(): def get_netbox_server(self): return nb.dcim.devices.get(serial=self.get_service_tag()) - def netbox_create(self): + def netbox_create(self, config): logging.debug('Creating Server..') datacenter = self.get_netbox_datacenter() rack = self.get_netbox_rack() @@ -205,8 +232,9 @@ class ServerBase(): self.network = Network(server=self) self.network.create_netbox_network_cards() - self.inventory = Inventory(server=self) - self.inventory.create() + if config.inventory: + self.inventory = Inventory(server=self) + self.inventory.create() logging.debug('Server created!') def _netbox_update_chassis_for_blade(self, server, datacenter): @@ -235,7 +263,7 @@ class ServerBase(): # Set slot for blade 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 @@ -246,11 +274,12 @@ class ServerBase(): * new network infos """ logging.debug('Updating Server...') + server = nb.dcim.devices.get(serial=self.get_service_tag()) if not server: raise Exception("The server (Serial: {}) isn't yet registered in Netbox, register" 'it before updating it'.format(self.get_service_tag())) - update = False + update = 0 if self.is_blade(): datacenter = self.get_netbox_datacenter() # if it's already linked to a chassis @@ -269,14 +298,21 @@ class ServerBase(): # for every other specs # check hostname if server.name != self.get_hostname(): - update = True + update += 1 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 - self.network = Network(server=self) - self.network.update_netbox_network_cards() + if config.update_all or config.update_network: + self.network = Network(server=self) + self.network.update_netbox_network_cards() # update inventory - self.inventory = Inventory(server=self) - self.inventory.update() + if config.update_all or config.update_inventory: + self.inventory = Inventory(server=self) + self.inventory.update() if update: server.save() logging.debug('Finished updating Server!')