diff --git a/gso/products/product_blocks/iptrunk.py b/gso/products/product_blocks/iptrunk.py index 52d28ebf47c8bb507374b65b990e2520115d7f90..787648b269ae3329eb38194219f914b29007befa 100644 --- a/gso/products/product_blocks/iptrunk.py +++ b/gso/products/product_blocks/iptrunk.py @@ -20,6 +20,24 @@ class IptrunkType(strEnum): T = TypeVar("T", covariant=True) +class IptrunkInterfaceBlockInactive( + ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="IptrunkInterfaceBlock" +): + # TODO: add validation for interface names, making the type a constrained string + interface_name: str | None = None + interface_description: str | None = None + + +class IptrunkInterfaceBlockProvisioning(IptrunkInterfaceBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]): + interface_name: str + interface_description: str + + +class IptrunkInterfaceBlock(IptrunkInterfaceBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]): + interface_name: str + interface_description: str + + class IptrunkSides(UniqueConstrainedList[T]): # type: ignore[type-var] min_items = 2 max_items = 2 @@ -31,24 +49,21 @@ class IptrunkSideBlockInactive( iptrunk_side_node: RouterBlockInactive iptrunk_side_ae_iface: str | None = None iptrunk_side_ae_geant_a_sid: str | None = None - iptrunk_side_ae_members: list[str] = Field(default_factory=list) - iptrunk_side_ae_members_description: list[str] = Field(default_factory=list) + iptrunk_side_ae_members: list[IptrunkInterfaceBlockInactive] = Field(default_factory=list) class IptrunkSideBlockProvisioning(IptrunkSideBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]): iptrunk_side_node: RouterBlockProvisioning iptrunk_side_ae_iface: str | None = None iptrunk_side_ae_geant_a_sid: str | None = None - iptrunk_side_ae_members: list[str] = Field(default_factory=list) - iptrunk_side_ae_members_description: list[str] = Field(default_factory=list) + iptrunk_side_ae_members: list[IptrunkInterfaceBlockProvisioning] = Field(default_factory=list) class IptrunkSideBlock(IptrunkSideBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]): iptrunk_side_node: RouterBlock iptrunk_side_ae_iface: str | None = None iptrunk_side_ae_geant_a_sid: str | None = None - iptrunk_side_ae_members: list[str] = Field(default_factory=list) - iptrunk_side_ae_members_description: list[str] = Field(default_factory=list) + iptrunk_side_ae_members: list[IptrunkInterfaceBlock] = Field(default_factory=list) class IptrunkBlockInactive(