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

Update playbook validation steps

parent 477896a1
No related branches found
No related tags found
1 merge request!139Feature/add validation workflows
...@@ -15,10 +15,7 @@ from gso.services.lso_client import anonymous_lso_interaction, execute_playbook ...@@ -15,10 +15,7 @@ from gso.services.lso_client import anonymous_lso_interaction, execute_playbook
from gso.services.netbox_client import NetboxClient from gso.services.netbox_client import NetboxClient
from gso.utils.helpers import get_router_vendor from gso.utils.helpers import get_router_vendor
from gso.utils.shared_enums import 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.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") @step("Validate IP trunk configuration")
...@@ -146,6 +143,34 @@ def verify_netbox_entries(subscription: Iptrunk) -> None: ...@@ -146,6 +143,34 @@ def verify_netbox_entries(subscription: Iptrunk) -> None:
raise ProcessFailureError(message="NetBox misconfiguration(s) found", details=str(netbox_errors)) 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( @workflow(
"Validate IP trunk configuration", "Validate IP trunk configuration",
target=Target.SYSTEM, target=Target.SYSTEM,
...@@ -166,9 +191,9 @@ def validate_iptrunk() -> StepList: ...@@ -166,9 +191,9 @@ def validate_iptrunk() -> StepList:
>> unsync >> unsync
>> verify_ipam_records >> verify_ipam_records
>> verify_netbox_entries >> 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(check_ip_trunk_isis)
>> anonymous_lso_interaction(deploy_twamp_dry, detect_configuration_drift) >> anonymous_lso_interaction(verify_twamp_config)
>> resync >> resync
>> done >> done
) )
...@@ -11,11 +11,9 @@ from gso.products.product_types.router import Router ...@@ -11,11 +11,9 @@ from gso.products.product_types.router import Router
from gso.schedules import TT_NUMBER_ZERO from gso.schedules import TT_NUMBER_ZERO
from gso.services import infoblox from gso.services import infoblox
from gso.services.librenms_client import LibreNMSClient 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.services.netbox_client import NetboxClient
from gso.utils.shared_enums import Vendor 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") @step("Prepare required keys in state")
...@@ -63,6 +61,28 @@ def verify_librenms_entry(subscription: Router) -> None: ...@@ -63,6 +61,28 @@ def verify_librenms_entry(subscription: Router) -> None:
client.get_device(subscription.router.router_fqdn) 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( @workflow(
"Validate router configuration", target=Target.SYSTEM, initial_input_form=wrap_modify_initial_input_form(None) "Validate router configuration", target=Target.SYSTEM, initial_input_form=wrap_modify_initial_input_form(None)
) )
...@@ -86,8 +106,8 @@ def validate_router() -> StepList: ...@@ -86,8 +106,8 @@ def validate_router() -> StepList:
>> verify_ipam_loopback >> verify_ipam_loopback
>> verify_netbox_entry >> verify_netbox_entry
>> verify_librenms_entry >> verify_librenms_entry
>> anonymous_lso_interaction(deploy_base_config_dry, detect_configuration_drift) >> anonymous_lso_interaction(verify_base_config)
>> anonymous_lso_interaction(add_p_to_mesh_dry, detect_configuration_drift) >> anonymous_lso_interaction(validate_ibgp_mesh_config)
>> resync >> resync
>> done >> done
) )
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment