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