From f9c1f9c66d50658d757c0819734a0b2f4abcd2b5 Mon Sep 17 00:00:00 2001
From: Karel van Klink <karel.vanklink@geant.org>
Date: Thu, 8 May 2025 11:33:22 +0200
Subject: [PATCH] Improve insync handling of prefix list validation workflow

Always run the workflow, even if out of sync. Only return subscription to in sync if it already was when before running this validation
---
 .../l3_core_service/geant_ip/validate_prefix_list.py     | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/gso/workflows/l3_core_service/geant_ip/validate_prefix_list.py b/gso/workflows/l3_core_service/geant_ip/validate_prefix_list.py
index ec335abd7..8dc838d20 100644
--- a/gso/workflows/l3_core_service/geant_ip/validate_prefix_list.py
+++ b/gso/workflows/l3_core_service/geant_ip/validate_prefix_list.py
@@ -7,7 +7,7 @@ from orchestrator.domain import SubscriptionModel
 from orchestrator.forms import SubmitFormPage
 from orchestrator.targets import Target
 from orchestrator.workflow import StepList, begin, conditional, done, inputstep, step, workflow
-from orchestrator.workflows.steps import resync, store_process_subscription, unsync
+from orchestrator.workflows.steps import resync, store_process_subscription, unsync_unchecked
 from orchestrator.workflows.utils import wrap_modify_initial_input_form
 from pydantic import Field
 from pydantic_forms.types import FormGenerator, State, UUIDstr
@@ -26,7 +26,7 @@ def build_fqdn_list(subscription_id: UUIDstr) -> State:
     ap_fqdn_list = [
         ap.sbp.edge_port.node.router_fqdn for ap in ap_list if ap.sbp.edge_port.node.vendor != Vendor.JUNIPER
     ]
-    return {"ap_fqdn_list": ap_fqdn_list, "subscription": subscription}
+    return {"ap_fqdn_list": ap_fqdn_list, "subscription": subscription, "subscription_was_in_sync": subscription.insync}
 
 
 @step("[DRY RUN] Validate Prefix-Lists")
@@ -115,14 +115,15 @@ def validate_geant_ip_prefix_list() -> StepList:
     """Validate prefix-lists for an existing GÉANT IP subscription."""
     fqdn_list_is_empty = conditional(lambda state: state["ap_fqdn_list"] == [])
     prefix_list_has_drifted = conditional(lambda state: bool(state["prefix_list_drift"]))
+    subscription_was_in_sync = conditional(lambda state: bool(state["subscription_was_in_sync"]))
 
     redeploy_prefix_list_steps = (
         begin
-        >> unsync
+        >> unsync_unchecked
         >> await_operator
         >> lso_interaction(deploy_prefix_lists_dry)
         >> lso_interaction(deploy_prefix_lists_real)
-        >> resync
+        >> subscription_was_in_sync(resync)
     )
     prefix_list_validation_steps = (
         begin
-- 
GitLab