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 0000000000000000000000000000000000000000..4f4cbd6eb54170979a25ec24470943f02e6a6b0a --- /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 2f7bf5fbe4567e68ec1fb884ed02d955a79f04e8..c6f941795a29c2edc3c069db46c405af1ecf57a5 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(