From 18164f0e1d4ac80901bff1c808b91dff28c6ce0a Mon Sep 17 00:00:00 2001
From: Simone Spinelli <simone.spinelli@geant.org>
Date: Fri, 21 Apr 2023 13:36:38 +0000
Subject: [PATCH] Add first form for trunks

---
 gso/workflows/iptrunk/create_iptrunk.py | 77 +++++++++++++++++--------
 1 file changed, 52 insertions(+), 25 deletions(-)

diff --git a/gso/workflows/iptrunk/create_iptrunk.py b/gso/workflows/iptrunk/create_iptrunk.py
index 72be7cb7..2d4ae020 100644
--- a/gso/workflows/iptrunk/create_iptrunk.py
+++ b/gso/workflows/iptrunk/create_iptrunk.py
@@ -14,13 +14,57 @@ from orchestrator.workflows.utils import wrap_create_initial_input_form
 from gso.products.product_types import iptrunk
 from gso.services import ipam, provisioning_proxy
 
+from gso.products.product_types import device
+from orchestrator.db.models import ProductTable, SubscriptionTable
+from orchestrator.forms.validators import Choice, choice_list
+from typing import List, Optional
+
+def a_side_device_selector() -> list:
+    device_subscriptions = {}
+    for device_id, device_description in (
+        SubscriptionTable.query.join(ProductTable)
+        .filter(
+            ProductTable.product_type == "Device",
+            SubscriptionTable.status == "active",
+        )
+        .with_entities(SubscriptionTable.subscription_id, SubscriptionTable.description)
+        .all()
+    ):
+        device_subscriptions[str(device_id)] = device_description
+
+    return choice_list(
+        Choice("DeviceEnumA", zip(device_subscriptions.keys(), device_subscriptions.items())),  # type:ignore
+        min_items=1,
+        max_items=1,
+    )
+
+def b_side_device_selector() -> list:
+    device_subscriptions = {}
+    for device_id, device_description in (
+        SubscriptionTable.query.join(ProductTable)
+        .filter(
+            ProductTable.product_type == "Device",
+            SubscriptionTable.status == "active",
+        )
+        .with_entities(SubscriptionTable.subscription_id, SubscriptionTable.description)
+        .all()
+    ):
+        device_subscriptions[str(device_id)] = device_description
+
+    return choice_list(
+        Choice("DeviceEnumB", zip(device_subscriptions.keys(), device_subscriptions.items())),  # type:ignore
+        min_items=1,
+        max_items=1,
+    )
 
 def initial_input_form_generator(product_name: str) -> FormGenerator:
     class CreateIptrunkForm(FormPage):
         class Config:
             title = product_name
 
-        fqdn: str
+        geant_s_sid: str
+        iptrunk_sideA_fqdn: a_side_device_selector()
+        iptrunk_sideB_fqdn: b_side_device_selector()
 
     user_input = yield CreateIptrunkForm
 
@@ -50,23 +94,6 @@ def get_info_from_ipam(subscription: iptrunk.IptrunkInactive) -> State:
     return {"subscription": subscription}
 
 
-@step("get information about SNMP")
-def get_snmp_info(subscription: iptrunk.IptrunkInactive) -> State:
-    country = 'Spain'
-    city = 'Barcelona'
-    country_code = 'ES'
-    latitude = '41.3743'
-    longitude = '2.1328'
-    subscription.iptrunk.site_country = country
-    subscription.iptrunk.site_city = city
-    subscription.iptrunk.site_country_code = country_code
-    subscription.iptrunk.site_latitude = latitude
-    subscription.iptrunk.site_longitude = longitude
-    subscription.iptrunk.snmp_location = (
-        f'{city.upper()},{country.upper()}[{latitude},{longitude}]'
-    )
-
-    return {"subscription": subscription}
 
 
 @step("Initialize subscription")
@@ -183,13 +210,13 @@ def create_iptrunk():
     return (
         init
         >> create_subscription
-        >> store_process_subscription(Target.CREATE)
-        >> get_info_from_ipam
-        >> get_snmp_info
-        >> initialize_subscription
-        >> provision_iptrunk_dry
-        >> confirm_step
-        >> provision_iptrunk_real
+        #>> store_process_subscription(Target.CREATE)
+        #>> get_info_from_ipam
+        #>> get_snmp_info
+        #>> initialize_subscription
+        #>> provision_iptrunk_dry
+        #>> confirm_step
+        #>> provision_iptrunk_real
         >> set_status(SubscriptionLifecycle.ACTIVE)
         >> resync
         >> done
-- 
GitLab