diff --git a/gso/workflows/iptrunk/validate_iptrunk.py b/gso/workflows/iptrunk/validate_iptrunk.py index e80b49c672dbc22e11fd86f7bdbb3436685f835b..1b2c1bc14e531c068d2cb1d4d6306f939fcdd8c0 100644 --- a/gso/workflows/iptrunk/validate_iptrunk.py +++ b/gso/workflows/iptrunk/validate_iptrunk.py @@ -15,10 +15,7 @@ from gso.services.lso_client import anonymous_lso_interaction, execute_playbook from gso.services.netbox_client import NetboxClient from gso.utils.helpers import get_router_vendor from gso.utils.shared_enums import Vendor -from gso.utils.workflow_steps import detect_configuration_drift -from gso.workflows.iptrunk.deploy_twamp import deploy_twamp_dry from gso.workflows.iptrunk.migrate_iptrunk import check_ip_trunk_isis -from gso.workflows.iptrunk.modify_trunk_interface import provision_ip_trunk_iface_dry @step("Validate IP trunk configuration") @@ -146,6 +143,34 @@ def verify_netbox_entries(subscription: Iptrunk) -> None: raise ProcessFailureError(message="NetBox misconfiguration(s) found", details=str(netbox_errors)) +@step("Verify configuration of IPtrunk") +def verify_iptrunk_config(subscription: Iptrunk, callback_route: str) -> None: + """Check for configuration drift on the relevant routers.""" + extra_vars = {"wfo_trunk_json": json.loads(json_dumps(subscription)), "verb": "check"} + + execute_playbook( + playbook_name="iptrunks.yaml", + callback_route=callback_route, + inventory=f"{subscription.iptrunk.iptrunk_sides[0].iptrunk_side_node.router_fqdn}\n" + f"{subscription.iptrunk.iptrunk_sides[1].iptrunk_side_node.router_fqdn}\n", + extra_vars=extra_vars, + ) + + +@step("Verify TWAMP configuration") +def verify_twamp_config(subscription: Iptrunk, callback_route: str) -> None: + """Check for configuration drift of TWAMP.""" + extra_vars = {"subscription": json.loads(json_dumps(subscription)), "verb": "check"} + + execute_playbook( + playbook_name="deploy_twamp.yaml", + callback_route=callback_route, + inventory=f"{subscription.iptrunk.iptrunk_sides[0].iptrunk_side_node.router_fqdn}\n" + f"{subscription.iptrunk.iptrunk_sides[1].iptrunk_side_node.router_fqdn}\n", + extra_vars=extra_vars, + ) + + @workflow( "Validate IP trunk configuration", target=Target.SYSTEM, @@ -166,9 +191,9 @@ def validate_iptrunk() -> StepList: >> unsync >> verify_ipam_records >> verify_netbox_entries - >> anonymous_lso_interaction(provision_ip_trunk_iface_dry, detect_configuration_drift) + >> anonymous_lso_interaction(verify_iptrunk_config) >> anonymous_lso_interaction(check_ip_trunk_isis) - >> anonymous_lso_interaction(deploy_twamp_dry, detect_configuration_drift) + >> anonymous_lso_interaction(verify_twamp_config) >> resync >> done ) diff --git a/gso/workflows/router/validate_router.py b/gso/workflows/router/validate_router.py index e66acb225e9959cbb229e2bc8a388b2d05802db0..5ed8189798ad1f838ec053be0aeb2e2aef175fed 100644 --- a/gso/workflows/router/validate_router.py +++ b/gso/workflows/router/validate_router.py @@ -11,11 +11,9 @@ from gso.products.product_types.router import Router from gso.schedules import TT_NUMBER_ZERO from gso.services import infoblox from gso.services.librenms_client import LibreNMSClient -from gso.services.lso_client import anonymous_lso_interaction +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 deploy_base_config_dry, detect_configuration_drift -from gso.workflows.router.update_ibgp_mesh import add_p_to_mesh_dry @step("Prepare required keys in state") @@ -63,6 +61,28 @@ def verify_librenms_entry(subscription: Router) -> None: client.get_device(subscription.router.router_fqdn) +@step("Check base config for drift") +def verify_base_config(subscription: Router, callback_route: str) -> None: + """Workflow step for running a playbook that checks whether base config has drifted.""" + execute_playbook( + playbook_name="base_config.yaml", + callback_route=callback_route, + inventory=subscription.router.router_fqdn, + extra_vars={"wfo_router_json": subscription, "verb": "check-drift"}, + ) + + +@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_router_json": subscription}, + ) + + @workflow( "Validate router configuration", target=Target.SYSTEM, initial_input_form=wrap_modify_initial_input_form(None) ) @@ -86,8 +106,8 @@ def validate_router() -> StepList: >> verify_ipam_loopback >> verify_netbox_entry >> verify_librenms_entry - >> anonymous_lso_interaction(deploy_base_config_dry, detect_configuration_drift) - >> anonymous_lso_interaction(add_p_to_mesh_dry, detect_configuration_drift) + >> anonymous_lso_interaction(verify_base_config) + >> anonymous_lso_interaction(validate_ibgp_mesh_config) >> resync >> done )