diff --git a/gso/workflows/l2_circuit/migrate_layer_2_circuit.py b/gso/workflows/l2_circuit/migrate_layer_2_circuit.py index 70a91e5aaaf24c274ca510bb9121e3b2ac37a882..661e27d32a00589c87d33ec0c199d4fcb154c0f3 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 9c016cd28a5abbbd1a3d9cfd8572eeb78c5fedff..a0f05946cde87647941cb5421af0399a30ce0e47 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