Skip to content

Commit 0317b2f

Browse files
committed
wip - test netbox server creation:
1 parent bb7c8c8 commit 0317b2f

File tree

16 files changed

+164
-39
lines changed

16 files changed

+164
-39
lines changed

dev-requirements.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,5 @@ pytest-cov
55
flake8
66
flake8-isort
77
tox
8+
mock
9+
pyfakefs

netbox_agent/cli.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,13 @@
1818

1919

2020
def run(config):
21-
manufacturer = dmidecode.get_by_type('Chassis')[0].get('Manufacturer')
21+
dmi = dmidecode.parse()
22+
manufacturer = dmidecode.get_by_type(dmi, 'Chassis')[0].get('Manufacturer')
2223

2324
try:
24-
server = MANUFACTURERS[manufacturer](dmi=dmidecode)
25+
server = MANUFACTURERS[manufacturer](dmi=dmi)
2526
except KeyError:
26-
server = GenericHost
27+
server = GenericHost(dmi=dmi)
2728

2829
if config.debug:
2930
server.print_debug()

netbox_agent/ipmi.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,20 @@ class IPMI():
3535
"""
3636

3737
def __init__(self):
38-
self.ret, self.output = subprocess.getstatusoutput('ipmitool lan print')
38+
try:
39+
self.ret, self.output = subprocess.getstatusoutput('ipmitool lan print')
40+
except Exception as e:
41+
self.ret = 42
42+
self.output = str(e)
43+
3944
if self.ret != 0:
4045
logging.error('Cannot get ipmi info: {}'.format(self.output))
4146

4247
def parse(self):
43-
ret = {}
4448
if self.ret != 0:
45-
return ret
49+
return None
50+
51+
ret = {}
4652
for line in self.output.splitlines():
4753
key = line.split(':')[0].strip()
4854
value = ':'.join(line.split(':')[1:]).strip()

netbox_agent/lshw.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -103,13 +103,14 @@ def find_storage(self, obj):
103103
self.disks.append(d)
104104

105105
def find_cpus(self, obj):
106-
c = {}
107-
c["product"] = obj["product"]
108-
c["vendor"] = obj["vendor"]
109-
c["description"] = obj["description"]
110-
c["location"] = obj["slot"]
111-
112-
self.cpus.append(c)
106+
if "product" in obj:
107+
c = {}
108+
c["product"] = obj["product"]
109+
c["vendor"] = obj["vendor"]
110+
c["description"] = obj["description"]
111+
c["location"] = obj["slot"]
112+
113+
self.cpus.append(c)
113114

114115
def find_memories(self, obj):
115116
if "children" not in obj:

netbox_agent/network.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,9 @@ def reset_vlan_on_interface(self, nic, interface):
234234

235235
def create_or_update_ipmi(self):
236236
ipmi = self.get_ipmi()
237+
if ipmi is None:
238+
return None
239+
237240
mac = ipmi['MAC Address']
238241
ip = ipmi['IP Address']
239242
netmask = ipmi['Subnet Mask']

netbox_agent/power.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import logging
22

3+
import netbox_agent.dmidecode as dmidecode
34
from netbox_agent.config import netbox_instance as nb
45

56
PSU_DMI_TYPE = 39
@@ -16,7 +17,7 @@ def __init__(self, server=None):
1617

1718
def get_power_supply(self):
1819
power_supply = []
19-
for psu in self.server.dmi.get_by_type(PSU_DMI_TYPE):
20+
for psu in dmidecode.get_by_type(self.server.dmi, PSU_DMI_TYPE):
2021
if 'Present' not in psu['Status'] or psu['Status'] == 'Not Present':
2122
continue
2223

netbox_agent/vendors/dell.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def get_blade_slot(self):
2020
` Location In Chassis: Slot 03`
2121
"""
2222
if self.is_blade():
23-
return self.dmi.get_by_type('Baseboard')[0].get('Location In Chassis').strip()
23+
return self.baseboard[0].get('Location In Chassis').strip()
2424
return None
2525

2626
def get_chassis_name(self):
@@ -30,12 +30,12 @@ def get_chassis_name(self):
3030

3131
def get_chassis(self):
3232
if self.is_blade():
33-
return self.dmi.get_by_type('Chassis')[0]['Version'].strip()
33+
return self.chassis[0]['Version'].strip()
3434
return self.get_product_name()
3535

3636
def get_chassis_service_tag(self):
3737
if self.is_blade():
38-
return self.dmi.get_by_type('Chassis')[0]['Serial Number'].strip()
38+
return self.chassis[0]['Serial Number'].strip()
3939
return self.get_service_tag()
4040

4141
def get_power_consumption(self):

netbox_agent/vendors/generic.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
class GenericHost(ServerBase):
66
def __init__(self, *args, **kwargs):
77
super(GenericHost, self).__init__(*args, **kwargs)
8-
self.manufacturer = dmidecode.get_by_type('Baseboard')[0].get('Manufacturer')
8+
self.manufacturer = dmidecode.get_by_type(self.dmi, 'Baseboard')[0].get('Manufacturer')
99

1010
def is_blade(self):
1111
return None

netbox_agent/vendors/hp.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import netbox_agent.dmidecode as dmidecode
12
from netbox_agent.server import ServerBase
23

34

@@ -19,7 +20,7 @@ def _find_rack_locator(self):
1920
"""
2021
# FIXME: make a dmidecode function get_by_dminame() ?
2122
if self.is_blade():
22-
locator = self.dmi.get_by_type(204)
23+
locator = dmidecode.get_by_type(self.dmi, 204)
2324
if self.get_product_name() == 'ProLiant BL460c Gen10':
2425
locator = locator[0]['Strings']
2526
return {

netbox_agent/vendors/qct.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ def __init__(self, *args, **kwargs):
77
self.manufacturer = 'QCT'
88

99
def is_blade(self):
10-
return 'Location In Chassis' in self.dmi.get_by_type('Baseboard')[0].keys()
10+
return 'Location In Chassis' in self.baseboard[0].keys()
1111

1212
def get_blade_slot(self):
1313
if self.is_blade():
1414
return 'Slot {}'.format(
15-
self.dmi.get_by_type('Baseboard')[0].get('Location In Chassis').strip()
15+
self.baseboard[0].get('Location In Chassis').strip()
1616
)
1717
return None
1818

@@ -23,10 +23,10 @@ def get_chassis_name(self):
2323

2424
def get_chassis(self):
2525
if self.is_blade():
26-
return self.dmi.get_by_type('Chassis')[0]['Version'].strip()
26+
return self.chassis[0]['Version'].strip()
2727
return self.get_product_name()
2828

2929
def get_chassis_service_tag(self):
3030
if self.is_blade():
31-
return self.dmi.get_by_type('Chassis')[0]['Serial Number'].strip()
31+
return self.chassis[0]['Serial Number'].strip()
3232
return self.get_service_tag()

0 commit comments

Comments
 (0)