Skip to content
Snippets Groups Projects
Verified Commit cec2f82e authored by Karel van Klink's avatar Karel van Klink :smiley_cat:
Browse files

Update domain models for GÉANT IP and Edge Port

parent b229d0f7
No related branches found
No related tags found
1 merge request!286Add Edge Port, GÉANT IP and IAS products
"""Update GÉANT IP model. """Update GÉANT IP and Edge Port models.
Revision ID: b3cda39379a0 Revision ID: 6dd8a91b8ce0
Revises: 289e5334848f Revises: 289e5334848f
Create Date: 2024-10-03 15:47:51.942674 Create Date: 2024-10-07 14:11:14.041301
""" """
import sqlalchemy as sa import sqlalchemy as sa
from alembic import op from alembic import op
# revision identifiers, used by Alembic. # revision identifiers, used by Alembic.
revision = 'b3cda39379a0' revision = '6dd8a91b8ce0'
down_revision = '289e5334848f' down_revision = '289e5334848f'
branch_labels = None branch_labels = None
depends_on = None depends_on = None
...@@ -18,6 +18,15 @@ depends_on = None ...@@ -18,6 +18,15 @@ depends_on = None
def upgrade() -> None: def upgrade() -> None:
conn = op.get_bind() conn = op.get_bind()
conn.execute(sa.text(""" conn.execute(sa.text("""
DELETE FROM product_block_relations WHERE product_block_relations.in_use_by_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('EdgePortBlock')) AND product_block_relations.depends_on_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('ServiceBindingPort'))
"""))
conn.execute(sa.text("""
DELETE FROM product_block_relations WHERE product_block_relations.in_use_by_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('NRENAccessPort')) AND product_block_relations.depends_on_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('EdgePortBlock'))
"""))
conn.execute(sa.text("""
INSERT INTO product_block_relations (in_use_by_id, depends_on_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('ServiceBindingPort')), (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('EdgePortBlock')))
"""))
conn.execute(sa.text("""
INSERT INTO product_block_relations (in_use_by_id, depends_on_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('NRENAccessPort')), (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('ServiceBindingPort'))) INSERT INTO product_block_relations (in_use_by_id, depends_on_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('NRENAccessPort')), (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('ServiceBindingPort')))
""")) """))
...@@ -25,5 +34,8 @@ INSERT INTO product_block_relations (in_use_by_id, depends_on_id) VALUES ((SELEC ...@@ -25,5 +34,8 @@ INSERT INTO product_block_relations (in_use_by_id, depends_on_id) VALUES ((SELEC
def downgrade() -> None: def downgrade() -> None:
conn = op.get_bind() conn = op.get_bind()
conn.execute(sa.text(""" conn.execute(sa.text("""
DELETE FROM product_block_relations WHERE product_block_relations.in_use_by_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('ServiceBindingPort')) AND product_block_relations.depends_on_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('EdgePortBlock'))
"""))
conn.execute(sa.text("""
DELETE FROM product_block_relations WHERE product_block_relations.in_use_by_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('NRENAccessPort')) AND product_block_relations.depends_on_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('ServiceBindingPort')) DELETE FROM product_block_relations WHERE product_block_relations.in_use_by_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('NRENAccessPort')) AND product_block_relations.depends_on_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('ServiceBindingPort'))
""")) """))
...@@ -6,14 +6,8 @@ domain still managed by GEANT. In other words, an Edge port determines where the ...@@ -6,14 +6,8 @@ domain still managed by GEANT. In other words, an Edge port determines where the
from orchestrator.domain.base import ProductBlockModel from orchestrator.domain.base import ProductBlockModel
from orchestrator.types import SubscriptionLifecycle, strEnum from orchestrator.types import SubscriptionLifecycle, strEnum
from pydantic import Field
from gso.products.product_blocks.router import RouterBlock, RouterBlockInactive, RouterBlockProvisioning from gso.products.product_blocks.router import RouterBlock, RouterBlockInactive, RouterBlockProvisioning
from gso.products.product_blocks.service_binding_port import (
ServiceBindingPort,
ServiceBindingPortInactive,
ServiceBindingPortProvisioning,
)
from gso.utils.types.interfaces import LAGMemberList, PhysicalPortCapacity from gso.utils.types.interfaces import LAGMemberList, PhysicalPortCapacity
...@@ -80,7 +74,6 @@ class EdgePortBlockInactive( ...@@ -80,7 +74,6 @@ class EdgePortBlockInactive(
edge_port_ignore_if_down: bool = False edge_port_ignore_if_down: bool = False
edge_port_geant_ga_id: str | None = None edge_port_geant_ga_id: str | None = None
edge_port_ae_members: LAGMemberList[EdgePortAEMemberBlockInactive] edge_port_ae_members: LAGMemberList[EdgePortAEMemberBlockInactive]
edge_port_sbp_list: list[ServiceBindingPortInactive] = Field(default_factory=list)
class EdgePortBlockProvisioning(EdgePortBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]): class EdgePortBlockProvisioning(EdgePortBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
...@@ -98,7 +91,6 @@ class EdgePortBlockProvisioning(EdgePortBlockInactive, lifecycle=[SubscriptionLi ...@@ -98,7 +91,6 @@ class EdgePortBlockProvisioning(EdgePortBlockInactive, lifecycle=[SubscriptionLi
edge_port_ignore_if_down: bool = False edge_port_ignore_if_down: bool = False
edge_port_geant_ga_id: str | None = None edge_port_geant_ga_id: str | None = None
edge_port_ae_members: LAGMemberList[EdgePortAEMemberBlockProvisioning] # type: ignore[assignment] edge_port_ae_members: LAGMemberList[EdgePortAEMemberBlockProvisioning] # type: ignore[assignment]
edge_port_sbp_list: list[ServiceBindingPortProvisioning] # type: ignore[assignment]
class EdgePortBlock(EdgePortBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]): class EdgePortBlock(EdgePortBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
...@@ -128,5 +120,3 @@ class EdgePortBlock(EdgePortBlockProvisioning, lifecycle=[SubscriptionLifecycle. ...@@ -128,5 +120,3 @@ class EdgePortBlock(EdgePortBlockProvisioning, lifecycle=[SubscriptionLifecycle.
edge_port_geant_ga_id: str | None = None edge_port_geant_ga_id: str | None = None
#: A list of :term:`LAG` members associated with this edge port. #: A list of :term:`LAG` members associated with this edge port.
edge_port_ae_members: LAGMemberList[EdgePortAEMemberBlock] # type: ignore[assignment] edge_port_ae_members: LAGMemberList[EdgePortAEMemberBlock] # type: ignore[assignment]
#: A list of Service Binding Ports associated with this Edge Port
edge_port_sbp_list: list[ServiceBindingPort] # type: ignore[assignment]
...@@ -4,7 +4,6 @@ from orchestrator.domain.base import ProductBlockModel ...@@ -4,7 +4,6 @@ from orchestrator.domain.base import ProductBlockModel
from orchestrator.types import SubscriptionLifecycle from orchestrator.types import SubscriptionLifecycle
from pydantic import Field from pydantic import Field
from gso.products.product_blocks.edge_port import EdgePortBlock, EdgePortBlockInactive, EdgePortBlockProvisioning
from gso.products.product_blocks.service_binding_port import ( from gso.products.product_blocks.service_binding_port import (
ServiceBindingPort, ServiceBindingPort,
ServiceBindingPortInactive, ServiceBindingPortInactive,
...@@ -19,7 +18,6 @@ class NRENAccessPortInactive( ...@@ -19,7 +18,6 @@ class NRENAccessPortInactive(
"""An access port for an R&E :term:`NREN` service that is inactive.""" """An access port for an R&E :term:`NREN` service that is inactive."""
nren_ap_type: APType | None = None nren_ap_type: APType | None = None
geant_ip_ep: EdgePortBlockInactive
geant_ip_sbp: ServiceBindingPortInactive geant_ip_sbp: ServiceBindingPortInactive
...@@ -27,7 +25,6 @@ class NRENAccessPortProvisioning(NRENAccessPortInactive, lifecycle=[Subscription ...@@ -27,7 +25,6 @@ class NRENAccessPortProvisioning(NRENAccessPortInactive, lifecycle=[Subscription
"""An access port for an R&E :term:`NREN` service that is being provisioned.""" """An access port for an R&E :term:`NREN` service that is being provisioned."""
nren_ap_type: APType nren_ap_type: APType
geant_ip_ep: EdgePortBlockProvisioning
geant_ip_sbp: ServiceBindingPortProvisioning geant_ip_sbp: ServiceBindingPortProvisioning
...@@ -36,8 +33,6 @@ class NRENAccessPort(NRENAccessPortProvisioning, lifecycle=[SubscriptionLifecycl ...@@ -36,8 +33,6 @@ class NRENAccessPort(NRENAccessPortProvisioning, lifecycle=[SubscriptionLifecycl
#: The type of Access Port #: The type of Access Port
nren_ap_type: APType nren_ap_type: APType
#: The Edge Port where this :term:`NREN` Access Port terminates.
geant_ip_ep: EdgePortBlock
#: The corresponding :term:`SBP` of this Access Port. #: The corresponding :term:`SBP` of this Access Port.
geant_ip_sbp: ServiceBindingPort geant_ip_sbp: ServiceBindingPort
......
...@@ -10,6 +10,7 @@ from orchestrator.types import SubscriptionLifecycle ...@@ -10,6 +10,7 @@ from orchestrator.types import SubscriptionLifecycle
from pydantic import Field from pydantic import Field
from gso.products.product_blocks.bgp_session import BGPSession, BGPSessionInactive, BGPSessionProvisioning from gso.products.product_blocks.bgp_session import BGPSession, BGPSessionInactive, BGPSessionProvisioning
from gso.products.product_blocks.edge_port import EdgePortBlock, EdgePortBlockInactive, EdgePortBlockProvisioning
from gso.utils.shared_enums import SBPType from gso.utils.shared_enums import SBPType
from gso.utils.types.ip_address import IPv4AddressType, IPv6AddressType from gso.utils.types.ip_address import IPv4AddressType, IPv6AddressType
...@@ -29,6 +30,7 @@ class ServiceBindingPortInactive( ...@@ -29,6 +30,7 @@ class ServiceBindingPortInactive(
custom_firewall_filters: bool | None = None custom_firewall_filters: bool | None = None
geant_sid: str | None = None geant_sid: str | None = None
sbp_bgp_session_list: list[BGPSessionInactive] = Field(default_factory=list) sbp_bgp_session_list: list[BGPSessionInactive] = Field(default_factory=list)
edge_port: EdgePortBlockInactive | None = None
class ServiceBindingPortProvisioning(ServiceBindingPortInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]): class ServiceBindingPortProvisioning(ServiceBindingPortInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
...@@ -42,6 +44,7 @@ class ServiceBindingPortProvisioning(ServiceBindingPortInactive, lifecycle=[Subs ...@@ -42,6 +44,7 @@ class ServiceBindingPortProvisioning(ServiceBindingPortInactive, lifecycle=[Subs
custom_firewall_filters: bool custom_firewall_filters: bool
geant_sid: str geant_sid: str
sbp_bgp_session_list: list[BGPSessionProvisioning] # type: ignore[assignment] sbp_bgp_session_list: list[BGPSessionProvisioning] # type: ignore[assignment]
edge_port: EdgePortBlockProvisioning # type: ignore[assignment]
class ServiceBindingPort(ServiceBindingPortProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]): class ServiceBindingPort(ServiceBindingPortProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
...@@ -63,3 +66,5 @@ class ServiceBindingPort(ServiceBindingPortProvisioning, lifecycle=[Subscription ...@@ -63,3 +66,5 @@ class ServiceBindingPort(ServiceBindingPortProvisioning, lifecycle=[Subscription
geant_sid: str geant_sid: str
#: The :term:`BGP` sessions associated with this service binding port. #: The :term:`BGP` sessions associated with this service binding port.
sbp_bgp_session_list: list[BGPSession] # type: ignore[assignment] sbp_bgp_session_list: list[BGPSession] # type: ignore[assignment]
#: The Edge Port on which this :term:`SBP` resides.
edge_port: EdgePortBlock # type: ignore[assignment]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment