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