From a896d118d75999c6a1a6c4b1dbd79149ce0a8470 Mon Sep 17 00:00:00 2001 From: Cyrinux Date: Tue, 23 Jun 2020 21:01:32 +0200 Subject: [PATCH 1/4] * Loop on nvme disk (#138) * Remove vendor and product (not present, make crash) * Use firmware version for version --- netbox_agent/lshw.py | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/netbox_agent/lshw.py b/netbox_agent/lshw.py index c7841a1..dadc818 100644 --- a/netbox_agent/lshw.py +++ b/netbox_agent/lshw.py @@ -91,18 +91,16 @@ class LSHW(): encoding='utf8') ) - d = {} - d["vendor"] = obj["vendor"] - d["version"] = obj["version"] - d["product"] = obj["product"] + for device in nvme["Devices"]: + d = {} + d['logicalname'] = device["DevicePath"] + d['product'] = device["ModelNumber"] + d['serial'] = device["SerialNumber"] + d["version"] = device["Firmware"] + d['size'] = device["UsedSize"] + d['description'] = "NVME Disk" - d['description'] = "NVME Disk" - d['product'] = nvme["Devices"][0]["ModelNumber"] - d['size'] = nvme["Devices"][0]["PhysicalSize"] - d['serial'] = nvme["Devices"][0]["SerialNumber"] - d['logicalname'] = nvme["Devices"][0]["DevicePath"] - - self.disks.append(d) + self.disks.append(d) def find_cpus(self, obj): if "product" in obj: -- 2.47.1 From f65418707412e93b2dc86893b9632502f8c87ab8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 29 Jun 2020 09:18:00 +0200 Subject: [PATCH 2/4] Update dependency netaddr to v0.7.20 (#136) Co-authored-by: Renovate Bot --- requirements.txt | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index c514916..82b9382 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ pynetbox==4.3.1 -netaddr==0.7.19 +netaddr==0.7.20 netifaces==0.10.9 pyyaml==5.3.1 jsonargparse==2.31.0 diff --git a/setup.py b/setup.py index 35bbc3e..cf6adae 100644 --- a/setup.py +++ b/setup.py @@ -15,7 +15,7 @@ setup( use_scm_version=True, install_requires=[ 'pynetbox==4.3.1', - 'netaddr==0.7.19', + 'netaddr==0.7.20', 'netifaces==0.10.9', 'pyyaml==5.3.1', 'jsonargparse==2.31.0', -- 2.47.1 From 937ec413d4aa68b05af4f4d4ebfca647d2f70059 Mon Sep 17 00:00:00 2001 From: Solvik Blum Date: Wed, 1 Jul 2020 12:44:34 +0200 Subject: [PATCH 3/4] make the agent work if only a datacenter is specified --- netbox_agent/server.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/netbox_agent/server.py b/netbox_agent/server.py index 5db5513..cac566e 100644 --- a/netbox_agent/server.py +++ b/netbox_agent/server.py @@ -49,10 +49,12 @@ class ServerBase(): return dc.get() def get_netbox_datacenter(self): - datacenter = nb.dcim.sites.get( - slug=self.get_datacenter() - ) - return datacenter + dc = self.get_datacenter() + if dc: + return nb.dcim.sites.get( + slug=dc, + ) + return None def update_netbox_location(self, server): dc = self.get_datacenter() @@ -86,11 +88,18 @@ class ServerBase(): return rack.get() def get_netbox_rack(self): - rack = nb.dcim.racks.get( - name=self.get_rack(), - site_id=self.get_netbox_datacenter().id, + rack = self.get_rack() + datacenter = self.get_netbox_datacenter() + if not rack: + return None + if rack and not datacenter: + logging.warning("Can't get rack if no datacenter is configured or found") + return None + + return nb.dcim.racks.get( + name=rack, + site_id=datacenter.id, ) - return rack def get_product_name(self): """ -- 2.47.1 From a940e725cd608be6b2213d4a18f0b3c27ab66fa3 Mon Sep 17 00:00:00 2001 From: Solvik Blum Date: Wed, 1 Jul 2020 18:16:03 +0200 Subject: [PATCH 4/4] exit upon error if no datacenter is found --- netbox_agent/server.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/netbox_agent/server.py b/netbox_agent/server.py index cac566e..687c964 100644 --- a/netbox_agent/server.py +++ b/netbox_agent/server.py @@ -1,6 +1,7 @@ import logging import socket import subprocess +import sys from pprint import pprint import netbox_agent.dmidecode as dmidecode @@ -50,11 +51,18 @@ class ServerBase(): def get_netbox_datacenter(self): dc = self.get_datacenter() - if dc: - return nb.dcim.sites.get( - slug=dc, - ) - return None + if dc is None: + logging.error("Specificing a datacenter (Site) is mandatory in Netbox") + sys.exit(1) + + nb_dc = nb.dcim.sites.get( + slug=dc, + ) + if nb_dc is None: + logging.error("Site (slug: {}) has not been found".format(dc)) + sys.exit(1) + + return nb_dc def update_netbox_location(self, server): dc = self.get_datacenter() @@ -93,8 +101,8 @@ class ServerBase(): if not rack: return None if rack and not datacenter: - logging.warning("Can't get rack if no datacenter is configured or found") - return None + logging.error("Can't get rack if no datacenter is configured or found") + sys.exit(1) return nb.dcim.racks.get( name=rack, -- 2.47.1