From 61e92862e9a771686b3ef45457e53c759978792e Mon Sep 17 00:00:00 2001 From: Aleksandr Kurbatov <aleksandr.kurbatov@GL1342.local> Date: Mon, 18 Mar 2024 14:40:58 +0000 Subject: [PATCH] Trunk migration checks --- gso/workflows/iptrunk/migrate_iptrunk.py | 58 ++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/gso/workflows/iptrunk/migrate_iptrunk.py b/gso/workflows/iptrunk/migrate_iptrunk.py index 25053570..209a6ec7 100644 --- a/gso/workflows/iptrunk/migrate_iptrunk.py +++ b/gso/workflows/iptrunk/migrate_iptrunk.py @@ -220,6 +220,24 @@ def calculate_old_side_data(subscription: Iptrunk, replace_index: int) -> State: return {"old_side_data": old_side_data} +@step("Check Optical levels on the trunk endpoint") +def check_ip_trunk_optical_levels( + subscription: Iptrunk, + callback_route: str, +) -> State: + """Check Optical levels on the trunk.""" + extra_vars = {"wfo_ip_trunk_json": json.loads(json_dumps(subscription)), "check": "optical"} + + execute_playbook( + playbook_name="iptrunks_checks.yaml", + callback_route=callback_route, + inventory=subscription.iptrunk.iptrunk_sides[1 - replace_index].iptrunk_side_node.router_fqdn, + extra_vars=extra_vars, + ) + + return {"subscription": subscription} + + @step("[DRY RUN] Disable configuration on old router") def disable_old_config_dry( subscription: Iptrunk, @@ -385,6 +403,24 @@ def confirm_continue_move_fiber() -> FormGenerator: return {} +@step("Check IP connectivity of the trunk") +def check_ip_trunk_connectivity( + subscription: Iptrunk, + callback_route: str, +) -> State: + """Check successful connectivity across the new trunk.""" + extra_vars = {"wfo_ip_trunk_json": json.loads(json_dumps(subscription)), "check": "ping"} + + execute_playbook( + playbook_name="iptrunks_checks.yaml", + callback_route=callback_route, + inventory=subscription.iptrunk.iptrunk_sides[1 - replace_index].iptrunk_side_node.router_fqdn, + extra_vars=extra_vars, + ) + + return {"subscription": subscription} + + @step("Deploy ISIS configuration on new router") def deploy_new_isis( subscription: Iptrunk, @@ -422,6 +458,24 @@ def deploy_new_isis( return {"subscription": subscription} +@step("Check ISIS adjacency") +def check_ip_trunk_isis( + subscription: Iptrunk, + callback_route: str, +) -> State: + """Run an Ansible playbook to confirm :term:`ISIS` adjacency.""" + extra_vars = {"wfo_ip_trunk_json": json.loads(json_dumps(subscription)), "check": "isis"} + + execute_playbook( + playbook_name="iptrunks_checks.yaml", + callback_route=callback_route, + inventory=subscription.iptrunk.iptrunk_sides[1 - replace_index].iptrunk_side_node.router_fqdn, + extra_vars=extra_vars, + ) + + return {"subscription": subscription} + + @inputstep("Wait for confirmation", assignee=Assignee.SYSTEM) def confirm_continue_restore_isis() -> FormGenerator: """Wait for an operator to confirm that the old :term:`ISIS` metric should be restored.""" @@ -657,12 +711,16 @@ def migrate_iptrunk() -> StepList: >> new_side_is_nokia(netbox_reserve_interfaces) >> calculate_old_side_data >> pp_interaction(set_isis_to_max) + >> pp_interaction(check_ip_trunk_optical_levels) >> pp_interaction(disable_old_config_dry) >> pp_interaction(disable_old_config_real) >> pp_interaction(deploy_new_config_dry) >> pp_interaction(deploy_new_config_real) >> confirm_continue_move_fiber + >> pp_interaction(check_ip_trunk_optical_levels) + >> pp_interaction(check_ip_trunk_connectivity) >> pp_interaction(deploy_new_isis) + >> pp_interaction(check_ip_trunk_isis) >> should_restore_isis_metric(confirm_continue_restore_isis) >> should_restore_isis_metric(pp_interaction(restore_isis_metric)) >> pp_interaction(delete_old_config_dry) -- GitLab