From 7f615e98f1545f7365d626ee7a7ec463bcb3b50e Mon Sep 17 00:00:00 2001
From: Karel van Klink <karel.vanklink@geant.org>
Date: Thu, 1 Jun 2023 16:41:33 +0200
Subject: [PATCH] Force the correct amount of members for an IP trunk in the
 input form

---
 gso/workflows/iptrunk/create_iptrunk.py | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/gso/workflows/iptrunk/create_iptrunk.py b/gso/workflows/iptrunk/create_iptrunk.py
index 425afc06..f778ca10 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
 
-- 
GitLab