From 8a0a79bcdab5bcdb02a7baed7d6668367726cedd Mon Sep 17 00:00:00 2001
From: Erik Reid <erik.reid@geant.org>
Date: Thu, 23 Mar 2023 15:36:46 +0100
Subject: [PATCH] added list of routers api

---
 resource_management/routes/interfaces.py | 17 +++++++++++++++++
 test/test_interfaces_routes.py           | 16 ++++++++++++++++
 2 files changed, 33 insertions(+)

diff --git a/resource_management/routes/interfaces.py b/resource_management/routes/interfaces.py
index 51a26a9..dd0b442 100644
--- a/resource_management/routes/interfaces.py
+++ b/resource_management/routes/interfaces.py
@@ -1,3 +1,5 @@
+from typing import List
+
 from fastapi import APIRouter, HTTPException
 import pydantic
 
@@ -35,6 +37,14 @@ class NextPhysicalInterface(pydantic.BaseModel):
     name: str
 
 
+class RouterDetails(pydantic.BaseModel):
+    fqdn: str
+
+
+class ListOfRouters(pydantic.BaseModel):
+    routers: List[RouterDetails]
+
+
 @router.post('/initialize-router/{fqdn}')
 async def load_new_router_interfaces(fqdn: str) -> InterfacesSummary:
 
@@ -74,6 +84,13 @@ async def reconcile_current_router_interfaces(fqdn: str):
         detail='not implemented')
 
 
+@router.get('/routers')
+async def get_known_routers() -> ListOfRouters:
+    with db.session_scope() as session:
+        rows = session.query(model.Router.fqdn).all()
+        return {'routers': [{'fqdn': r[0]} for r in rows]}
+
+
 @router.post('/next-lag/{fqdn}')
 async def reserve_next_lag(fqdn: str) -> NextLAG:
     """
diff --git a/test/test_interfaces_routes.py b/test/test_interfaces_routes.py
index ed0158d..d1f0d36 100644
--- a/test/test_interfaces_routes.py
+++ b/test/test_interfaces_routes.py
@@ -76,3 +76,19 @@ def test_next_physical(client, resources_db, mocked_router, router_name):
             join(model.LAG). \
             filter_by(name=lag_name).one()
         assert ifc_row.availability == model.AvalabilityStates.RESERVED.name
+
+
+def test_next_physical(client, resources_db):
+
+    with db.session_scope() as session:
+        for idx in range(10):
+            row = db.model.Router(fqdn=f'router-{idx}.xyz.com')
+            session.add(row)
+
+    rv = client.get(f'/api/interfaces/routers')
+    assert rv.status_code == 200
+
+    response = rv.json()
+    jsonschema.validate(response, interfaces.ListOfRouters.schema())
+    for r in response['routers']:
+        assert r['fqdn'].endswith('.xyz.com')
-- 
GitLab