Skip to content
Snippets Groups Projects
Commit 34166751 authored by Karel van Klink's avatar Karel van Klink :smiley_cat: Committed by Neda Moeini
Browse files

Split off workflow steps for adding all PE routers to a P router

parent c5bb90cd
No related branches found
No related tags found
1 merge request!139Feature/add validation workflows
......@@ -238,15 +238,11 @@ def get_active_pe_router_dict() -> dict[str, Any]:
all_routers = [Router.from_subscription(r["subscription_id"]) for r in get_active_router_subscriptions()]
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),
}
for router in all_routers
if router.router.router_role == RouterRole.PE
}
},
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 == RouterRole.PE
}
......@@ -13,7 +13,7 @@ from pydantic_forms.types import FormGenerator
from pydantic_forms.validators import Label
from gso.products.product_types.iptrunk import Iptrunk
from gso.services.lso_client import execute_playbook
from gso.services import lso_client, subscriptions
from gso.settings import load_oss_params
......@@ -34,7 +34,7 @@ def _deploy_base_config(
"commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - Deploy base config",
}
execute_playbook(
lso_client.execute_playbook(
playbook_name="base_config.yaml",
callback_route=callback_route,
inventory=inventory,
......@@ -83,7 +83,7 @@ def set_isis_to_max(subscription: Iptrunk, process_id: UUIDstr, callback_route:
f"{subscription.iptrunk.geant_s_sid}",
}
execute_playbook(
lso_client.execute_playbook(
playbook_name="iptrunks.yaml",
callback_route=callback_route,
inventory=f"{subscription.iptrunk.iptrunk_sides[0].iptrunk_side_node.router_fqdn}\n"
......@@ -100,7 +100,7 @@ def set_isis_to_max(subscription: Iptrunk, process_id: UUIDstr, callback_route:
@step("Run show commands after base config install")
def run_checks_after_base_config(subscription: dict[str, Any], callback_route: str) -> None:
"""Workflow step for running show commands after installing base config."""
execute_playbook(
lso_client.execute_playbook(
playbook_name="base_config_checks.yaml",
callback_route=callback_route,
inventory=subscription["router"]["router_fqdn"],
......@@ -121,3 +121,43 @@ def prompt_sharepoint_checklist_url(checklist_url: str) -> FormGenerator:
yield SharepointPrompt
return {}
@step("[DRY RUN] Add all PE routers to P router iBGP table")
def add_all_pe_to_p_dry(subscription: dict[str, Any], callback_route: str, tt_number: str, process_id: UUIDstr) -> None:
"""Perform a dry run of adding the list of all PE routers to the new P router."""
extra_vars = {
"dry_run": True,
"subscription": subscription,
"pe_router_list": subscriptions.get_active_pe_router_dict(),
"commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - Update iBGP mesh",
"verb": "add_pe_to_p",
}
lso_client.execute_playbook(
playbook_name="update_ibgp_mesh.yaml",
callback_route=callback_route,
inventory=subscription["router"]["router_fqdn"],
extra_vars=extra_vars,
)
@step("[FOR REAL] Add all PE routers to P router iBGP table")
def add_all_pe_to_p_real(
subscription: dict[str, Any], callback_route: str, tt_number: str, process_id: UUIDstr
) -> None:
"""Add the list of all PE routers to the new P router."""
extra_vars = {
"dry_run": False,
"subscription": subscription,
"pe_router_list": subscriptions.get_active_pe_router_dict(),
"commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - Update iBGP mesh",
"verb": "add_pe_to_p",
}
lso_client.execute_playbook(
playbook_name="update_ibgp_mesh.yaml",
callback_route=callback_route,
inventory=subscription["router"]["router_fqdn"],
extra_vars=extra_vars,
)
......@@ -10,7 +10,7 @@ from orchestrator.forms.validators import Choice, Label
from orchestrator.targets import Target
from orchestrator.types import FormGenerator, State, SubscriptionLifecycle, UUIDstr
from orchestrator.utils.json import json_dumps
from orchestrator.workflow import StepList, conditional, done, init, step, workflow
from orchestrator.workflow import StepList, begin, conditional, done, step, workflow
from orchestrator.workflows.steps import resync, set_status, store_process_subscription
from orchestrator.workflows.utils import wrap_create_initial_input_form
from pydantic import AfterValidator, ConfigDict, field_validator
......
......@@ -17,6 +17,7 @@ from gso.services import librenms_client, lso_client, subscriptions
from gso.services.lso_client import lso_interaction
from gso.services.subscriptions import get_trunks_that_terminate_on_router
from gso.utils.helpers import SNMPVersion
from gso.utils.workflow_steps import add_all_pe_to_p_dry, add_all_pe_to_p_real
def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
......@@ -61,7 +62,7 @@ def add_p_to_mesh_dry(subscription: dict[str, Any], callback_route: str, tt_numb
lso_client.execute_playbook(
playbook_name="update_ibgp_mesh.yaml",
callback_route=callback_route,
inventory=subscriptions.get_active_pe_router_dict(),
inventory={"all": {"hosts": subscriptions.get_active_pe_router_dict()}},
extra_vars=extra_vars,
)
......@@ -79,63 +80,7 @@ def add_p_to_mesh_real(subscription: dict[str, Any], callback_route: str, tt_num
lso_client.execute_playbook(
playbook_name="update_ibgp_mesh.yaml",
callback_route=callback_route,
inventory=subscriptions.get_active_pe_router_dict(),
extra_vars=extra_vars,
)
@step("[DRY RUN] Add all PE routers to P router iBGP table")
def add_all_pe_to_p_dry(
subscription: dict[str, Any], pe_router_list: list[Router], callback_route: str, tt_number: str, process_id: UUIDstr
) -> None:
"""Perform a dry run of adding the list of all PE routers to the new P router."""
extra_vars = {
"dry_run": True,
"subscription": subscription,
"pe_router_list": {
router.router.router_fqdn: {
"lo4": str(router.router.router_lo_ipv4_address),
"lo6": str(router.router.router_lo_ipv6_address),
"vendor": router.router.vendor,
}
for router in pe_router_list
},
"commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - Update iBGP mesh",
"verb": "add_pe_to_p",
}
lso_client.execute_playbook(
playbook_name="update_ibgp_mesh.yaml",
callback_route=callback_route,
inventory=subscription["router"]["router_fqdn"],
extra_vars=extra_vars,
)
@step("[FOR REAL] Add all PE routers to P router iBGP table")
def add_all_pe_to_p_real(
subscription: dict[str, Any], pe_router_list: list[Router], callback_route: str, tt_number: str, process_id: UUIDstr
) -> None:
"""Add the list of all PE routers to the new P router."""
extra_vars = {
"dry_run": False,
"subscription": subscription,
"pe_router_list": {
router.router.router_fqdn: {
"lo4": str(router.router.router_lo_ipv4_address),
"lo6": str(router.router.router_lo_ipv6_address),
"vendor": router.router.vendor,
}
for router in pe_router_list
},
"commit_comment": f"GSO_PROCESS_ID: {process_id} - TT_NUMBER: {tt_number} - Update iBGP mesh",
"verb": "add_pe_to_p",
}
lso_client.execute_playbook(
playbook_name="update_ibgp_mesh.yaml",
callback_route=callback_route,
inventory=subscription["router"]["router_fqdn"],
inventory={"all": {"hosts": subscriptions.get_active_pe_router_dict()}},
extra_vars=extra_vars,
)
......
......@@ -16,6 +16,7 @@ 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.shared_enums import Vendor
from gso.utils.workflow_steps import add_all_pe_to_p_dry
@step("Prepare required keys in state")
......@@ -78,22 +79,6 @@ def verify_base_config(subscription: Router, callback_route: str) -> None:
)
@step("Validate iBGP mesh configuration")
def validate_ibgp_mesh_config(subscription: Router, callback_route: str) -> None:
"""Workflow step for running a playbook that check iBGP mesh configuration."""
execute_playbook(
playbook_name="ibgp_checks.yaml",
callback_route=callback_route,
inventory=subscription.router.router_fqdn,
extra_vars={
"wfo_trunk_json": subscription,
"verb": "deploy",
"dry_run": "true",
"is_verification_workflow": "true",
},
)
@workflow(
"Validate router configuration", target=Target.SYSTEM, initial_input_form=wrap_modify_initial_input_form(None)
)
......@@ -118,7 +103,7 @@ def validate_router() -> StepList:
>> check_netbox_entry_exists
>> check_librenms_entry_exists
>> anonymous_lso_interaction(verify_base_config)
>> anonymous_lso_interaction(validate_ibgp_mesh_config)
>> anonymous_lso_interaction(add_all_pe_to_p_dry)
>> resync
>> done
)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment