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