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