diff --git a/gso/workflows/iptrunk/create_iptrunk.py b/gso/workflows/iptrunk/create_iptrunk.py index 1dc9d0579f92b4ff1c1ac099f40b0b784cb779fe..fa5b3fa8602e28c1f6f0a0b4d1f72bf1bf5a16fe 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