From a8f28ca08b4a9ee0ae099750755fabca05ba0b69 Mon Sep 17 00:00:00 2001 From: Karel van Klink <karel.vanklink@geant.org> Date: Thu, 3 Oct 2024 15:48:47 +0200 Subject: [PATCH] Add SBP reference to NREN Access Port block --- ...da39379a0_update_g\303\251ant_ip_model.py" | 29 +++++++++++++++++++ gso/products/product_blocks/geant_ip.py | 11 ++++++- 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 "gso/migrations/versions/2024-10-03_b3cda39379a0_update_g\303\251ant_ip_model.py" diff --git "a/gso/migrations/versions/2024-10-03_b3cda39379a0_update_g\303\251ant_ip_model.py" "b/gso/migrations/versions/2024-10-03_b3cda39379a0_update_g\303\251ant_ip_model.py" new file mode 100644 index 00000000..4f4cbd6e --- /dev/null +++ "b/gso/migrations/versions/2024-10-03_b3cda39379a0_update_g\303\251ant_ip_model.py" @@ -0,0 +1,29 @@ +"""Update GÉANT IP model. + +Revision ID: b3cda39379a0 +Revises: 289e5334848f +Create Date: 2024-10-03 15:47:51.942674 + +""" +import sqlalchemy as sa +from alembic import op + +# revision identifiers, used by Alembic. +revision = 'b3cda39379a0' +down_revision = '289e5334848f' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + conn = op.get_bind() + 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'))) + """)) + + +def downgrade() -> None: + conn = op.get_bind() + 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')) + """)) diff --git a/gso/products/product_blocks/geant_ip.py b/gso/products/product_blocks/geant_ip.py index 2f7bf5fb..c6f94179 100644 --- a/gso/products/product_blocks/geant_ip.py +++ b/gso/products/product_blocks/geant_ip.py @@ -5,6 +5,11 @@ from orchestrator.types import SubscriptionLifecycle from pydantic import Field from gso.products.product_blocks.edge_port import EdgePortBlock, EdgePortBlockInactive, EdgePortBlockProvisioning +from gso.products.product_blocks.service_binding_port import ( + ServiceBindingPort, + ServiceBindingPortInactive, + ServiceBindingPortProvisioning, +) from gso.utils.shared_enums import APType @@ -15,6 +20,7 @@ class NRENAccessPortInactive( nren_ap_type: APType | None = None geant_ip_ep: EdgePortBlockInactive + geant_ip_sbp: ServiceBindingPortInactive class NRENAccessPortProvisioning(NRENAccessPortInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]): @@ -22,6 +28,7 @@ class NRENAccessPortProvisioning(NRENAccessPortInactive, lifecycle=[Subscription nren_ap_type: APType geant_ip_ep: EdgePortBlockProvisioning + geant_ip_sbp: ServiceBindingPortProvisioning class NRENAccessPort(NRENAccessPortProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]): @@ -29,8 +36,10 @@ class NRENAccessPort(NRENAccessPortProvisioning, lifecycle=[SubscriptionLifecycl #: The type of Access Port nren_ap_type: APType - #: The list of Edge Ports where this service terminates. + #: The Edge Port where this :term:`NREN` Access Port terminates. geant_ip_ep: EdgePortBlock + #: The corresponding :term:`SBP` of this Access Port. + geant_ip_sbp: ServiceBindingPort class GeantIPBlockInactive( -- GitLab