Skip to content
Snippets Groups Projects
Verified Commit 039da651 authored by Neda Moeini's avatar Neda Moeini Committed by Karel van Klink
Browse files

Update modify NrenL3CoreServic WF after BFD Settings change.

parent f58cbab2
Branches
Tags
1 merge request!298Add BFD configuration to Service binding ports
...@@ -14,7 +14,7 @@ from pydantic import AfterValidator, BaseModel, ConfigDict, Field, computed_fiel ...@@ -14,7 +14,7 @@ from pydantic import AfterValidator, BaseModel, ConfigDict, Field, computed_fiel
from pydantic_forms.types import State from pydantic_forms.types import State
from pydantic_forms.validators import Divider, Label from pydantic_forms.validators import Divider, Label
from gso.products.product_blocks.bgp_session import BGPSession, IPFamily from gso.products.product_blocks.bgp_session import BGPSession, IPFamily, IPTypes
from gso.products.product_blocks.nren_l3_core_service import NRENAccessPort from gso.products.product_blocks.nren_l3_core_service import NRENAccessPort
from gso.products.product_blocks.service_binding_port import BFDSettings, ServiceBindingPort from gso.products.product_blocks.service_binding_port import BFDSettings, ServiceBindingPort
from gso.products.product_types.edge_port import EdgePort from gso.products.product_types.edge_port import EdgePort
...@@ -61,11 +61,12 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator: ...@@ -61,11 +61,12 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
class BFDInputModel(BaseModel): class BFDInputModel(BaseModel):
bfd_enabled: bool = False 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 bfd_multiplier: int | None = None
class BaseBGPPeer(BaseModel): class BaseBGPPeer(BaseModel):
bfd_settings: BFDInputModel bfd_enabled: bool = False
has_custom_policies: bool = False has_custom_policies: bool = False
authentication_key: str | None authentication_key: str | None
multipath_enabled: bool = False multipath_enabled: bool = False
...@@ -75,6 +76,7 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator: ...@@ -75,6 +76,7 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
class IPv4BGPPeer(BaseBGPPeer): class IPv4BGPPeer(BaseBGPPeer):
peer_address: IPv4AddressType peer_address: IPv4AddressType
add_v4_multicast: bool = Field(default=False, exclude=True) add_v4_multicast: bool = Field(default=False, exclude=True)
ip_type: IPTypes = IPTypes.IPV4
@computed_field # type: ignore[misc] @computed_field # type: ignore[misc]
@property @property
...@@ -84,6 +86,7 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator: ...@@ -84,6 +86,7 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
class IPv6BGPPeer(BaseBGPPeer): class IPv6BGPPeer(BaseBGPPeer):
peer_address: IPv6AddressType peer_address: IPv6AddressType
add_v6_multicast: bool = Field(default=False, exclude=True) add_v6_multicast: bool = Field(default=False, exclude=True)
ip_type: IPTypes = IPTypes.IPV6
@computed_field # type: ignore[misc] @computed_field # type: ignore[misc]
@property @property
...@@ -150,12 +153,14 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator: ...@@ -150,12 +153,14 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
v4_bfd_settings: BFDInputModel = BFDInputModel( v4_bfd_settings: BFDInputModel = BFDInputModel(
bfd_enabled=current_sbp.v4_bfd_settings.bfd_enabled, bfd_enabled=current_sbp.v4_bfd_settings.bfd_enabled,
bfd_multiplier=current_sbp.v4_bfd_settings.bfd_multiplier, bfd_multiplier=current_sbp.v4_bfd_settings.bfd_multiplier,
bfd_interval=current_sbp.v4_bfd_settings.bfd_interval, bfd_interval_rx=current_sbp.v4_bfd_settings.bfd_interval_rx,
bfd_interval_tx=current_sbp.v4_bfd_settings.bfd_interval_tx,
) )
v6_bfd_settings: BFDInputModel = BFDInputModel( v6_bfd_settings: BFDInputModel = BFDInputModel(
bfd_enabled=current_sbp.v6_bfd_settings.bfd_enabled, bfd_enabled=current_sbp.v6_bfd_settings.bfd_enabled,
bfd_multiplier=current_sbp.v6_bfd_settings.bfd_multiplier, bfd_multiplier=current_sbp.v6_bfd_settings.bfd_multiplier,
bfd_interval=current_sbp.v6_bfd_settings.bfd_interval, bfd_interval_rx=current_sbp.v6_bfd_settings.bfd_interval_rx,
bfd_interval_tx=current_sbp.v6_bfd_settings.bfd_interval_tx,
) )
divider: Divider = Field(None, exclude=True) divider: Divider = Field(None, exclude=True)
v4_bgp_peer: IPv4BGPPeer = IPv4BGPPeer( v4_bgp_peer: IPv4BGPPeer = IPv4BGPPeer(
...@@ -249,18 +254,12 @@ def modify_existing_sbp_blocks(subscription: NRENL3CoreService, modified_sbp_lis ...@@ -249,18 +254,12 @@ def modify_existing_sbp_blocks(subscription: NRENL3CoreService, modified_sbp_lis
) )
v4_peer = next(peer for peer in current_sbp.bgp_session_list if IPFamily.V4UNICAST in peer.families) v4_peer = next(peer for peer in current_sbp.bgp_session_list if IPFamily.V4UNICAST in peer.families)
v4_peer_bfd_settings = modified_sbp_data["v4_bgp_peer"].pop("bfd_settings")
for attribute in v4_peer_bfd_settings:
setattr(v4_peer.bfd_settings, attribute, v4_peer_bfd_settings[attribute])
for attribute in modified_sbp_data["v4_bgp_peer"]: for attribute in modified_sbp_data["v4_bgp_peer"]:
setattr(v4_peer, attribute, modified_sbp_data["v4_bgp_peer"][attribute]) setattr(v4_peer, attribute, modified_sbp_data["v4_bgp_peer"][attribute])
for attribute in modified_sbp_data["v4_bfd_settings"]: for attribute in modified_sbp_data["v4_bfd_settings"]:
setattr(current_sbp.v4_bfd_settings, attribute, modified_sbp_data["v4_bfd_settings"][attribute]) setattr(current_sbp.v4_bfd_settings, attribute, modified_sbp_data["v4_bfd_settings"][attribute])
v6_peer = next(peer for peer in current_sbp.bgp_session_list if IPFamily.V6UNICAST in peer.families) v6_peer = next(peer for peer in current_sbp.bgp_session_list if IPFamily.V6UNICAST in peer.families)
v6_peer_bfd_settings = modified_sbp_data["v6_bgp_peer"].pop("bfd_settings")
for attribute in v6_peer_bfd_settings:
setattr(v6_peer.bfd_settings, attribute, v6_peer_bfd_settings[attribute])
for attribute in modified_sbp_data["v6_bgp_peer"]: for attribute in modified_sbp_data["v6_bgp_peer"]:
setattr(v6_peer, attribute, modified_sbp_data["v6_bgp_peer"][attribute]) setattr(v6_peer, attribute, modified_sbp_data["v6_bgp_peer"][attribute])
for attribute in modified_sbp_data["v6_bfd_settings"]: for attribute in modified_sbp_data["v6_bfd_settings"]:
...@@ -283,14 +282,10 @@ def create_new_sbp_blocks(subscription: NRENL3CoreService, added_service_binding ...@@ -283,14 +282,10 @@ def create_new_sbp_blocks(subscription: NRENL3CoreService, added_service_binding
"""Add new two :term:`SBP` to the :term:`NREN` L3 Core Service subscription.""" """Add new two :term:`SBP` to the :term:`NREN` L3 Core Service subscription."""
for sbp_input in added_service_binding_ports: for sbp_input in added_service_binding_ports:
edge_port = EdgePort.from_subscription(sbp_input["edge_port_id"]) edge_port = EdgePort.from_subscription(sbp_input["edge_port_id"])
bgp_session_list = [] bgp_session_list = [
for session in sbp_input["bgp_peers"]: BGPSession.new(subscription_id=uuid4(), **session, rtbh_enabled=True, is_multi_hop=True)
bfd_settings = BFDSettings.new(subscription_id=uuid4(), **session.pop("bfd_settings")) for session in sbp_input["bgp_peers"]
bgp_session_list.append( ]
BGPSession.new(
subscription_id=uuid4(), **session, bfd_settings=bfd_settings, rtbh_enabled=True, is_multi_hop=True
)
)
v4_bfd_settings = BFDSettings.new(subscription_id=uuid4(), **sbp_input.pop("v4_bfd_settings")) v4_bfd_settings = BFDSettings.new(subscription_id=uuid4(), **sbp_input.pop("v4_bfd_settings"))
v6_bfd_settings = BFDSettings.new(subscription_id=uuid4(), **sbp_input.pop("v6_bfd_settings")) v6_bfd_settings = BFDSettings.new(subscription_id=uuid4(), **sbp_input.pop("v6_bfd_settings"))
service_binding_port = ServiceBindingPort.new( service_binding_port = ServiceBindingPort.new(
......
...@@ -7,7 +7,7 @@ from orchestrator.domain import SubscriptionModel ...@@ -7,7 +7,7 @@ from orchestrator.domain import SubscriptionModel
from orchestrator.types import SubscriptionLifecycle, UUIDstr from orchestrator.types import SubscriptionLifecycle, UUIDstr
from gso.products import ProductName from gso.products import ProductName
from gso.products.product_blocks.bgp_session import BGPSession, IPFamily from gso.products.product_blocks.bgp_session import BGPSession, IPFamily, IPTypes
from gso.products.product_blocks.nren_l3_core_service import NRENAccessPort from gso.products.product_blocks.nren_l3_core_service import NRENAccessPort
from gso.products.product_blocks.service_binding_port import BFDSettings, ServiceBindingPort from gso.products.product_blocks.service_binding_port import BFDSettings, ServiceBindingPort
from gso.products.product_types.edge_port import EdgePort from gso.products.product_types.edge_port import EdgePort
...@@ -55,6 +55,7 @@ def bgp_session_subscription_factory(faker): ...@@ -55,6 +55,7 @@ def bgp_session_subscription_factory(faker):
is_passive: bool | None = False, is_passive: bool | None = False,
rtbh_enabled: bool | None = False, rtbh_enabled: bool | None = False,
bfd_enabled: bool | None = False, bfd_enabled: bool | None = False,
ip_type: IPTypes | None = None,
): ):
return BGPSession.new( return BGPSession.new(
subscription_id=uuid4(), subscription_id=uuid4(),
...@@ -68,6 +69,7 @@ def bgp_session_subscription_factory(faker): ...@@ -68,6 +69,7 @@ def bgp_session_subscription_factory(faker):
is_multi_hop=is_multi_hop, is_multi_hop=is_multi_hop,
rtbh_enabled=rtbh_enabled, rtbh_enabled=rtbh_enabled,
is_passive=is_passive, is_passive=is_passive,
ip_type=ip_type if ip_type else faker.random_element(elements=[IPTypes.IPV4, IPTypes.IPV6]),
) )
return create_bgp_session return create_bgp_session
......
...@@ -77,12 +77,12 @@ def test_modify_nren_l3_core_service_add_new_edge_port_success( ...@@ -77,12 +77,12 @@ def test_modify_nren_l3_core_service_add_new_edge_port_success(
"v4_bgp_peer": { "v4_bgp_peer": {
"authentication_key": faker.password(), "authentication_key": faker.password(),
"peer_address": faker.ipv4(), "peer_address": faker.ipv4(),
"bfd_settings": {"bfd_enabled": False}, "bfd_enabled": False,
}, },
"v6_bgp_peer": { "v6_bgp_peer": {
"authentication_key": faker.password(), "authentication_key": faker.password(),
"peer_address": faker.ipv6(), "peer_address": faker.ipv6(),
"bfd_settings": {"bfd_enabled": False}, "bfd_enabled": False,
}, },
"v4_bfd_settings": {"bfd_enabled": False}, "v4_bfd_settings": {"bfd_enabled": False},
"v6_bfd_settings": {"bfd_enabled": False}, "v6_bfd_settings": {"bfd_enabled": False},
...@@ -108,20 +108,18 @@ def sbp_input_form_data(faker): ...@@ -108,20 +108,18 @@ def sbp_input_form_data(faker):
"custom_firewall_filters": True, "custom_firewall_filters": True,
"v4_bfd_settings": { "v4_bfd_settings": {
"bfd_enabled": True, "bfd_enabled": True,
"bfd_interval": faker.pyint(), "bfd_interval_rx": faker.pyint(),
"bfd_interval_tx": faker.pyint(),
"bfd_multiplier": faker.pyint(), "bfd_multiplier": faker.pyint(),
}, },
"v6_bfd_settings": { "v6_bfd_settings": {
"bfd_enabled": True, "bfd_enabled": True,
"bfd_interval": faker.pyint(), "bfd_interval_rx": faker.pyint(),
"bfd_interval_tx": faker.pyint(),
"bfd_multiplier": faker.pyint(), "bfd_multiplier": faker.pyint(),
}, },
"v4_bgp_peer": { "v4_bgp_peer": {
"bfd_settings": { "bfd_enabled": True,
"bfd_enabled": True,
"bfd_interval": faker.pyint(),
"bfd_multiplier": faker.pyint(),
},
"has_custom_policies": True, "has_custom_policies": True,
"authentication_key": faker.password(), "authentication_key": faker.password(),
"multipath_enabled": True, "multipath_enabled": True,
...@@ -131,11 +129,7 @@ def sbp_input_form_data(faker): ...@@ -131,11 +129,7 @@ def sbp_input_form_data(faker):
"add_v4_multicast": True, "add_v4_multicast": True,
}, },
"v6_bgp_peer": { "v6_bgp_peer": {
"bfd_settings": { "bfd_enabled": True,
"bfd_enabled": True,
"bfd_interval": faker.pyint(),
"bfd_multiplier": faker.pyint(),
},
"has_custom_policies": True, "has_custom_policies": True,
"authentication_key": faker.password(), "authentication_key": faker.password(),
"multipath_enabled": True, "multipath_enabled": True,
...@@ -194,16 +188,8 @@ def test_modify_nren_l3_core_service_modify_edge_port_success( ...@@ -194,16 +188,8 @@ def test_modify_nren_l3_core_service_modify_edge_port_success(
) )
assert ( assert (
subscription.nren_l3_core_service.nren_ap_list[i].sbp.bgp_session_list[0].bfd_settings.bfd_enabled subscription.nren_l3_core_service.nren_ap_list[i].sbp.bgp_session_list[0].bfd_enabled
== new_sbp_data[i]["v4_bgp_peer"]["bfd_settings"]["bfd_enabled"] == new_sbp_data[i]["v4_bgp_peer"]["bfd_enabled"]
)
assert (
subscription.nren_l3_core_service.nren_ap_list[i].sbp.bgp_session_list[0].bfd_settings.bfd_interval
== new_sbp_data[i]["v4_bgp_peer"]["bfd_settings"]["bfd_interval"]
)
assert (
subscription.nren_l3_core_service.nren_ap_list[i].sbp.bgp_session_list[0].bfd_settings.bfd_multiplier
== new_sbp_data[i]["v4_bgp_peer"]["bfd_settings"]["bfd_multiplier"]
) )
assert ( assert (
subscription.nren_l3_core_service.nren_ap_list[i].sbp.bgp_session_list[0].has_custom_policies subscription.nren_l3_core_service.nren_ap_list[i].sbp.bgp_session_list[0].has_custom_policies
...@@ -238,16 +224,8 @@ def test_modify_nren_l3_core_service_modify_edge_port_success( ...@@ -238,16 +224,8 @@ def test_modify_nren_l3_core_service_modify_edge_port_success(
) )
assert ( assert (
subscription.nren_l3_core_service.nren_ap_list[i].sbp.bgp_session_list[1].bfd_settings.bfd_enabled subscription.nren_l3_core_service.nren_ap_list[i].sbp.bgp_session_list[1].bfd_enabled
== new_sbp_data[i]["v6_bgp_peer"]["bfd_settings"]["bfd_enabled"] == new_sbp_data[i]["v6_bgp_peer"]["bfd_enabled"]
)
assert (
subscription.nren_l3_core_service.nren_ap_list[i].sbp.bgp_session_list[1].bfd_settings.bfd_interval
== new_sbp_data[i]["v6_bgp_peer"]["bfd_settings"]["bfd_interval"]
)
assert (
subscription.nren_l3_core_service.nren_ap_list[i].sbp.bgp_session_list[1].bfd_settings.bfd_multiplier
== new_sbp_data[i]["v6_bgp_peer"]["bfd_settings"]["bfd_multiplier"]
) )
assert ( assert (
subscription.nren_l3_core_service.nren_ap_list[i].sbp.bgp_session_list[1].has_custom_policies subscription.nren_l3_core_service.nren_ap_list[i].sbp.bgp_session_list[1].has_custom_policies
...@@ -285,8 +263,12 @@ def test_modify_nren_l3_core_service_modify_edge_port_success( ...@@ -285,8 +263,12 @@ def test_modify_nren_l3_core_service_modify_edge_port_success(
== new_sbp_data[i]["v4_bfd_settings"]["bfd_enabled"] == new_sbp_data[i]["v4_bfd_settings"]["bfd_enabled"]
) )
assert ( assert (
subscription.nren_l3_core_service.nren_ap_list[i].sbp.v4_bfd_settings.bfd_interval subscription.nren_l3_core_service.nren_ap_list[i].sbp.v4_bfd_settings.bfd_interval_rx
== new_sbp_data[i]["v4_bfd_settings"]["bfd_interval"] == new_sbp_data[i]["v4_bfd_settings"]["bfd_interval_rx"]
)
assert (
subscription.nren_l3_core_service.nren_ap_list[i].sbp.v4_bfd_settings.bfd_interval_tx
== new_sbp_data[i]["v4_bfd_settings"]["bfd_interval_tx"]
) )
assert ( assert (
subscription.nren_l3_core_service.nren_ap_list[i].sbp.v4_bfd_settings.bfd_multiplier subscription.nren_l3_core_service.nren_ap_list[i].sbp.v4_bfd_settings.bfd_multiplier
...@@ -297,8 +279,12 @@ def test_modify_nren_l3_core_service_modify_edge_port_success( ...@@ -297,8 +279,12 @@ def test_modify_nren_l3_core_service_modify_edge_port_success(
== new_sbp_data[i]["v6_bfd_settings"]["bfd_enabled"] == new_sbp_data[i]["v6_bfd_settings"]["bfd_enabled"]
) )
assert ( assert (
subscription.nren_l3_core_service.nren_ap_list[i].sbp.v6_bfd_settings.bfd_interval subscription.nren_l3_core_service.nren_ap_list[i].sbp.v6_bfd_settings.bfd_interval_rx
== new_sbp_data[i]["v6_bfd_settings"]["bfd_interval"] == new_sbp_data[i]["v6_bfd_settings"]["bfd_interval_rx"]
)
assert (
subscription.nren_l3_core_service.nren_ap_list[i].sbp.v6_bfd_settings.bfd_interval_tx
== new_sbp_data[i]["v6_bfd_settings"]["bfd_interval_tx"]
) )
assert ( assert (
subscription.nren_l3_core_service.nren_ap_list[i].sbp.v6_bfd_settings.bfd_multiplier subscription.nren_l3_core_service.nren_ap_list[i].sbp.v6_bfd_settings.bfd_multiplier
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment