From 052717b48319cdcde2f10a9dc07419c8d325ed26 Mon Sep 17 00:00:00 2001 From: Aleksandr Kurbatov <ak@geant.org> Date: Thu, 14 Nov 2024 12:39:02 +0000 Subject: [PATCH] BFD settings changes - BFD model should have separate interval setting for RX and TX, hence `bfd_interval` -> `bfd_interval_rx`, `bfd_interval_tx`; - BFD model is only relevant to the SBP interface (with all attributes); - BGP session will only have a simple flag `bfd_enabled` with default `False`; - BFD class models moved from `bgp_session.py` to `service_binding_port.py`. --- gso/products/product_blocks/bgp_session.py | 34 ++---------------- .../product_blocks/service_binding_port.py | 35 +++++++++++++++++-- .../create_nren_l3_core_service.py | 8 ++--- 3 files changed, 39 insertions(+), 38 deletions(-) diff --git a/gso/products/product_blocks/bgp_session.py b/gso/products/product_blocks/bgp_session.py index d6ef9a33..44ab45af 100644 --- a/gso/products/product_blocks/bgp_session.py +++ b/gso/products/product_blocks/bgp_session.py @@ -19,34 +19,6 @@ class IPFamily(strEnum): V6MULTICAST = "v6multicast" -class BFDSettingsInactive( - ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="BFDSettings" -): - """Settings for :term:`BFD`, see :class:`BFDSettings`.""" - - bfd_enabled: bool = False - bfd_interval: int | None = None - bfd_multiplier: int | None = None - - -class BFDSettingsProvisioning(BFDSettingsInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]): - """Settings for :term:`BFD`, see :class:`BFDSettings`.""" - - bfd_enabled: bool - bfd_interval: int | None - bfd_multiplier: int | None - - -class BFDSettings(BFDSettingsProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]): - """A set of settings for :term:`BFD`.""" - - #: Whether :term:`BFD` is enabled. - bfd_enabled: bool - #: The :term:`BFD` interval, if enabled. - bfd_interval: int | None - #: The :term:`BFD` multiplier, if enabled. - bfd_multiplier: int | None - class BGPSessionInactive(ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="BGPSession"): """A :term:`BGP` session that is currently inactive. See :class:`BGPSession`.""" @@ -60,7 +32,7 @@ class BGPSessionInactive(ProductBlockModel, lifecycle=[SubscriptionLifecycle.INI is_multi_hop: bool = False is_passive: bool = False rtbh_enabled: bool = False - bfd_settings: BFDSettingsInactive + bfd_enabled: bool = False class BGPSessionProvisioning(BGPSessionInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]): @@ -75,7 +47,7 @@ class BGPSessionProvisioning(BGPSessionInactive, lifecycle=[SubscriptionLifecycl is_multi_hop: bool is_passive: bool rtbh_enabled: bool - bfd_settings: BFDSettingsProvisioning + bfd_enabled: bool class BGPSession(BGPSessionProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]): @@ -100,4 +72,4 @@ class BGPSession(BGPSessionProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE #: Whether Remote Triggered Blackhole is enabled rtbh_enabled: bool #: Settings for :term:`BFD`. - bfd_settings: BFDSettings + bfd_enabled: bool diff --git a/gso/products/product_blocks/service_binding_port.py b/gso/products/product_blocks/service_binding_port.py index 92fb14e2..9ded332c 100644 --- a/gso/products/product_blocks/service_binding_port.py +++ b/gso/products/product_blocks/service_binding_port.py @@ -8,9 +8,6 @@ from orchestrator.types import SubscriptionLifecycle from pydantic import Field from gso.products.product_blocks.bgp_session import ( - BFDSettings, - BFDSettingsInactive, - BFDSettingsProvisioning, BGPSession, BGPSessionInactive, BGPSessionProvisioning, @@ -20,6 +17,38 @@ from gso.utils.shared_enums import SBPType from gso.utils.types.ip_address import IPv4AddressType, IPV4Netmask, IPv6AddressType, IPV6Netmask from gso.utils.types.virtual_identifiers import VLAN_ID +class BFDSettingsInactive( + ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="BFDSettings" +): + """Settings for :term:`BFD`, see :class:`BFDSettings`.""" + + bfd_enabled: bool = False + bfd_interval_rx: int | None = None + bfd_interval_tx: int | None = None + bfd_multiplier: int | None = None + + +class BFDSettingsProvisioning(BFDSettingsInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]): + """Settings for :term:`BFD`, see :class:`BFDSettings`.""" + + bfd_enabled: bool + bfd_interval_rx: int | None = None + bfd_interval_tx: int | None = None + bfd_multiplier: int | None + + +class BFDSettings(BFDSettingsProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]): + """A set of settings for :term:`BFD`.""" + + #: Whether :term:`BFD` is enabled. + bfd_enabled: bool + #: The :term:`BFD` interval RX, if enabled. + bfd_interval_rx: int | None + #: The :term:`BFD` interval TX, if enabled. + bfd_interval_tx: int | None + #: The :term:`BFD` multiplier, if enabled. + bfd_multiplier: int | None + class ServiceBindingPortInactive( ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="ServiceBindingPort" 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 7639ff28..89b3eb98 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 @@ -57,11 +57,12 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: class BFDSettingsForm(BaseModel): bfd_enabled: bool = False - bfd_interval: int | None = None + bfd_interval_rx: int | None = None + bfd_interval_tx: int | None = None bfd_multiplier: int | None = None class BaseBGPPeer(BaseModel): - bfd_settings: BFDSettingsForm = BFDSettingsForm(bfd_enabled=False) + bfd_enabled: bool = False has_custom_policies: bool = False authentication_key: str | None = None multipath_enabled: bool = False @@ -139,11 +140,10 @@ def initialize_subscription( """Take all user inputs and use them to populate the subscription model.""" edge_port_fqdn_list = [] edge_port_subscription = EdgePort.from_subscription(edge_port["edge_port"]) + print(binding_port_input["bgp_peers"]) sbp_bgp_session_list = [ BGPSession.new( subscription_id=uuid4(), - bfd_settings=BFDSettings.new(subscription_id=uuid4(), **(session.pop("bfd_settings"))), - **session, rtbh_enabled=True, is_multi_hop=True, ) -- GitLab