This commit is contained in:
Thomas Davis 2019-08-30 12:02:02 -07:00
commit 5ffa0bd6c2
2 changed files with 59 additions and 8 deletions

View file

@ -68,9 +68,10 @@ class Inventory():
) )
if not manufacturer: if not manufacturer:
logging.info('Creating missing manufacturer {name}'.format(name=name))
manufacturer = nb.dcim.manufacturers.create( manufacturer = nb.dcim.manufacturers.create(
name=name, name=name,
slug=name.lower(), slug=name.replace(' ','-').lower(),
) )
logging.info('Creating missing manufacturer {name}'.format(name=name)) logging.info('Creating missing manufacturer {name}'.format(name=name))
@ -78,14 +79,14 @@ class Inventory():
def create_netbox_cpus(self): def create_netbox_cpus(self):
for cpu in self.lshw.get_hw_linux('cpu'): for cpu in self.lshw.get_hw_linux('cpu'):
manufacturer = self.find_or_create_manufacturer(self, cpu["vendor"]) manufacturer = self.find_or_create_manufacturer(cpu["vendor"])
_ = nb.dcim.inventory_items.create( _ = nb.dcim.inventory_items.create(
device=self.device_id, device=self.device_id,
manufacturer = manufacturer.id, manufacturer = manufacturer.id,
discovered=True, discovered=True,
tags=[INVENTORY_TAG['cpu']['name']], tags=[INVENTORY_TAG['cpu']['name']],
name=cpu['product'], name=cpu['product'],
description='CPU', description='{}'.format(cpu['location']),
asset_tag=cpu['location'] asset_tag=cpu['location']
) )
@ -180,10 +181,41 @@ class Inventory():
self.create_netbox_raid_card(raid_card) self.create_netbox_raid_card(raid_card)
def get_disks(self): def get_disks(self):
ret = [] disks = []
for disk in self.lshw.get_hw_linux("storage"):
print(disk)
d = {}
d["name"] = ""
d['Size'] = '{} GB'.format(int(disk['size']/1024/1024/1024))
d['Model'] = disk['product']
d['logicalname'] = disk['logicalname']
d['description'] = disk['description']
if 'serial' in disk:
d['SN'] = disk['serial']
if 'vendor' in disk:
d['vendor'] = disk['vendor']
if disk['product'].startswith('ST'):
d['vendor'] = 'Seagate'
if disk['product'].startswith('Crucial'):
d['vendor'] = 'Crucial'
if disk['product'].startswith('INTEL'):
d['vendor'] = 'Intel'
if disk['product'].startswith('Samsung'):
d['vendor'] = 'Samsung'
disks.append(d)
for raid_card in self.get_raid_cards(): for raid_card in self.get_raid_cards():
ret += raid_card.get_physical_disks() disks += raid_card.get_physical_disks()
return ret
return disks
def get_netbox_disks(self): def get_netbox_disks(self):
disks = nb.dcim.inventory_items.filter( disks = nb.dcim.inventory_items.filter(
@ -194,12 +226,24 @@ class Inventory():
def create_netbox_disks(self): def create_netbox_disks(self):
for disk in self.get_disks(): for disk in self.get_disks():
m_id = 0
if "vendor" in disk:
manufacturer = self.find_or_create_manufacturer(disk["vendor"])
m_id = manufacturer.id
print("inserting disk")
print(disk)
_ = nb.dcim.inventory_items.create( _ = nb.dcim.inventory_items.create(
device=self.device_id, device=self.device_id,
discovered=True, discovered=True,
tags=[INVENTORY_TAG['disk']['name']], tags=[INVENTORY_TAG['disk']['name']],
name='{} ({})'.format(disk['Model'], disk['Size']), name='{} - {} ({})'.format(disk.get('description', 'Unknown'), disk.get('logicalname', 'Unknown'), disk.get('Size', 0)),
serial=disk['SN'], serial=disk['SN'],
part_id=disk['Model'],
description='{}'.format(disk.get('logicalname', 'Unknown')),
# asset_tag=disk['logicalname'],
manufacturer=m_id
) )
logging.info('Creating Disk {model} {serial}'.format( logging.info('Creating Disk {model} {serial}'.format(
model=disk['Model'], model=disk['Model'],

View file

@ -80,12 +80,19 @@ class LSHW():
self.disks.append(d) self.disks.append(d)
elif "nvme" in obj["configuration"]["driver"]: elif "nvme" in obj["configuration"]["driver"]:
nvme = json.loads(subprocess.check_output(["nvme", '-list', '-o', 'json'],encoding='utf8'))
d = {} d = {}
d["vendor"] = obj["vendor"] d["vendor"] = obj["vendor"]
d["version"] = obj["version"] d["version"] = obj["version"]
d["description"] = obj["description"]
d["product"] = obj["product"] d["product"] = obj["product"]
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): def find_cpus(self, obj):