diff --git a/gso/migrations/versions/2025-05-12_54477431c9ef_add_config_version_to_ip_trunk.py b/gso/migrations/versions/2025-05-12_54477431c9ef_add_config_version_to_ip_trunk.py
new file mode 100644
index 0000000000000000000000000000000000000000..401717874c34319181c160d28ff88eb426a41589
--- /dev/null
+++ b/gso/migrations/versions/2025-05-12_54477431c9ef_add_config_version_to_ip_trunk.py
@@ -0,0 +1,41 @@
+"""add config version to ip trunk.
+
+Revision ID: 54477431c9ef
+Revises: 465008ed496e
+Create Date: 2025-05-12 04:46:47.410668
+
+"""
+import sqlalchemy as sa
+from alembic import op
+
+# revision identifiers, used by Alembic.
+revision = '54477431c9ef'
+down_revision = '465008ed496e'
+branch_labels = None
+depends_on = None
+
+
+def upgrade() -> None:
+    conn = op.get_bind()
+    conn.execute(sa.text("""
+INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_config_version', 'adding option of service version controlled rollout') RETURNING resource_types.resource_type_id
+    """))
+    conn.execute(sa.text("""
+INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_config_version')))
+    """))
+
+
+def downgrade() -> None:
+    conn = op.get_bind()
+    conn.execute(sa.text("""
+DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_config_version'))
+    """))
+    conn.execute(sa.text("""
+DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_config_version'))
+    """))
+    conn.execute(sa.text("""
+DELETE FROM subscription_instance_values WHERE subscription_instance_values.resource_type_id IN (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_config_version'))
+    """))
+    conn.execute(sa.text("""
+DELETE FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_config_version')
+    """))
diff --git a/gso/products/product_blocks/iptrunk.py b/gso/products/product_blocks/iptrunk.py
index 8bfc0056a1ee0877f6c8dd388f1643512932cb18..1c6cb4a666cb8c1a8b865898405445cdb1c66631 100644
--- a/gso/products/product_blocks/iptrunk.py
+++ b/gso/products/product_blocks/iptrunk.py
@@ -4,8 +4,6 @@ import ipaddress
 from typing import Annotated
 
 from annotated_types import Len
-from orchestrator.domain.base import ProductBlockModel, T
-from orchestrator.types import SubscriptionLifecycle
 from pydantic import AfterValidator
 from pydantic_forms.types import strEnum
 from pydantic_forms.validators import validate_unique_list
@@ -17,6 +15,8 @@ from gso.products.product_blocks.router import (
     RouterBlockProvisioning,
 )
 from gso.utils.types.interfaces import LAGMemberList, PhysicalPortCapacity
+from orchestrator.domain.base import ProductBlockModel, T
+from orchestrator.types import SubscriptionLifecycle
 
 
 class IptrunkType(strEnum):
@@ -109,6 +109,7 @@ class IptrunkBlockInactive(
     iptrunk_ipv6_network: ipaddress.IPv6Network | None = None
     iptrunk_sides: IptrunkSides[IptrunkSideBlockInactive]
     iptrunk_description_suffix: str | None = None
+    iptrunk_config_version: str | None = None
 
 
 class IptrunkBlockProvisioning(IptrunkBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
@@ -124,6 +125,7 @@ class IptrunkBlockProvisioning(IptrunkBlockInactive, lifecycle=[SubscriptionLife
     iptrunk_ipv6_network: ipaddress.IPv6Network | None
     iptrunk_sides: IptrunkSides[IptrunkSideBlockProvisioning]  # type: ignore[assignment]
     iptrunk_description_suffix: str | None
+    iptrunk_config_version: str | None
 
 
 class IptrunkBlock(IptrunkBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
@@ -152,3 +154,4 @@ class IptrunkBlock(IptrunkBlockProvisioning, lifecycle=[SubscriptionLifecycle.AC
     iptrunk_ipv6_network: ipaddress.IPv6Network
     iptrunk_sides: IptrunkSides[IptrunkSideBlock]  # type: ignore[assignment]
     iptrunk_description_suffix: str | None
+    iptrunk_config_version: str | None
diff --git a/gso/workflows/iptrunk/create_imported_iptrunk.py b/gso/workflows/iptrunk/create_imported_iptrunk.py
index 4c45751b9f2ba05fc65a89953d719215f509743d..d65dee7535f876293f2f16117e94dd4da41b5df9 100644
--- a/gso/workflows/iptrunk/create_imported_iptrunk.py
+++ b/gso/workflows/iptrunk/create_imported_iptrunk.py
@@ -4,12 +4,6 @@ import ipaddress
 from typing import Annotated
 from uuid import uuid4
 
-from orchestrator import workflow
-from orchestrator.forms import SubmitFormPage
-from orchestrator.targets import Target
-from orchestrator.types import SubscriptionLifecycle
-from orchestrator.workflow import StepList, begin, done, step
-from orchestrator.workflows.steps import resync, set_status, store_process_subscription
 from pydantic import AfterValidator, ConfigDict
 from pydantic_forms.types import FormGenerator, State
 from pydantic_forms.validators import validate_unique_list
@@ -23,6 +17,12 @@ from gso.services.partners import get_partner_by_name
 from gso.utils.helpers import active_router_selector
 from gso.utils.types.geant_ids import IMPORTED_GA_ID, IMPORTED_GS_ID
 from gso.utils.types.interfaces import LAGMember, LAGMemberList, PhysicalPortCapacity
+from orchestrator import workflow
+from orchestrator.forms import SubmitFormPage
+from orchestrator.targets import Target
+from orchestrator.types import SubscriptionLifecycle
+from orchestrator.workflow import StepList, begin, done, step
+from orchestrator.workflows.steps import resync, set_status, store_process_subscription
 
 
 def initial_input_form_generator() -> FormGenerator:
@@ -39,6 +39,7 @@ def initial_input_form_generator() -> FormGenerator:
         iptrunk_minimum_links: int
         iptrunk_isis_metric: int
         iptrunk_description_suffix: str | None = None
+        iptrunk_config_version: str | None = None
 
         side_a_node_id: active_router_selector()  # type: ignore[valid-type]
         side_a_ae_iface: str
@@ -89,6 +90,7 @@ def initialize_subscription(
     side_b_ae_iface: str,
     side_b_ga_id: IMPORTED_GA_ID | None,
     side_b_ae_members: LAGMemberList,
+    iptrunk_config_version: str | None,
 ) -> State:
     """Take all input from the user, and store it in the database."""
     subscription.iptrunk.gs_id = gs_id
@@ -98,6 +100,7 @@ def initialize_subscription(
     subscription.iptrunk.iptrunk_isis_metric = iptrunk_isis_metric
     subscription.iptrunk.iptrunk_minimum_links = iptrunk_minimum_links
     subscription.iptrunk.iptrunk_description_suffix = iptrunk_description_suffix
+    subscription.iptrunk.iptrunk_config_version = iptrunk_config_version
 
     subscription.iptrunk.iptrunk_sides[0].iptrunk_side_node = Router.from_subscription(side_a_node_id).router
     subscription.iptrunk.iptrunk_sides[0].iptrunk_side_ae_iface = side_a_ae_iface
diff --git a/gso/workflows/iptrunk/create_iptrunk.py b/gso/workflows/iptrunk/create_iptrunk.py
index 54bdb6d96c9681e58a2052438a1c8041d9a0edf0..72f6a6c9a3e933496c14a0b1f4b1ca2aca824491 100644
--- a/gso/workflows/iptrunk/create_iptrunk.py
+++ b/gso/workflows/iptrunk/create_iptrunk.py
@@ -31,15 +31,6 @@ from typing import Annotated
 from uuid import uuid4
 
 from annotated_types import Len
-from orchestrator.forms import FormPage
-from orchestrator.forms.validators import Choice, Label
-from orchestrator.targets import Target
-from orchestrator.types import SubscriptionLifecycle
-from orchestrator.utils.errors import ProcessFailureError
-from orchestrator.utils.json import json_dumps
-from orchestrator.workflow import StepList, begin, conditional, done, step, step_group, workflow
-from orchestrator.workflows.steps import resync, set_status, store_process_subscription
-from orchestrator.workflows.utils import wrap_create_initial_input_form
 from ping3 import ping
 from pydantic import ConfigDict
 from pydantic_forms.types import FormGenerator, State, UUIDstr
@@ -75,6 +66,15 @@ from gso.utils.types.netbox_router import NetboxEnabledRouter
 from gso.utils.types.tt_number import TTNumber
 from gso.utils.workflow_steps import prompt_sharepoint_checklist_url
 from gso.workflows.shared import create_summary_form
+from orchestrator.forms import FormPage
+from orchestrator.forms.validators import Choice, Label
+from orchestrator.targets import Target
+from orchestrator.types import SubscriptionLifecycle
+from orchestrator.utils.errors import ProcessFailureError
+from orchestrator.utils.json import json_dumps
+from orchestrator.workflow import StepList, begin, conditional, done, step, step_group, workflow
+from orchestrator.workflows.steps import resync, set_status, store_process_subscription
+from orchestrator.workflows.utils import wrap_create_initial_input_form
 
 
 def initial_input_form_generator(product_name: str) -> FormGenerator:
@@ -95,6 +95,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
         iptrunk_speed: PhysicalPortCapacity
         iptrunk_number_of_members: int
         iptrunk_description_suffix: str | None = None
+        iptrunk_config_version: str | None = None
 
     initial_user_input = yield CreateIptrunkForm
     recommended_minimum_links = calculate_recommended_minimum_links(
@@ -203,6 +204,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
         "iptrunk_description",
         "iptrunk_minimum_links",
         "iptrunk_description_suffix",
+        "iptrunk_config_version",
         "side_a_node",
         "side_a_ae_iface",
         "side_a_ae_members",
@@ -327,6 +329,7 @@ def initialize_subscription(
     iptrunk_speed: PhysicalPortCapacity,
     iptrunk_minimum_links: int,
     iptrunk_description_suffix: str | None,
+    iptrunk_config_version: str | None,
     side_a_node_id: str,
     side_a_ae_iface: str,
     side_a_ae_members: list[dict],
@@ -346,6 +349,7 @@ def initialize_subscription(
     subscription.iptrunk.iptrunk_isis_metric = oss_params.GENERAL.isis_high_metric
     subscription.iptrunk.iptrunk_minimum_links = iptrunk_minimum_links
     subscription.iptrunk.iptrunk_description_suffix = iptrunk_description_suffix
+    subscription.iptrunk.iptrunk_config_version = iptrunk_config_version
 
     subscription.iptrunk.iptrunk_sides[0].iptrunk_side_node = side_a
     subscription.iptrunk.iptrunk_sides[0].iptrunk_side_ae_iface = side_a_ae_iface
diff --git a/test/workflows/iptrunk/test_create_imported_iptrunk.py b/test/workflows/iptrunk/test_create_imported_iptrunk.py
index 7f83775bb0d8ba1309bc008a8440f90b541e0f53..7add53de932149b0f7006bece952b25e22396fc6 100644
--- a/test/workflows/iptrunk/test_create_imported_iptrunk.py
+++ b/test/workflows/iptrunk/test_create_imported_iptrunk.py
@@ -23,6 +23,7 @@ def workflow_input_data(faker, router_subscription_factory):
         "iptrunk_minimum_links": 2,
         "iptrunk_isis_metric": 10000,
         "iptrunk_description_suffix": faker.word(),
+        "iptrunk_config_version": "1.0",
         "side_a_node_id": str(router_subscription_factory().subscription_id),
         "side_a_ae_iface": faker.nokia_lag_interface_name(),
         "side_a_ga_id": faker.imported_ga_id(),
diff --git a/test/workflows/iptrunk/test_create_iptrunk.py b/test/workflows/iptrunk/test_create_iptrunk.py
index 6996e20a03cf1c69ab0afa7e05e3f3fdd80d60ed..c18577249f98e24a698dfd2456a205bf91cdc180 100644
--- a/test/workflows/iptrunk/test_create_iptrunk.py
+++ b/test/workflows/iptrunk/test_create_iptrunk.py
@@ -74,6 +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": "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}