#!/usr/bin/env python from __future__ import print_function import sys, getopt, hmac, hashlib, subprocess def warning(*objs): print(*objs, file=sys.stderr) opts, args = getopt.getopt(sys.argv[1:], "k:h", [ "key=", "help" ]) pkey = None for opt, arg in opts: if opt == "-?" or opt == "--help": warning("Syntax: %s --key ") sys.exit(1) elif opt == "-k" or opt == "--key": pkey = arg if not pkey: warning("You must specify a key with the --key option.") sys.exit(1) if len(args) != 1: warning("Please specify exactly one IP address.") sys.exit(1) ipaddr = args[0] def ukey(ipaddr): return hmac.new(pkey, ipaddr, hashlib.sha256).hexdigest()[0:12] plugins = [] community = ukey(ipaddr) warning("IP address: %s, SNMP Community: %s" % (ipaddr, community)) process = subprocess.Popen(["snmpwalk", "-v2c", "-c", community, "-On", ipaddr, ".1.3.6.1.4.1.8072.1.3.2.3.1.2"], stdout=subprocess.PIPE) (out, err) = process.communicate() if process.returncode != 0: sys.exit(1) for line in out.split("\n"): oid = line.split(" ")[0] plugin = oid.split(".")[15:] if len(plugin) == 0: continue plugin = "".join([chr(int(ch)) for ch in plugin]) plugins.append(plugin) print("template Host \"snmp-extend:%s\" {" % (ipaddr)) print(" macros[\"community\"] = \"%s\"," % (community)) for plugin in plugins: print(" services[\"%s\"] = {" % (plugin)) print(" templates = [ \"snmp-extend-service\" ],") print(" check_command = \"snmp-extend\",") print(" macros[\"plugin\"] = \"%s\"" % (plugin)) print(" },") print("}") sys.exit(0)