diff --git a/gso/workflows/iptrunk/create_iptrunk.py b/gso/workflows/iptrunk/create_iptrunk.py index 425afc068794ce3ff2565377f4988be992c2e2c1..f778ca10096137be07f6cd0895b0ef60e58207d7 100644 --- a/gso/workflows/iptrunk/create_iptrunk.py +++ b/gso/workflows/iptrunk/create_iptrunk.py @@ -3,7 +3,7 @@ from uuid import uuid4 from orchestrator.db.models import ProductTable, SubscriptionTable # noinspection PyProtectedMember from orchestrator.forms import FormPage -from orchestrator.forms.validators import Choice +from orchestrator.forms.validators import Choice, UniqueConstrainedList from orchestrator.targets import Target from orchestrator.types import FormGenerator, State from orchestrator.types import SubscriptionLifecycle, UUIDstr @@ -52,6 +52,10 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: initial_user_input = yield CreateIptrunkForm + class AeMembersList(UniqueConstrainedList[str]): + min_items = initial_user_input.iptrunk_minimum_links + max_items = initial_user_input.iptrunk_minimum_links + DeviceEnumA = Choice('Device A', zip(devices.keys(), devices.items())) class CreateIptrunkSideAForm(FormPage): @@ -61,8 +65,8 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: iptrunk_sideA_node_id: DeviceEnumA iptrunk_sideA_ae_iface: str iptrunk_sideA_ae_geant_a_sid: str - iptrunk_sideA_ae_members: list[str] - iptrunk_sideA_ae_members_descriptions: list[str] + iptrunk_sideA_ae_members: AeMembersList + iptrunk_sideA_ae_members_descriptions: AeMembersList user_input_side_a = yield CreateIptrunkSideAForm @@ -77,8 +81,8 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: iptrunk_sideB_node_id: DeviceEnumB iptrunk_sideB_ae_iface: str iptrunk_sideB_ae_geant_a_sid: str - iptrunk_sideB_ae_members: list[str] - iptrunk_sideB_ae_members_descriptions: list[str] + iptrunk_sideB_ae_members: AeMembersList + iptrunk_sideB_ae_members_descriptions: AeMembersList user_input_side_b = yield CreateIptrunkSideBForm