diff --git a/resource_management/routes/interfaces.py b/resource_management/routes/interfaces.py index 51a26a912e6c431395a8ceea0afd9463bffe95f1..dd0b4425330cf81b2f3fbc76252c9014a13846bc 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 ed0158d337778a411dcae2570f76c3919f82e9a3..d1f0d36b825255eb0d90cb744e63615ac8a0aac8 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')