From 3aa6d81a62505b6634930333cb7a3df4c4c53efa Mon Sep 17 00:00:00 2001
From: Erik Reid <erik.reid@geant.org>
Date: Thu, 27 Jun 2019 16:07:19 +0200
Subject: [PATCH] simpler method for retreiving snmp indexes

---
 inventory_provider/snmp.py | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/inventory_provider/snmp.py b/inventory_provider/snmp.py
index a5a48b70..e7cc25a4 100644
--- a/inventory_provider/snmp.py
+++ b/inventory_provider/snmp.py
@@ -7,6 +7,18 @@ from pysnmp.smi import builder, compiler
 # from pysnmp.smi import view, rfc1902
 
 
+OID_LIST = {
+    ## IPv4
+    'v4Address': '.1.3.6.1.2.1.4.20.1.1',
+    'v4InterfaceOID': '.1.3.6.1.2.1.4.20.1.2',
+    'v4InterfaceName': '.1.3.6.1.2.1.31.1.1.1.1',
+    'v4Mask': '.1.3.6.1.2.1.4.20.1.3',
+
+    ## IPv6
+    'v6AddressAndMask' '.1.3.6.1.2.1.55.1.8.1.2'
+    'v6InterfaceName': '.1.3.6.1.2.1.55.1.5.1.2'
+}
+
 def _v6address_oid2str(dotted_decimal):
     hex_params = []
     for dec in re.split(r'\.', dotted_decimal):
@@ -78,6 +90,15 @@ def walk(agent_hostname, community, base_oid):  # pragma: no cover
             yield result
 
 
+def get_router_snmp_indexes(hostname, community):
+    indexes = {}
+    RFC1213_MIB_ifDesc = '1.3.6.1.2.1.2.2.1.2'
+    for ifc in walk(hostname, community, RFC1213_MIB_ifDesc):
+        m = re.match(r'.*\.(\d+)$', ifc['oid'])
+        assert m, 'sanity failure parsing oid: %r' % ifc['oid']
+        indexes[ifc['value']] = int(m.group(1))
+    return indexes
+
 def get_router_interfaces(hostname, community, config):
     oid_map = config["oids"]
 
@@ -123,3 +144,10 @@ def get_router_interfaces(hostname, community, config):
             "v6InterfaceName": v6IfcNames[m.group(1)],
             "index": m.group(1)
         }
+
+if __name__ == "__main__":
+    hostname = 'mx1.ams.nl.geant.net'
+    community = '0pBiFbD'
+    interfaces = get_router_snmp_indexes(hostname, community)
+    for name, index in interfaces.items():
+        print('%s: %s' % (name, index))
-- 
GitLab