diff --git a/inventory_provider/router_interfaces.py b/inventory_provider/router_interfaces.py index c8d88ee38eee0b7962c28d5206a074a6c3943c7b..95a09be5492c59710b33c6377bf50a951dd26839 100644 --- a/inventory_provider/router_interfaces.py +++ b/inventory_provider/router_interfaces.py @@ -25,7 +25,7 @@ def ssh_exec_commands_q(hostname, ssh_params, commands, q): threading_logger.debug("[<<EXIT] exec_router_commands_q: %r" % hostname) -def get_router_details(router, params, q): +def get_router_details(router, params): threading_logger = logging.getLogger(constants.THREADING_LOGGER_NAME) @@ -53,21 +53,26 @@ def get_router_details(router, params, q): command_output = commands_proc_queue.get() assert len(command_output) == len(commands) - result = {} + r = redis.StrictRedis( + host=params["redis"]["hostname"], + port=params["redis"]["port"]) for c, o in zip(commands, command_output): if c["key"]: - result[c["key"]] = c["parser"](o) - + r.hset( + name=router["hostname"], + key=c["key"], + value=json.dumps(c["parser"](o))) commands_proc.join() threading_logger.debug("... got commands result & joined: %r" % router) threading_logger.debug("waiting for snmp ifc results: %r" % router) - result["snmp-interfaces"] = snmpifc_proc_queue.get() + r.hset( + name=router["hostname"], + key="snmp-interfaces", + value=json.dumps(snmpifc_proc_queue.get())) snmpifc_proc.join() threading_logger.debug("... got snmp ifc result & joined: %r" % router) - q.put(result) - threading_logger.debug("[<<EXIT]get_router_details: %r" % router) @@ -77,21 +82,14 @@ def load_network_details(params): processes = [] for r in params["routers"]: - q = Queue() - p = Process(target=get_router_details, args=(r, params, q)) + p = Process(target=get_router_details, args=(r, params)) p.start() - processes.append({"router": r, "process": p, "queue": q}) - - - r = redis.StrictRedis( - host=params["redis"]["hostname"], - port=params["redis"]["port"]) + processes.append({"router": r, "process": p}) result = {} for p in processes: threading_logger.debug( "waiting for get_router_details result: %r" % p["router"]) - r.set(p["router"]["hostname"], json.dumps(p["queue"].get())) p["process"].join() threading_logger.debug( "got result and joined get_router_details proc: %r" % p["router"]) @@ -117,7 +115,15 @@ def cli(params): r = redis.StrictRedis( host=params["redis"]["hostname"], port=params["redis"]["port"]) - result = dict([(k.decode("utf-8"), json.loads(r.get(k))) for k in r.keys()]) + + result = {} + for hostname in r.keys(): + host = {} + for key in r.hkeys(name=hostname): + host[key.decode("utf-8")] = json.loads( + r.hget(hostname, key).decode("utf-8") + ) + result[hostname.decode("utf-8")] = host filename = "/tmp/router-info.json" logging.debug("writing output to: " + filename)