From bf7b0dd662e48e7307727d212f9bc3a2ee5431d1 Mon Sep 17 00:00:00 2001
From: Karel van Klink <karel.vanklink@geant.org>
Date: Mon, 14 Apr 2025 10:07:23 +0200
Subject: [PATCH] Make generation of new virtual circuit ID optional in layer 2
circuit migration workflow
---
.../l2_circuit/migrate_layer_2_circuit.py | 21 ++++++++++++-------
.../test_migrate_layer_2_circuit.py | 9 +++++++-
2 files changed, 22 insertions(+), 8 deletions(-)
diff --git a/gso/workflows/l2_circuit/migrate_layer_2_circuit.py b/gso/workflows/l2_circuit/migrate_layer_2_circuit.py
index 70a91e5aa..661e27d32 100644
--- a/gso/workflows/l2_circuit/migrate_layer_2_circuit.py
+++ b/gso/workflows/l2_circuit/migrate_layer_2_circuit.py
@@ -87,6 +87,7 @@ def input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
model_config = ConfigDict(title="Migrating Layer 2 Circuit")
new_edge_port: active_edge_port_selector(partner_id=replace_side_partner.partner_id) # type: ignore[valid-type]
+ generate_new_vc_id: bool = False
user_input = yield SelectNewEdgePortForm
@@ -98,11 +99,17 @@ def input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
"subscription_id": subscription_id,
"old_edge_port": initial_user_input.replace_side,
"new_edge_port": user_input.new_edge_port,
+ "generate_new_vc_id": user_input.generate_new_vc_id,
}
@step("Update subscription model")
-def update_subscription_model(subscription: Layer2Circuit, old_edge_port: UUIDstr, new_edge_port: UUIDstr) -> State:
+def update_subscription_model(
+ subscription: Layer2Circuit,
+ old_edge_port: UUIDstr,
+ new_edge_port: UUIDstr,
+ generate_new_vc_id: bool, # noqa: FBT001
+) -> State:
"""Replace the old Edge Port with the newly selected one in the subscription model."""
replace_index = (
0
@@ -114,12 +121,12 @@ def update_subscription_model(subscription: Layer2Circuit, old_edge_port: UUIDst
new_edge_port
).edge_port
- vc_id = generate_unique_vc_id(l2c_type=subscription.layer_2_circuit.layer_2_circuit_type)
- if not vc_id:
- msg = "Failed to generate unique Virtual Circuit ID."
- raise ProcessFailureError(msg)
-
- subscription.layer_2_circuit.virtual_circuit_id = vc_id
+ if generate_new_vc_id:
+ vc_id = generate_unique_vc_id(l2c_type=subscription.layer_2_circuit.layer_2_circuit_type)
+ if not vc_id:
+ msg = "Failed to generate unique Virtual Circuit ID."
+ raise ProcessFailureError(msg)
+ subscription.layer_2_circuit.virtual_circuit_id = vc_id
return {"subscription": subscription}
diff --git a/test/workflows/l2_circuit/test_migrate_layer_2_circuit.py b/test/workflows/l2_circuit/test_migrate_layer_2_circuit.py
index 9c016cd28..a0f05946c 100644
--- a/test/workflows/l2_circuit/test_migrate_layer_2_circuit.py
+++ b/test/workflows/l2_circuit/test_migrate_layer_2_circuit.py
@@ -12,9 +12,11 @@ from test.workflows import assert_complete, assert_lso_interaction_success, extr
@pytest.mark.parametrize("layer_2_circuit_service_type", LAYER_2_CIRCUIT_SERVICE_TYPES)
@pytest.mark.parametrize("run_old_side_ansible", [False, True])
@pytest.mark.parametrize("run_new_side_ansible", [False, True])
+@pytest.mark.parametrize("generate_new_vc_id", [False, True])
@patch("gso.services.lso_client._send_request")
def test_migrate_layer_2_circuit(
mock_lso_interaction,
+ generate_new_vc_id,
run_new_side_ansible,
run_old_side_ansible,
layer_2_circuit_service_type,
@@ -31,6 +33,7 @@ def test_migrate_layer_2_circuit(
)
new_edge_port = edge_port_subscription_factory(node=side_b_router.router)
+ old_vc_id = subscription.layer_2_circuit.virtual_circuit_id
initial_layer_2_circuit_data = [
{"subscription_id": subscription.subscription_id},
{
@@ -40,7 +43,10 @@ def test_migrate_layer_2_circuit(
"run_old_side_ansible": run_old_side_ansible,
"run_new_side_ansible": run_new_side_ansible,
},
- {"new_edge_port": new_edge_port.subscription_id},
+ {
+ "new_edge_port": new_edge_port.subscription_id,
+ "generate_new_vc_id": generate_new_vc_id,
+ },
]
result, process_stat, step_log = run_workflow("migrate_layer_2_circuit", initial_layer_2_circuit_data)
@@ -70,3 +76,4 @@ def test_migrate_layer_2_circuit(
assert replaced_edge_port.edge_port_ae_members[1].model_dump(
exclude="owner_subscription_id"
) == new_edge_port.edge_port.edge_port_ae_members[1].model_dump(exclude="owner_subscription_id")
+ assert (old_vc_id == subscription.layer_2_circuit.virtual_circuit_id) is not generate_new_vc_id
--
GitLab