Skip to content
Snippets Groups Projects
Verified Commit 10d40fbd authored by Karel van Klink's avatar Karel van Klink :smiley_cat:
Browse files

Also include provisioning routers for iBGP mesh in trunk validation workflow

parent 250467a8
No related branches found
No related tags found
No related merge requests found
......@@ -4,6 +4,7 @@ import re
from typing import TYPE_CHECKING
from uuid import UUID
from orchestrator.types import SubscriptionLifecycle
from pydantic_forms.types import UUIDstr
from pydantic_forms.validators import Choice
......@@ -119,10 +120,12 @@ def generate_fqdn(hostname: str, site_name: str, country_code: str) -> str:
return f"{hostname}.{site_name.lower()}.{country_code.lower()}{oss.IPAM.LO.domain_name}"
def generate_inventory_for_active_routers(
def generate_inventory_for_routers(
router_role: RouterRole,
exclude_routers: list[str] | None = None,
router_vendor: Vendor | None = None,
*,
include_provisioning_routers: bool = False,
) -> dict:
"""Generate an Ansible-compatible inventory for executing playbooks.
......@@ -131,11 +134,18 @@ def generate_inventory_for_active_routers(
:param RouterRole router_role: The role of the routers to include in the inventory.
:param list exclude_routers: List of routers to exclude from the inventory.
:param Vendor router_vendor: The vendor of the routers to include in the inventory.
:param bool include_provisioning_routers: Include routers that are in a ``PROVISIONING`` state.
:return: A dictionary representing the inventory of active routers.
:rtype: dict[str, Any]
"""
lifecycles = (
[SubscriptionLifecycle.PROVISIONING, SubscriptionLifecycle.ACTIVE]
if include_provisioning_routers
else [SubscriptionLifecycle.ACTIVE]
)
all_routers = [
Router.from_subscription(r["subscription_id"]) for r in subscriptions.get_active_router_subscriptions()
Router.from_subscription(r["subscription_id"])
for r in subscriptions.get_router_subscriptions(lifecycles=lifecycles)
]
exclude_routers = exclude_routers or []
......
......@@ -19,7 +19,7 @@ from gso.products.product_types.iptrunk import Iptrunk
from gso.services.kentik_client import KentikClient, NewKentikDevice
from gso.services.lso_client import LSOState, indifferent_lso_interaction
from gso.settings import load_oss_params
from gso.utils.helpers import generate_inventory_for_active_routers
from gso.utils.helpers import generate_inventory_for_routers
from gso.utils.shared_enums import Vendor
......@@ -51,7 +51,7 @@ def _update_sdp_mesh(
*,
dry_run: bool,
) -> LSOState:
inventory = generate_inventory_for_active_routers(
inventory = generate_inventory_for_routers(
router_role=RouterRole.PE, router_vendor=Vendor.NOKIA, exclude_routers=[subscription["router"]["router_fqdn"]]
)
......@@ -89,7 +89,7 @@ def _update_sdp_single_pe(
"commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - "
f"Update the SDP mesh for L2circuits(epipes) config on PE NOKIA routers",
"verb": "update_sdp_mesh",
"pe_router_list": generate_inventory_for_active_routers(
"pe_router_list": generate_inventory_for_routers(
router_role=RouterRole.PE,
exclude_routers=[subscription["router"]["router_fqdn"]],
)["all"]["hosts"],
......@@ -122,7 +122,7 @@ def _add_pe_mesh_to_pe(
"commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - "
f"Add list of PE routers into iGEANT/iGEANT6 groups of the PE router",
"verb": "add_pe_mesh_to_pe",
"pe_router_list": generate_inventory_for_active_routers(
"pe_router_list": generate_inventory_for_routers(
router_role=RouterRole.PE, exclude_routers=[subscription["router"]["router_fqdn"]]
)["all"]["hosts"],
}
......@@ -148,7 +148,7 @@ def _add_pe_to_pe_mesh(
*,
dry_run: bool,
) -> LSOState:
inventory = generate_inventory_for_active_routers(
inventory = generate_inventory_for_routers(
router_role=RouterRole.PE, exclude_routers=[subscription["router"]["router_fqdn"]]
)
extra_vars = {
......@@ -178,7 +178,7 @@ def _add_all_p_to_pe(
"subscription": subscription,
"commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - Add all P-routers to this new PE",
"verb": "add_all_p_to_pe",
"p_router_list": generate_inventory_for_active_routers(
"p_router_list": generate_inventory_for_routers(
router_role=RouterRole.P, exclude_routers=[subscription["router"]["router_fqdn"]]
)["all"]["hosts"],
}
......@@ -204,7 +204,7 @@ def _add_pe_to_all_p(
*,
dry_run: bool,
) -> LSOState:
inventory = generate_inventory_for_active_routers(
inventory = generate_inventory_for_routers(
router_role=RouterRole.P, exclude_routers=[subscription["router"]["router_fqdn"]]
)
extra_vars = {
......
......@@ -18,7 +18,7 @@ from gso.products.product_blocks.router import RouterRole
from gso.products.product_types.router import Router
from gso.services.lso_client import LSOState, lso_interaction
from gso.services.subscriptions import get_all_active_sites
from gso.utils.helpers import generate_inventory_for_active_routers
from gso.utils.helpers import generate_inventory_for_routers
from gso.utils.shared_enums import Vendor
from gso.utils.types.tt_number import TTNumber
from gso.utils.workflow_steps import (
......@@ -85,7 +85,7 @@ def deploy_pe_base_config_dry(subscription: dict[str, Any], tt_number: str, proc
"subscription": subscription,
"commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - deploy PE base config",
"verb": "deploy_pe_base_config",
"pe_router_list": generate_inventory_for_active_routers(RouterRole.PE)["all"]["hosts"],
"pe_router_list": generate_inventory_for_routers(RouterRole.PE)["all"]["hosts"],
"geant_sites": json.loads(json_dumps(get_all_active_sites())),
}
......@@ -104,7 +104,7 @@ def deploy_pe_base_config_real(subscription: dict[str, Any], tt_number: str, pro
"subscription": subscription,
"commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - deploy PE base config",
"verb": "deploy_pe_base_config",
"pe_router_list": generate_inventory_for_active_routers(RouterRole.PE)["all"]["hosts"],
"pe_router_list": generate_inventory_for_routers(RouterRole.PE)["all"]["hosts"],
"geant_sites": json.loads(json_dumps(get_all_active_sites())),
}
......@@ -142,7 +142,7 @@ def remove_p_from_pe_dry(subscription: dict[str, Any], tt_number: str, process_i
return {
"playbook_name": "gap_ansible/playbooks/update_ibgp_mesh.yaml",
"inventory": generate_inventory_for_active_routers(RouterRole.PE),
"inventory": generate_inventory_for_routers(RouterRole.PE),
"extra_vars": extra_vars,
}
......@@ -160,7 +160,7 @@ def remove_p_from_pe_real(subscription: dict[str, Any], tt_number: str, process_
return {
"playbook_name": "gap_ansible/playbooks/update_ibgp_mesh.yaml",
"inventory": generate_inventory_for_active_routers(RouterRole.PE),
"inventory": generate_inventory_for_routers(RouterRole.PE),
"extra_vars": extra_vars,
}
......
......@@ -28,7 +28,7 @@ from gso.services.librenms_client import LibreNMSClient
from gso.services.lso_client import LSOState, lso_interaction
from gso.services.netbox_client import NetboxClient
from gso.settings import load_oss_params
from gso.utils.helpers import generate_inventory_for_active_routers
from gso.utils.helpers import generate_inventory_for_routers
from gso.utils.shared_enums import Vendor
from gso.utils.types.tt_number import TTNumber
......@@ -124,7 +124,7 @@ def remove_p_from_all_pe_dry(subscription: Router, tt_number: str, process_id: U
return {
"playbook_name": "gap_ansible/playbooks/update_ibgp_mesh.yaml",
"inventory": generate_inventory_for_active_routers(RouterRole.PE),
"inventory": generate_inventory_for_routers(RouterRole.PE),
"extra_vars": extra_vars,
}
......@@ -142,7 +142,7 @@ def remove_p_from_all_pe_real(subscription: Router, tt_number: str, process_id:
return {
"playbook_name": "gap_ansible/playbooks/update_ibgp_mesh.yaml",
"inventory": generate_inventory_for_active_routers(RouterRole.PE),
"inventory": generate_inventory_for_routers(RouterRole.PE),
"extra_vars": extra_vars,
}
......@@ -160,9 +160,7 @@ def remove_pe_from_all_pe_dry(subscription: Router, tt_number: str, process_id:
return {
"playbook_name": "gap_ansible/playbooks/update_ibgp_mesh.yaml",
"inventory": generate_inventory_for_active_routers(
RouterRole.PE, exclude_routers=[subscription.router.router_fqdn]
),
"inventory": generate_inventory_for_routers(RouterRole.PE, exclude_routers=[subscription.router.router_fqdn]),
"extra_vars": extra_vars,
}
......@@ -180,9 +178,7 @@ def remove_pe_from_all_pe_real(subscription: Router, tt_number: str, process_id:
return {
"playbook_name": "gap_ansible/playbooks/update_ibgp_mesh.yaml",
"inventory": generate_inventory_for_active_routers(
RouterRole.PE, exclude_routers=[subscription.router.router_fqdn]
),
"inventory": generate_inventory_for_routers(RouterRole.PE, exclude_routers=[subscription.router.router_fqdn]),
"extra_vars": extra_vars,
}
......@@ -200,7 +196,7 @@ def remove_pe_from_all_p_dry(subscription: Router, tt_number: str, process_id: U
return {
"playbook_name": "gap_ansible/playbooks/update_ibgp_mesh.yaml",
"inventory": generate_inventory_for_active_routers(RouterRole.P),
"inventory": generate_inventory_for_routers(RouterRole.P),
"extra_vars": extra_vars,
}
......@@ -218,7 +214,7 @@ def remove_pe_from_all_p_real(subscription: Router, tt_number: str, process_id:
return {
"playbook_name": "gap_ansible/playbooks/update_ibgp_mesh.yaml",
"inventory": generate_inventory_for_active_routers(RouterRole.P),
"inventory": generate_inventory_for_routers(RouterRole.P),
"extra_vars": extra_vars,
}
......
......@@ -17,7 +17,7 @@ from gso.products.product_types.router import Router
from gso.services import librenms_client
from gso.services.lso_client import LSOState, lso_interaction
from gso.services.subscriptions import get_trunks_that_terminate_on_router
from gso.utils.helpers import generate_inventory_for_active_routers
from gso.utils.helpers import generate_inventory_for_routers
from gso.utils.shared_enums import SNMPVersion
from gso.utils.types.tt_number import TTNumber
from gso.utils.workflow_steps import (
......@@ -79,7 +79,7 @@ def add_p_to_mesh_dry(subscription: dict[str, Any], tt_number: str, process_id:
return {
"playbook_name": "gap_ansible/playbooks/update_ibgp_mesh.yaml",
"inventory": generate_inventory_for_active_routers(RouterRole.PE),
"inventory": generate_inventory_for_routers(RouterRole.PE),
"extra_vars": extra_vars,
}
......@@ -96,7 +96,7 @@ def add_p_to_mesh_real(subscription: dict[str, Any], tt_number: str, process_id:
return {
"playbook_name": "gap_ansible/playbooks/update_ibgp_mesh.yaml",
"inventory": generate_inventory_for_active_routers(RouterRole.PE),
"inventory": generate_inventory_for_routers(RouterRole.PE),
"extra_vars": extra_vars,
}
......@@ -107,7 +107,7 @@ def add_all_pe_to_p_dry(subscription: dict[str, Any]) -> LSOState:
extra_vars = {
"dry_run": True,
"subscription": subscription,
"pe_router_list": generate_inventory_for_active_routers(RouterRole.PE),
"pe_router_list": generate_inventory_for_routers(RouterRole.PE),
"verb": "add_pe_to_p",
}
......@@ -124,7 +124,7 @@ def add_all_pe_to_p_real(subscription: dict[str, Any], tt_number: str, process_i
extra_vars = {
"dry_run": False,
"subscription": subscription,
"pe_router_list": generate_inventory_for_active_routers(RouterRole.PE),
"pe_router_list": generate_inventory_for_routers(RouterRole.PE),
"commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - Update iBGP mesh",
"verb": "add_pe_to_p",
}
......
......@@ -16,7 +16,7 @@ from gso.services.kentik_client import KentikClient
from gso.services.librenms_client import LibreNMSClient
from gso.services.lso_client import LSOState, anonymous_lso_interaction
from gso.services.netbox_client import NetboxClient
from gso.utils.helpers import generate_inventory_for_active_routers
from gso.utils.helpers import generate_inventory_for_routers
from gso.utils.shared_enums import Vendor
......@@ -58,7 +58,9 @@ def verify_p_ibgp(subscription: dict[str, Any]) -> LSOState:
extra_vars = {
"dry_run": True,
"subscription": subscription,
"pe_router_list": generate_inventory_for_active_routers(RouterRole.PE)["all"]["hosts"],
"pe_router_list": generate_inventory_for_routers(RouterRole.PE, include_provisioning_routers=True)["all"][
"hosts"
],
"verb": "verify_p_ibgp",
"is_verification_workflow": "true",
}
......
......@@ -8,7 +8,7 @@ from gso.products.product_blocks.router import RouterRole
from gso.products.product_types.router import Router
from gso.utils.helpers import (
available_interfaces_choices_including_current_members,
generate_inventory_for_active_routers,
generate_inventory_for_routers,
)
from gso.utils.shared_enums import Vendor
from gso.utils.types.tt_number import validate_tt_number
......@@ -113,7 +113,7 @@ def test_generate_inventory_for_active_routers_with_single_active_router(router_
}
}
}
assert generate_inventory_for_active_routers(RouterRole.P) == expected_result
assert generate_inventory_for_routers(RouterRole.P) == expected_result
def test_generate_inventory_for_active_routers_with_multiple_routers(router_subscription_factory):
......@@ -125,9 +125,9 @@ def test_generate_inventory_for_active_routers_with_multiple_routers(router_subs
router_subscription_factory(status=SubscriptionLifecycle.TERMINATED)
router_subscription_factory(status=SubscriptionLifecycle.INITIAL)
# Test the generation of inventory for multiple active P routers.
inventory = generate_inventory_for_active_routers(RouterRole.P)
inventory = generate_inventory_for_routers(RouterRole.P)
assert len(inventory["all"]["hosts"]) == 5
inventory = generate_inventory_for_active_routers(RouterRole.PE)
inventory = generate_inventory_for_routers(RouterRole.PE)
assert len(inventory["all"]["hosts"]) == 3
......@@ -137,5 +137,5 @@ def test_generate_inventory_for_active_routers_with_excluded_router(router_subsc
router_subscription_factory(router_role=RouterRole.P)
router = 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)
inventory = generate_inventory_for_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.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment