From 15d8d358e978fbd2ec41b066ef3cd4537d2e87e1 Mon Sep 17 00:00:00 2001
From: Simone Spinelli <simone.spinelli@geant.org>
Date: Mon, 24 Apr 2023 10:44:30 +0000
Subject: [PATCH] Iptrunk form finished but fails with iptrunk_type

---
 gso/products/product_types/iptrunk.py   |  4 +-
 gso/workflows/iptrunk/create_iptrunk.py | 49 +++++++++++++++++--------
 2 files changed, 36 insertions(+), 17 deletions(-)

diff --git a/gso/products/product_types/iptrunk.py b/gso/products/product_types/iptrunk.py
index 3cb4909b..0ffeec02 100644
--- a/gso/products/product_types/iptrunk.py
+++ b/gso/products/product_types/iptrunk.py
@@ -6,8 +6,8 @@ from gso.products.product_blocks.iptrunk \
 
 
 class IptrunkType(strEnum):
-    dark_fiber = "dark_fiber"
-    leased = "leased"
+    Dark_fiber = "Dark_fiber"
+    Leased = "Leased"
 
 
 class IptrunkInactive(SubscriptionModel, is_base=True):
diff --git a/gso/workflows/iptrunk/create_iptrunk.py b/gso/workflows/iptrunk/create_iptrunk.py
index 73be3393..4a87ceaa 100644
--- a/gso/workflows/iptrunk/create_iptrunk.py
+++ b/gso/workflows/iptrunk/create_iptrunk.py
@@ -46,20 +46,24 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
             title = product_name
 
         geant_s_sid: str
+        iptrunk_type: iptrunk.IptrunkType
         iptrunk_speed: str  # This should be an enum: 1/10/100/400
         iptrunk_minimum_links: int
 
         iptrunk_sideA_fqdn: device_selector(choice_value='DeviceEnumA')
         iptrunk_sideA_ae_iface: str
+        iptrunk_sideA_ae_geant_a_sid: str
         iptrunk_sideA_ae_members: list[str]
 
         iptrunk_sideB_fqdn: device_selector(choice_value='DeviceEnumB')
         iptrunk_sideB_ae_iface: str
+        iptrunk_sideB_ae_geant_a_sid: str
         iptrunk_sideB_ae_members: list[str]
         # TODO: we need additional validation: 
         # sideA fqdn must be different from sideB fqdn
         # the lenght of iptrunk_sideA_ae_members should be the same as iptrunk_sideA_ae_members
         # interface names must be validated
+        # We also need additional fields like a "name" or a description for trunk itself and for all the members
 
     user_input = yield CreateIptrunkForm
 
@@ -78,14 +82,9 @@ def create_subscription(product: UUIDstr) -> State:
 
 @step("Get information from IPAM ")
 def get_info_from_ipam(subscription: iptrunk.IptrunkInactive) -> State:
-    lo = ipam.new_iptrunk_lo_address()
-    subscription.iptrunk.lo_ipv4_address = lo.v4
-    subscription.iptrunk.lo_ipv6_address = lo.v6
     # TODO: get info about how these should be generated
-    subscription.iptrunk.lo_iso_address = "49.51e5.0001.0620.4009.6047.00"
-    subscription.iptrunk.si_ipv4_network = "192.168.0.0/31"
-    subscription.iptrunk.ias_lt_ipv4_network = "192.168.1.0/31"
-    subscription.iptrunk.ias_lt_ipv6_network = "fc00:798:1::150/126"
+    subscription.iptrunk.iptrunk_ipv4_network = "192.168.1.0/31"
+    subscription.iptrunk.iptrunk_ipv6_network = "fc00:798:1::150/126"
     return {"subscription": subscription}
 
 
@@ -94,15 +93,35 @@ def get_info_from_ipam(subscription: iptrunk.IptrunkInactive) -> State:
 @step("Initialize subscription")
 def initialize_subscription(
     subscription: iptrunk.IptrunkInactive,
-    fqdn: str,
-    ts_address: ipaddress.IPv4Address,
-    ts_port: str
+    geant_s_sid: str,
+    iptrunk_type: iptrunk.IptrunkType, 
+    iptrunk_speed: str,
+    iptrunk_minimum_links: int,
+    iptrunk_sideA_fqdn: str,
+    iptrunk_sideA_ae_iface: str,
+    iptrunk_sideA_ae_geant_a_sid: str,
+    iptrunk_sideA_ae_members: list[str],
+    iptrunk_sideB_fqdn: str, 
+    iptrunk_sideB_ae_iface: str,
+    iptrunk_sideB_ae_geant_a_sid: str,
+    iptrunk_sideB_ae_members: list[str]
 ) -> State:
-    subscription.iptrunk.fqdn = fqdn
-    subscription.iptrunk.ts_address = str(ts_address)
-    subscription.iptrunk.ts_port = str(ts_port)
-    subscription.iptrunk_vendor = iptrunk_vendor
-    subscription.description = f"Iptrunk {fqdn} type \
+    subscription.iptrunk_type = iptrunk_type
+
+    subscription.iptrunk.geant_s_sid = geant_s_sid
+    subscription.iptrunk.iptrunk_speed = iptrunk_speed
+    subscription.iptrunk.iptrunk_minimum_links = iptrunk_minimum_links
+
+    subscription.iptrunk.iptrunk_sideA_fqdn = iptrunk_sideA_fqdn
+    subscription.iptrunk.iptrunk_sideA_ae_iface = iptrunk_sideA_ae_iface
+    subscription.iptrunk.iptrunk_sideA_ae_geant_a_sid = iptrunk_sideA_ae_geant_a_sid
+    subscription.iptrunk.iptrunk_sideA_ae_members = iptrunk_sideA_ae_members
+
+    subscription.iptrunk.iptrunk_sideB_fqdn = iptrunk_sideB_fqdn
+    subscription.iptrunk.iptrunk_sideB_ae_iface = iptrunk_sideB_ae_iface
+    subscription.iptrunk.iptrunk_sideB_ae_geant_a_sid = iptrunk_sideB_ae_geant_a_sid
+    subscription.iptrunk.iptrunk_sideB_ae_members = iptrunk_sideB_ae_members
+    subscription.description = f"Iptrunk {geant_s_sid}:  \
                                 ({subscription.iptrunk_type})"
     subscription = iptrunk.IptrunkProvisioning.from_other_lifecycle(
         subscription, SubscriptionLifecycle.PROVISIONING
-- 
GitLab