Skip to content
Snippets Groups Projects
Commit 2b3e8870 authored by Erik Reid's avatar Erik Reid
Browse files

utility for checking snmp agent configs on routers

parent 5f15bf0a
No related branches found
No related tags found
No related merge requests found
from inventory_provider.tasks.common import get_current_redis
from inventory_provider import config
from lxml import etree
import socket
COLLECTORS = [
'prod-noc-alarms01.geant.org',
'prod-noc-alarms02.geant.org',
'prod-noc-alarms03.geant.org',
'uat-noc-alarms01.geant.org',
'uat-noc-alarms02.geant.org',
'uat-noc-alarms03.geant.org',
'test-noc-alarms01.geant.org',
'test-noc-alarms02.geant.org',
'test-noc-alarms03.geant.org'
]
def v4_address(hostname):
for a in socket.getaddrinfo(hostname, None):
(family, type, proto, canonname, sockaddr) = a
if family != socket.AF_INET:
continue
if type != socket.SOCK_DGRAM:
continue
return sockaddr[0]
assert False, 'not resolveable'
ADDRESS = dict([(c, v4_address(c)) for c in COLLECTORS])
with open('config-sentinel.json') as f:
params = config.load(f)
def agent_addresses(netconf_string):
doc = etree.fromstring(netconf_string)
return doc.xpath('//configuration/snmp/trap-group/targets/name/text()')
columns = [''] + COLLECTORS
print(','.join(columns))
columns = [''] + [ADDRESS[c] for c in COLLECTORS]
print(','.join(columns))
def _c(b):
return '+' if b else 'MISSING'
r = get_current_redis(params)
for k in r.scan_iter('netconf:*'):
k = k.decode('utf-8')
router = k[len('netconf:'):]
columns = [router]
data = r.get(k).decode('utf-8')
agents = agent_addresses(data)
columns += [_c(ADDRESS[c] in agents) for c in COLLECTORS]
print(','.join(columns))
# # print(k)
# # print(etree.pretty_print(netconf_doc))
# break
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment