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