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