From 93924cffd256c91637a13b7e6577b4a90ed0d2d5 Mon Sep 17 00:00:00 2001 From: Erik Reid <erik.reid@geant.org> Date: Wed, 28 Nov 2018 12:06:06 +0100 Subject: [PATCH] added /data/interfaces/<hostname> route --- inventory_provider/routes/data.py | 33 +++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/inventory_provider/routes/data.py b/inventory_provider/routes/data.py index b515bf44..d882cc4b 100644 --- a/inventory_provider/routes/data.py +++ b/inventory_provider/routes/data.py @@ -50,3 +50,36 @@ def routers(): return Response( json.dumps(list([k.decode("utf-8") for k in r.keys("*")])), mimetype="application/json") + + +@routes.route("/interfaces/<hostname>", methods=['GET', 'POST']) +@require_accepts_json +def router_interfaces(hostname): + redis_config = current_app.config["INVENTORY_PROVIDER_CONFIG"]["redis"] + r = redis.StrictRedis( + host=redis_config["hostname"], + port=redis_config["port"]) + ifc_data_string = r.hget(hostname, 'interfaces') + if not ifc_data_string: + return Response( + response="no available info for '%s'" % hostname, + status=404, + mimetype="text/html") + + def _interfaces(s): + for ifc in json.loads(s): + if 'v4InterfaceName' in ifc: + yield ifc['v4InterfaceName'] + if 'v6InterfaceName' in ifc: + yield ifc['v6InterfaceName'] + + interfaces = list(_interfaces(ifc_data_string.decode('utf-8'))) + if not interfaces: + return Response( + response="no interfaces found for '%s'" % hostname, + status=404, + mimetype="text/html") + + return Response( + json.dumps(interfaces), + mimetype="application/json") -- GitLab