From 2b3e887019e6a025336a24397d7921e63977478e Mon Sep 17 00:00:00 2001 From: Erik Reid <erik.reid@geant.org> Date: Tue, 26 May 2020 20:37:37 +0200 Subject: [PATCH] utility for checking snmp agent configs on routers --- test/data/check-snmp-agent-configs.py | 64 +++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 test/data/check-snmp-agent-configs.py diff --git a/test/data/check-snmp-agent-configs.py b/test/data/check-snmp-agent-configs.py new file mode 100644 index 00000000..e91061e8 --- /dev/null +++ b/test/data/check-snmp-agent-configs.py @@ -0,0 +1,64 @@ +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 + + -- GitLab