diff --git a/gso/services/subscriptions.py b/gso/services/subscriptions.py index 143cd671b1e882e26b3b9c0336d2c7491a268d61..97474c7ada572fbb25e18481db0b57e5ebefd872 100644 --- a/gso/services/subscriptions.py +++ b/gso/services/subscriptions.py @@ -20,8 +20,6 @@ from orchestrator.types import SubscriptionLifecycle from pydantic_forms.types import UUIDstr from gso.products import ProductName, ProductType -from gso.products.product_blocks.router import RouterRole -from gso.products.product_types.router import Router from gso.products.product_types.site import Site SubscriptionType = dict[str, Any] @@ -231,4 +229,3 @@ def get_site_by_name(site_name: str) -> Site: raise ValueError(msg) return Site.from_subscription(subscription[0].subscription_id) - diff --git a/gso/utils/helpers.py b/gso/utils/helpers.py index c72aae7730f90d1d93e469c0877b8a5a0f3eaa5f..bbdbdd93a73bfdc51021c928057605f689308b20 100644 --- a/gso/utils/helpers.py +++ b/gso/utils/helpers.py @@ -55,9 +55,9 @@ def available_interfaces_choices(router_id: UUID, speed: str) -> Choice | None: def available_interfaces_choices_including_current_members( - router_id: UUID, - speed: str, - interfaces: list[IptrunkInterfaceBlock], + router_id: UUID, + speed: str, + interfaces: list[IptrunkInterfaceBlock], ) -> Choice | None: """Return a list of available interfaces for a given router and speed including the current members. @@ -304,8 +304,8 @@ def generate_fqdn(hostname: str, site_name: str, country_code: str) -> str: def generate_inventory_for_active_routers( - router_role: RouterRole, - exclude_routers: list[str] | None = None, + router_role: RouterRole, + exclude_routers: list[str] | None = None, ) -> dict: """Generate an Ansible-compatible inventory for executing playbooks. @@ -327,15 +327,13 @@ def generate_inventory_for_active_routers( return { "all": { "hosts": { - router.router.router_fqdn: - { - "lo4": str(router.router.router_lo_ipv4_address), - "lo6": str(router.router.router_lo_ipv6_address), - "vendor": str(router.router.vendor), - } + router.router.router_fqdn: { + "lo4": str(router.router.router_lo_ipv4_address), + "lo6": str(router.router.router_lo_ipv6_address), + "vendor": str(router.router.vendor), + } for router in all_routers - if router.router.router_role == router_role - and router.router.router_fqdn not in exclude_routers + if router.router.router_role == router_role and router.router.router_fqdn not in exclude_routers } } } diff --git a/gso/workflows/router/terminate_router.py b/gso/workflows/router/terminate_router.py index c656299fb1abfa288de74abc7d5936d3c7c6fa3f..395f8c7a103d3dea63db0094c6ad8655dee43431 100644 --- a/gso/workflows/router/terminate_router.py +++ b/gso/workflows/router/terminate_router.py @@ -113,9 +113,7 @@ def remove_device_from_netbox(subscription: Router) -> dict[str, Router]: @step("[DRY RUN] Remove P router from all the PE routers") -def remove_p_from_all_pe_dry( - subscription: Router, callback_route: str, tt_number: str, process_id: UUIDstr -) -> None: +def remove_p_from_all_pe_dry(subscription: Router, callback_route: str, tt_number: str, process_id: UUIDstr) -> None: """Perform a dry run of removing the terminated router from all the PE routers.""" extra_vars = { "dry_run": True, @@ -134,9 +132,7 @@ def remove_p_from_all_pe_dry( @step("[REAL RUN] Remove P router from all the PE routers") -def remove_p_from_all_pe_real( - subscription: Router, callback_route: str, tt_number: str, process_id: UUIDstr -) -> None: +def remove_p_from_all_pe_real(subscription: Router, callback_route: str, tt_number: str, process_id: UUIDstr) -> None: """Perform a real run of removing the terminated router from all the PE routers.""" extra_vars = { "dry_run": False, @@ -155,9 +151,7 @@ def remove_p_from_all_pe_real( @step("[DRY RUN] Remove PE router from all the PE routers") -def remove_pe_from_all_pe_dry( - subscription: Router, callback_route: str, tt_number: str, process_id: UUIDstr -) -> None: +def remove_pe_from_all_pe_dry(subscription: Router, callback_route: str, tt_number: str, process_id: UUIDstr) -> None: """Perform a dry run of removing the terminated router from all the PE routers.""" extra_vars = { "dry_run": True, @@ -171,15 +165,14 @@ def remove_pe_from_all_pe_dry( playbook_name="update_ibgp_mesh.yaml", callback_route=callback_route, inventory=generate_inventory_for_active_routers( - RouterRole.PE, exclude_routers=[subscription.router.router_fqdn]), + RouterRole.PE, exclude_routers=[subscription.router.router_fqdn] + ), extra_vars=extra_vars, ) @step("[REAL RUN] Remove all PE routers from all the PE routers") -def remove_pe_from_all_pe_real( - subscription: Router, callback_route: str, tt_number: str, process_id: UUIDstr -) -> None: +def remove_pe_from_all_pe_real(subscription: Router, callback_route: str, tt_number: str, process_id: UUIDstr) -> None: """Perform a real run of removing PE router from P router iBGP table.""" extra_vars = { "dry_run": False, @@ -193,15 +186,14 @@ def remove_pe_from_all_pe_real( playbook_name="update_ibgp_mesh.yaml", callback_route=callback_route, inventory=generate_inventory_for_active_routers( - RouterRole.PE, exclude_routers=[subscription.router.router_fqdn]), + RouterRole.PE, exclude_routers=[subscription.router.router_fqdn] + ), extra_vars=extra_vars, ) @step("[DRY RUN] Remove PE router from all the P routers") -def remove_pe_from_all_p_dry( - subscription: Router, callback_route: str, tt_number: str, process_id: UUIDstr -) -> None: +def remove_pe_from_all_p_dry(subscription: Router, callback_route: str, tt_number: str, process_id: UUIDstr) -> None: """Perform a dry run of removing PE router from all P routers.""" extra_vars = { "dry_run": True, @@ -220,9 +212,7 @@ def remove_pe_from_all_p_dry( @step("[REAL RUN] Remove PE router from all P routers") -def remove_pe_from_all_p_real( - subscription: Router, callback_route: str, tt_number: str, process_id: UUIDstr -) -> None: +def remove_pe_from_all_p_real(subscription: Router, callback_route: str, tt_number: str, process_id: UUIDstr) -> None: """Perform a dry run of removing PE router from all P routers.""" extra_vars = { "dry_run": False, diff --git a/gso/workflows/router/validate_router.py b/gso/workflows/router/validate_router.py index f5f078db007654e4a7a2b0a22984252fb85ba61b..87d4870061ebf51e0c64900b135213f22602667b 100644 --- a/gso/workflows/router/validate_router.py +++ b/gso/workflows/router/validate_router.py @@ -11,11 +11,13 @@ from orchestrator.workflows.steps import resync, store_process_subscription, uns from orchestrator.workflows.utils import wrap_modify_initial_input_form from pydantic_forms.types import State, UUIDstr +from gso.products.product_blocks.router import RouterRole from gso.products.product_types.router import Router -from gso.services import infoblox, lso_client, subscriptions +from gso.services import infoblox, lso_client from gso.services.librenms_client import LibreNMSClient from gso.services.lso_client import anonymous_lso_interaction, execute_playbook from gso.services.netbox_client import NetboxClient +from gso.utils.helpers import generate_inventory_for_active_routers from gso.utils.shared_enums import Vendor @@ -57,7 +59,7 @@ def verify_p_ibgp(subscription: dict[str, Any], callback_route: str) -> None: extra_vars = { "dry_run": True, "subscription": subscription, - "pe_router_list": subscriptions.get_active_pe_router_dict(), + "pe_router_list": generate_inventory_for_active_routers(RouterRole.PE)["all"]["hosts"], "verb": "verify_p_ibgp", "is_verification_workflow": "true", } diff --git a/test/utils/test_helpers.py b/test/utils/test_helpers.py index 66f1c4d62e7eb7e3782ca812686d5e046790d5bb..dc7854eaa3287b4b98132a8243bf2068636a684a 100644 --- a/test/utils/test_helpers.py +++ b/test/utils/test_helpers.py @@ -138,4 +138,4 @@ def test_generate_inventory_for_active_routers_with_excluded_router(nokia_router router = nokia_router_subscription_factory(router_role=RouterRole.P) excluded_routers = [Router.from_subscription(router).router.router_fqdn] inventory = generate_inventory_for_active_routers(RouterRole.P, exclude_routers=excluded_routers) - assert len(inventory["all"]["hosts"]) == 5 # 6 P routers, the last one is excluded, so 5 P routers are left. + assert len(inventory["all"]["hosts"]) == 5 # 6 P routers, the last one is excluded, so 5 P routers are left.