From f04c36af381aaec2b62c28654b832acf9bbcbe54 Mon Sep 17 00:00:00 2001 From: Saket Agrahari <saket.agrahari@geant.org> Date: Wed, 28 May 2025 10:23:38 +0100 Subject: [PATCH 1/6] Add service configuration for backfill iptrunk config version --- ...df711c3_backfill_iptrunk_config_version.py | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 gso/migrations/versions/2025-05-28_90547df711c3_backfill_iptrunk_config_version.py diff --git a/gso/migrations/versions/2025-05-28_90547df711c3_backfill_iptrunk_config_version.py b/gso/migrations/versions/2025-05-28_90547df711c3_backfill_iptrunk_config_version.py new file mode 100644 index 000000000..4915aadf9 --- /dev/null +++ b/gso/migrations/versions/2025-05-28_90547df711c3_backfill_iptrunk_config_version.py @@ -0,0 +1,48 @@ +"""empty message. + +Revision ID: 90547df711c3 +Revises: 54477431c9ef +Create Date: 2025-05-28 10:15:07.579188 + +""" +import sqlalchemy as sa +from alembic import op + +# revision identifiers, used by Alembic. +revision = '90547df711c3' +down_revision = '54477431c9ef' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + conn = op.get_bind() + conn.execute(sa.text(""" +WITH rt_id AS ( + SELECT resource_type_id FROM resource_types WHERE resource_type = 'iptrunk_config_version' +) +INSERT INTO subscription_instance_values (subscription_instance_id, resource_type_id, value) +SELECT si.subscription_instance_id, rt_id.resource_type_id, '1.0' +FROM rt_id, subscription_instances si +WHERE si.product_block_id = ( + SELECT product_block_id FROM product_blocks WHERE name = 'IptrunkBlock' +); + """)) + + +def downgrade() -> None: + conn = op.get_bind() + conn.execute(sa.text(""" +WITH rt_id AS ( + SELECT resource_type_id FROM resource_types WHERE resource_type = 'iptrunk_config_version' +) +DELETE FROM subscription_instance_values +WHERE resource_type_id = (SELECT resource_type_id FROM rt_id) + AND value = '1.0' + AND subscription_instance_id IN ( + SELECT subscription_instance_id FROM subscription_instances + WHERE product_block_id = ( + SELECT product_block_id FROM product_blocks WHERE name = 'IptrunkBlock' + ) + ); + """)) -- GitLab From 9d809dbd2e04983fc728293bf889f8fc0b900177 Mon Sep 17 00:00:00 2001 From: Saket Agrahari <saket.agrahari@geant.org> Date: Wed, 28 May 2025 13:22:21 +0100 Subject: [PATCH 2/6] fix value set in iptrunk_config_version --- gso/oss-params-example.json | 8 ++++---- gso/utils/helpers.py | 13 +++++-------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/gso/oss-params-example.json b/gso/oss-params-example.json index 2b60d84c8..a929c6727 100644 --- a/gso/oss-params-example.json +++ b/gso/oss-params-example.json @@ -134,15 +134,15 @@ "SERVICE_VERSIONS": { "IP_TRUNK": { "version": { - "1.0": "Base Version", - "1.1": "Minor Upgrade" + "1.0": " 1.0 - Base Version", + "2.0": " 2.0 - Minor Upgrade" }, "default_version": "1.0" }, "GEANT_IP": { "version": { - "1.0": "Base Version", - "2.0": "Major Upgrade" + "1.0": " 1.0 - Base Version", + "2.0": " 2.0 - Minor Upgrade" }, "default_version": "1.0" } diff --git a/gso/utils/helpers.py b/gso/utils/helpers.py index 9a73d9c78..d7bcae661 100644 --- a/gso/utils/helpers.py +++ b/gso/utils/helpers.py @@ -283,17 +283,14 @@ def active_edge_port_selector(*, partner_id: UUIDstr | None = None) -> TypeAlias ) -def ip_trunk_service_version_selector() -> TypeAlias: +def ip_trunk_service_version_selector() -> Choice: """Generate a dropdown selector for choosing a service version.""" iptrunk_versions = load_oss_params().SERVICE_VERSIONS.IP_TRUNK.version - return cast( - type[Choice], - Choice.__call__( - "Select an IP trunk service version.", - [(k, f"Version {k} - {iptrunk_versions[k]}") for k in iptrunk_versions], - ), - ) + return Choice("Select an IP trunk service version.", + zip(iptrunk_versions.keys(), + iptrunk_versions.items(), + strict=True)) # type: ignore[arg-type] def partner_choice() -> Choice: -- GitLab From e1b2edf2b91bd3b3c2c079c3c2533c8157d361eb Mon Sep 17 00:00:00 2001 From: Neda Moeini <neda.moeini@geant.org> Date: Wed, 28 May 2025 14:36:21 +0200 Subject: [PATCH 3/6] Make ruff happy --- gso/utils/helpers.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gso/utils/helpers.py b/gso/utils/helpers.py index d7bcae661..fc4c5dee2 100644 --- a/gso/utils/helpers.py +++ b/gso/utils/helpers.py @@ -287,10 +287,10 @@ def ip_trunk_service_version_selector() -> Choice: """Generate a dropdown selector for choosing a service version.""" iptrunk_versions = load_oss_params().SERVICE_VERSIONS.IP_TRUNK.version - return Choice("Select an IP trunk service version.", - zip(iptrunk_versions.keys(), - iptrunk_versions.items(), - strict=True)) # type: ignore[arg-type] + return Choice( + "Select an IP trunk service version.", + zip(iptrunk_versions.keys(), iptrunk_versions.items(), strict=True), # type: ignore[arg-type] + ) def partner_choice() -> Choice: -- GitLab From 9065952605dd40548d20c346142d615a4d03312f Mon Sep 17 00:00:00 2001 From: Neda Moeini <neda.moeini@geant.org> Date: Wed, 28 May 2025 14:37:19 +0200 Subject: [PATCH 4/6] Fix formatting in oss-params-example.json service versions --- gso/oss-params-example.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gso/oss-params-example.json b/gso/oss-params-example.json index a929c6727..98e41280d 100644 --- a/gso/oss-params-example.json +++ b/gso/oss-params-example.json @@ -134,15 +134,15 @@ "SERVICE_VERSIONS": { "IP_TRUNK": { "version": { - "1.0": " 1.0 - Base Version", - "2.0": " 2.0 - Minor Upgrade" + "1.0": "1.0 - Base Version", + "2.0": "2.0 - Minor Upgrade" }, "default_version": "1.0" }, "GEANT_IP": { "version": { - "1.0": " 1.0 - Base Version", - "2.0": " 2.0 - Minor Upgrade" + "1.0": "1.0 - Base Version", + "2.0": "2.0 - Minor Upgrade" }, "default_version": "1.0" } -- GitLab From add072b08a57f51c4f7dc0f7eb62bf4ac736cc57 Mon Sep 17 00:00:00 2001 From: Neda Moeini <neda.moeini@geant.org> Date: Wed, 28 May 2025 14:38:31 +0200 Subject: [PATCH 5/6] Update iptrunk unittest to test the config version is set correctly --- test/workflows/iptrunk/test_create_iptrunk.py | 3 ++- test/workflows/iptrunk/test_modify_trunk_interface.py | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/test/workflows/iptrunk/test_create_iptrunk.py b/test/workflows/iptrunk/test_create_iptrunk.py index 851c3e308..9e3b297ef 100644 --- a/test/workflows/iptrunk/test_create_iptrunk.py +++ b/test/workflows/iptrunk/test_create_iptrunk.py @@ -74,7 +74,7 @@ def input_form_wizard_data(request, router_subscription_factory, faker): "iptrunk_speed": PhysicalPortCapacity.HUNDRED_GIGABIT_PER_SECOND, "iptrunk_number_of_members": 2, "iptrunk_description_suffix": faker.word(), - "iptrunk_config_version": "Version 1.0 - Base Version", + "iptrunk_config_version": "1.0", } create_ip_trunk_confirm_step = {"iptrunk_minimum_links": 1} create_ip_trunk_side_a_router_name = {"side_a_node_id": router_side_a} @@ -158,6 +158,7 @@ def test_successful_iptrunk_creation_with_standard_lso_result( f"{input_form_wizard_data[0]["iptrunk_description_suffix"]}, " f"{subscription.iptrunk.gs_id}" ) + assert subscription.iptrunk.iptrunk_config_version == input_form_wizard_data[0]["iptrunk_config_version"] # We search for 6 hosts in total, 2 in a /31 and 4 in a /126 assert mock_find_host_by_ip.call_count == 6 diff --git a/test/workflows/iptrunk/test_modify_trunk_interface.py b/test/workflows/iptrunk/test_modify_trunk_interface.py index 7c11c9551..fb9b6a076 100644 --- a/test/workflows/iptrunk/test_modify_trunk_interface.py +++ b/test/workflows/iptrunk/test_modify_trunk_interface.py @@ -222,6 +222,7 @@ def test_iptrunk_modify_trunk_interface_success( assert subscription.iptrunk.iptrunk_minimum_links == input_form_iptrunk_data[1]["iptrunk_number_of_members"] - 1 assert subscription.iptrunk.iptrunk_sides[0].ga_id == new_side_a_gid assert subscription.iptrunk.iptrunk_description_suffix == input_form_iptrunk_data[1]["iptrunk_description_suffix"] + assert subscription.iptrunk.iptrunk_config_version == input_form_iptrunk_data[0]["iptrunk_config_version"] def _find_interface_by_name(interfaces: list[dict], name: str): for interface in interfaces: -- GitLab From f83064a7315893a2cf5c6ca818c31ad20664e4f0 Mon Sep 17 00:00:00 2001 From: Neda Moeini <neda.moeini@geant.org> Date: Wed, 28 May 2025 14:43:24 +0200 Subject: [PATCH 6/6] Fix modify_trunk_interface test --- test/workflows/iptrunk/test_modify_trunk_interface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/workflows/iptrunk/test_modify_trunk_interface.py b/test/workflows/iptrunk/test_modify_trunk_interface.py index fb9b6a076..b6117a8c3 100644 --- a/test/workflows/iptrunk/test_modify_trunk_interface.py +++ b/test/workflows/iptrunk/test_modify_trunk_interface.py @@ -222,7 +222,7 @@ def test_iptrunk_modify_trunk_interface_success( assert subscription.iptrunk.iptrunk_minimum_links == input_form_iptrunk_data[1]["iptrunk_number_of_members"] - 1 assert subscription.iptrunk.iptrunk_sides[0].ga_id == new_side_a_gid assert subscription.iptrunk.iptrunk_description_suffix == input_form_iptrunk_data[1]["iptrunk_description_suffix"] - assert subscription.iptrunk.iptrunk_config_version == input_form_iptrunk_data[0]["iptrunk_config_version"] + assert subscription.iptrunk.iptrunk_config_version == input_form_iptrunk_data[1]["iptrunk_config_version"] def _find_interface_by_name(interfaces: list[dict], name: str): for interface in interfaces: -- GitLab