use lshw for inventory #58
3 changed files with 35 additions and 38 deletions
|
@ -1,21 +1,15 @@
|
|||
import logging
|
||||
import subprocess
|
||||
import re
|
||||
|
||||
from netbox_agent.config import netbox_instance as nb, config
|
||||
from netbox_agent.misc import is_tool
|
||||
from netbox_agent.raid.hp import HPRaid
|
||||
from netbox_agent.raid.storcli import StorcliRaid
|
||||
from netbox_agent.lshw import LSHW
|
||||
|
||||
from pprint import pprint
|
||||
|
||||
INVENTORY_TAG = {
|
||||
'cpu': {'name': 'hw:cpu', 'slug': 'hw-cpu'},
|
||||
'disk': {'name': 'hw:disk', 'slug': 'hw-disk'},
|
||||
'interface':{'name': 'hw:interface', 'slug':'hw-interface'},
|
||||
'interface': {'name': 'hw:interface', 'slug': 'hw-interface'},
|
||||
'memory': {'name': 'hw:memory', 'slug': 'hw-memory'},
|
||||
'motherboard':{'name': 'hw:motherboard', 'slug':'hw-motherboard'},
|
||||
'motherboard': {'name': 'hw:motherboard', 'slug': 'hw-motherboard'},
|
||||
'raid_card': {'name': 'hw:raid_card', 'slug': 'hw-raid-card'},
|
||||
}
|
||||
|
||||
|
@ -109,7 +103,12 @@ class Inventory():
|
|||
description=description
|
||||
)
|
||||
|
||||
logging.info('Creating inventory item {} {}/{} {} '.format(vendor, name, serial, description))
|
||||
logging.info('Creating inventory item {} {}/{} {} '.format(
|
||||
vendor,
|
||||
name,
|
||||
serial,
|
||||
description)
|
||||
)
|
||||
|
||||
def get_hw_motherboards(self):
|
||||
motherboards = []
|
||||
|
@ -325,28 +324,28 @@ class Inventory():
|
|||
return disks
|
||||
|
||||
def create_netbox_disk(self, disk):
|
||||
if "vendor" in disk:
|
||||
manufacturer = self.find_or_create_manufacturer(disk["vendor"])
|
||||
if "vendor" in disk:
|
||||
manufacturer = self.find_or_create_manufacturer(disk["vendor"])
|
||||
|
||||
_ = nb.dcim.inventory_items.create(
|
||||
device=self.device_id,
|
||||
discovered=True,
|
||||
tags=[INVENTORY_TAG['disk']['name']],
|
||||
name='{} - {} ({})'.format(
|
||||
disk.get('description', 'Unknown'),
|
||||
disk.get('logicalname', 'Unknown'),
|
||||
disk.get('size', 0)
|
||||
),
|
||||
serial=disk['serial'],
|
||||
part_id=disk['model'],
|
||||
description='Device {}'.format(disk.get('logicalname', 'Unknown')),
|
||||
manufacturer=manufacturer.id
|
||||
)
|
||||
_ = nb.dcim.inventory_items.create(
|
||||
device=self.device_id,
|
||||
discovered=True,
|
||||
tags=[INVENTORY_TAG['disk']['name']],
|
||||
name='{} - {} ({})'.format(
|
||||
disk.get('description', 'Unknown'),
|
||||
disk.get('logicalname', 'Unknown'),
|
||||
disk.get('size', 0)
|
||||
),
|
||||
serial=disk['serial'],
|
||||
part_id=disk['model'],
|
||||
description='Device {}'.format(disk.get('logicalname', 'Unknown')),
|
||||
manufacturer=manufacturer.id
|
||||
)
|
||||
|
||||
logging.info('Creating Disk {model} {serial}'.format(
|
||||
model=disk['model'],
|
||||
serial=disk['serial'],
|
||||
))
|
||||
logging.info('Creating Disk {model} {serial}'.format(
|
||||
model=disk['model'],
|
||||
serial=disk['serial'],
|
||||
))
|
||||
|
||||
def do_netbox_disks(self):
|
||||
nb_disks = self.get_netbox_inventory(
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
import logging
|
||||
|
||||
import subprocess
|
||||
import getpass
|
||||
import json
|
||||
|
||||
from pprint import pprint
|
||||
|
||||
class LSHW():
|
||||
def __init__(self):
|
||||
|
@ -80,7 +77,8 @@ class LSHW():
|
|||
self.disks.append(d)
|
||||
|
||||
elif "nvme" in obj["configuration"]["driver"]:
|
||||
nvme = json.loads(subprocess.check_output(["nvme", '-list', '-o', 'json'],encoding='utf8'))
|
||||
nvme = json.loads(subprocess.check_output(["nvme", '-list', '-o', 'json'],
|
||||
encoding='utf8'))
|
||||
|
||||
d = {}
|
||||
d["vendor"] = obj["vendor"]
|
||||
|
@ -96,7 +94,6 @@ class LSHW():
|
|||
self.disks.append(d)
|
||||
|
||||
def find_cpus(self, obj):
|
||||
pprint(obj)
|
||||
c = {}
|
||||
c["product"] = obj["product"]
|
||||
c["vendor"] = obj["vendor"]
|
||||
|
@ -107,7 +104,7 @@ class LSHW():
|
|||
|
||||
def find_memories(self, obj):
|
||||
if "children" not in obj:
|
||||
print("not a DIMM memory.")
|
||||
# print("not a DIMM memory.")
|
||||
return
|
||||
|
||||
for dimm in obj["children"]:
|
||||
|
@ -141,5 +138,5 @@ class LSHW():
|
|||
self.find_network(b)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if __name__ == "__main__":
|
||||
pass
|
||||
|
|
5
netbox_agent/vendors/supermicro.py
vendored
5
netbox_agent/vendors/supermicro.py
vendored
|
@ -1,3 +1,4 @@
|
|||
|
||||
from netbox_agent.location import Slot
|
||||
from netbox_agent.server import ServerBase
|
||||
|
||||
|
@ -14,6 +15,7 @@ from netbox_agent.server import ServerBase
|
|||
|
||||
"""
|
||||
|
||||
|
||||
class SupermicroHost(ServerBase):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(SupermicroHost, self).__init__(*args, **kwargs)
|
||||
|
@ -38,7 +40,7 @@ class SupermicroHost(ServerBase):
|
|||
|
||||
def get_product_name(self):
|
||||
if self.is_blade():
|
||||
return self.baseboard[0]['Product Name'].strip()
|
||||
return self.baseboard[0]['Product Name'].strip()
|
||||
return self.system[0]['Product Name'].strip()
|
||||
|
||||
def get_chassis(self):
|
||||
|
@ -55,4 +57,3 @@ class SupermicroHost(ServerBase):
|
|||
if not self.is_blade():
|
||||
return None
|
||||
return 'Chassis {}'.format(self.get_chassis_service_tag())
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue