def interrogate(args): db = get_db(args) hostname = args.hostname[0] authinfo = db.authinfo.find_one({"name": hostname}) if authinfo is None: authinfo = {"name": hostname} default = db.authinfo.find_one({"name": "default"}) if default is None: authinfo = {} descriptions = {} if args.snmp: for community in authinfo.get("community", []) + default.get("community", []): log.info("querying with SNMP community: %s" % community) try: from snmp import interrogate_snmp descriptions["snmp"] = interrogate_snmp(hostname, community=community) authinfo["community"] = [community] break except: pass if args.login: for u,p in authinfo.get("login", []) + default.get("login", []): log.info("logging in as user: %s" % u) try: from rlogin import interrogate_rlogin descriptions["login"] = interrogate_rlogin(host=hostname, username=u, password=p) authinfo["login"] = [(u,p)] break except: pass db.authinfo.save(authinfo) try: ident = pkey_check(descriptions) except PKeyError, e: log.warning("%s\n%s" % (e, format_exc(e))) return
from interrogate import interrogate from pprint import pprint from storage import pkey_check, mergedict logging.basicConfig(level=logging.INFO) # from rlogin import Rcmd, MetaHost # c = Rcmd(host=argv[1], username=argv[3], password=argv[4]) # h = MetaHost(c) # pprint(h.router_info()) # c.logout() # exit(0) descr = interrogate(argv[1], community=argv[2], username=argv[3], password=argv[4]) # pprint(descr) ident = pkey_check(descr) print "identifier:", ident import redis import json r = redis.Redis() for k, v in descr.items(): r.hset(k, ident, json.dumps(v)) merged = mergedict(list(descr.values())) r.hset("hosts", ident, merged) for addr in [x.get("mac") for x in merged["interfaces"]]: if addr is None: continue r.hset("macaddrs", addr, ident)