Example #1
0
def merge_host(db, ident):
    saved = []
    for source in ("snmp", "login", "annotations"):
        collection = getattr(db, source)
        d = collection.find_one({"ident": ident})
        if d is not None:
            del d["_id"]
            saved.append(d)
    merged = mergedict(saved)
    old = db.hosts.find_one({"ident": ident}, {"_id": True})
    if old is not None:
        merged["_id"] = old["_id"]
    merged["timestamp"] = time.time()

    ## xxx should this be here? make sure interfaces are sorted
    ifaces = merged.get("interfaces")
    if ifaces is not None:
        ifaces.sort(lambda x,y: cmp(x.get("ifindex", 0), y.get("ifindex", 0)))
        merged["interfaces"] = ifaces
    db.hosts.save(merged)
    return merged
Example #2
0
    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)
Example #3
0
                if addrinfo is None:
                    addrinfo = {"address": str(v4if.ip)}
                hosts = addrinfo.setdefault("hosts", [])
                hosts.append(DBRef("hosts", merged["_id"]))
                addrinfo["hosts"] = list(set(hosts))
                db.v4addr.save(addrinfo)
            macaddr = iface.get("mac")
            if macaddr is not None:
                addrinfo = db.macaddr.find_one({"address": macaddr})
                if addrinfo is None:
                    addrinfo = {"address": macaddr}
                addrinfo["host"] = DBRef("hosts", merged["_id"])
                db.macaddr.save(addrinfo)
    else:
        ### used for discovery
        merged = mergedict(descriptions.values())

    return merged

def interrogate_parser(p):
    p.add_argument("hostname", nargs=1)
    p.add_argument("-s", dest="snmp", action="store_false", default=True,
                   help="Do not use SNMP")
    p.add_argument("-l", dest="login", action="store_false", default=True,
                   help="Do not use remote login (SSH)")
    p.add_argument("-m", dest="merge", action="store_false", default=True,
                   help="Do not merge descriptions")
    p.set_defaults(func=interrogate)

def host(args):
    db = get_db(args)