From 60efd98b0f16da054eda316232f57b3df5b352b2 Mon Sep 17 00:00:00 2001 From: Neda Moeini <neda.moeini@geant.org> Date: Mon, 11 Nov 2024 14:50:16 +0100 Subject: [PATCH] Fix the issue with BFDSettings in GEANT IP creation. --- .../create_nren_l3_core_service.py | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/gso/workflows/nren_l3_core_service/create_nren_l3_core_service.py b/gso/workflows/nren_l3_core_service/create_nren_l3_core_service.py index c07ad501..7639ff28 100644 --- a/gso/workflows/nren_l3_core_service/create_nren_l3_core_service.py +++ b/gso/workflows/nren_l3_core_service/create_nren_l3_core_service.py @@ -13,7 +13,7 @@ from orchestrator.workflows.utils import wrap_create_initial_input_form from pydantic import BaseModel, ConfigDict, Field, computed_field from pydantic_forms.validators import Divider -from gso.products.product_blocks.bgp_session import BGPSession, IPFamily +from gso.products.product_blocks.bgp_session import BFDSettings, BGPSession, IPFamily from gso.products.product_blocks.nren_l3_core_service import NRENAccessPortInactive from gso.products.product_blocks.service_binding_port import ServiceBindingPortInactive from gso.products.product_types.edge_port import EdgePort @@ -61,7 +61,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: bfd_multiplier: int | None = None class BaseBGPPeer(BaseModel): - bfd_settings: BFDSettingsForm + bfd_settings: BFDSettingsForm = BFDSettingsForm(bfd_enabled=False) has_custom_policies: bool = False authentication_key: str | None = None multipath_enabled: bool = False @@ -97,8 +97,8 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: geant_sid: str is_tagged: bool = False - v4_bfd_settings: BFDSettingsForm - v6_bfd_settings: BFDSettingsForm + v4_bfd_settings: BFDSettingsForm = BFDSettingsForm(bfd_enabled=False) + v6_bfd_settings: BFDSettingsForm = BFDSettingsForm(bfd_enabled=False) vlan_id: VLAN_ID ipv4_address: IPv4AddressType ipv4_mask: IPV4Netmask @@ -140,11 +140,19 @@ def initialize_subscription( edge_port_fqdn_list = [] edge_port_subscription = EdgePort.from_subscription(edge_port["edge_port"]) sbp_bgp_session_list = [ - BGPSession.new(subscription_id=uuid4(), **session, rtbh_enabled=True, is_multi_hop=True) + BGPSession.new( + subscription_id=uuid4(), + bfd_settings=BFDSettings.new(subscription_id=uuid4(), **(session.pop("bfd_settings"))), + **session, + rtbh_enabled=True, + is_multi_hop=True, + ) for session in binding_port_input["bgp_peers"] ] service_binding_port = ServiceBindingPortInactive.new( subscription_id=uuid4(), + v4_bfd_settings=BFDSettings.new(subscription_id=uuid4(), **(binding_port_input.pop("v4_bfd_settings"))), + v6_bfd_settings=BFDSettings.new(subscription_id=uuid4(), **(binding_port_input.pop("v6_bfd_settings"))), **binding_port_input, bgp_session_list=sbp_bgp_session_list, sbp_type=SBPType.L3, @@ -161,15 +169,12 @@ def initialize_subscription( subscription.description = f"{product_name} service" partner_name = get_partner_by_id(subscription.customer_id).name - - return {"subscription": subscription, "edge_port_fqdn_list": edge_port_fqdn_list, "partner_name": partner_name} @step("[DRY RUN] Deploy service binding port") def provision_sbp_dry( - subscription: dict[str, Any], process_id: UUIDstr, tt_number: str, edge_port_fqdn_list: list[str], - partner_name: str + subscription: dict[str, Any], process_id: UUIDstr, tt_number: str, edge_port_fqdn_list: list[str], partner_name: str ) -> LSOState: """Perform a dry run of deploying Service Binding Ports.""" extra_vars = { @@ -191,8 +196,7 @@ def provision_sbp_dry( @step("[FOR REAL] Deploy service binding port") def provision_sbp_real( - subscription: dict[str, Any], process_id: UUIDstr, tt_number: str, edge_port_fqdn_list: list[str], - partner_name: str + subscription: dict[str, Any], process_id: UUIDstr, tt_number: str, edge_port_fqdn_list: list[str], partner_name: str ) -> LSOState: """Deploy Service Binding Ports.""" extra_vars = { @@ -226,8 +230,7 @@ def check_sbp_functionality(subscription: dict[str, Any], edge_port_fqdn_list: l @step("[DRY RUN] Deploy BGP peers") def deploy_bgp_peers_dry( - subscription: dict[str, Any], edge_port_fqdn_list: list[str], tt_number: str, process_id: UUIDstr, - partner_name: str + subscription: dict[str, Any], edge_port_fqdn_list: list[str], tt_number: str, process_id: UUIDstr, partner_name: str ) -> LSOState: """Perform a dry run of deploying :term:`BGP` peers.""" extra_vars = { @@ -249,8 +252,7 @@ def deploy_bgp_peers_dry( @step("[FOR REAL] Deploy BGP peers") def deploy_bgp_peers_real( - subscription: dict[str, Any], edge_port_fqdn_list: list[str], tt_number: str, process_id: UUIDstr, - partner_name: str + subscription: dict[str, Any], edge_port_fqdn_list: list[str], tt_number: str, process_id: UUIDstr, partner_name: str ) -> LSOState: """Deploy :term:`BGP` peers.""" extra_vars = { -- GitLab