Skip to content
Snippets Groups Projects
Commit 891630f0 authored by Neda Moeini's avatar Neda Moeini
Browse files

Update VRF product to remove imported VRF and also add some new fields to that.

parent 65b9fe55
No related branches found
No related tags found
1 merge request!314Feature/vrf
This commit is part of merge request !314. Comments created here will be created in the context of that merge request.
"""Add VRF and ImportedVRF products..
"""Add VRF product..
Revision ID: 4b5bbefb296f
Revision ID: 6103f83731bb
Revises: 0e7e7d749617
Create Date: 2024-11-26 10:28:41.081655
Create Date: 2024-11-27 14:44:07.029634
"""
import sqlalchemy as sa
from alembic import op
# revision identifiers, used by Alembic.
revision = '4b5bbefb296f'
revision = '6103f83731bb'
down_revision = '0e7e7d749617'
branch_labels = None
depends_on = None
......@@ -18,25 +18,25 @@ depends_on = None
def upgrade() -> None:
conn = op.get_bind()
conn.execute(sa.text("""
INSERT INTO products (name, description, product_type, tag, status) VALUES ('VRF', 'Virtual Routing and Forwarding product', 'VRF', 'VRF', 'active') RETURNING products.product_id
INSERT INTO products (name, description, product_type, tag, status) VALUES ('VRF', 'Virtual Routing Forwarding', 'VRF', 'VRF', 'active') RETURNING products.product_id
"""))
conn.execute(sa.text("""
INSERT INTO products (name, description, product_type, tag, status) VALUES ('Imported VRF', 'Imported Virtual Routing and Forwarding products', 'ImportedVRF', 'IMP_VRF', 'active') RETURNING products.product_id
INSERT INTO product_blocks (name, description, tag, status) VALUES ('VRFBlock', 'VRF block', 'VRF_BLOCK', 'active') RETURNING product_blocks.product_block_id
"""))
conn.execute(sa.text("""
INSERT INTO product_blocks (name, description, tag, status) VALUES ('VRFBlock', 'Virtual Routing and Forwarding product block', 'VRF_BLOCK', 'active') RETURNING product_blocks.product_block_id
INSERT INTO resource_types (resource_type, description) VALUES ('vrf_name', 'Unique name identifying this VRF.') RETURNING resource_types.resource_type_id
"""))
conn.execute(sa.text("""
INSERT INTO resource_types (resource_type, description) VALUES ('vrf_name', 'Unique name identifying this VRF') RETURNING resource_types.resource_type_id
INSERT INTO resource_types (resource_type, description) VALUES ('vrf_as_number', 'AS number of the VRF') RETURNING resource_types.resource_type_id
"""))
conn.execute(sa.text("""
INSERT INTO resource_types (resource_type, description) VALUES ('route_distinguisher', 'Route Distinguisher (RD) ensuring unique route identification within this VRF') RETURNING resource_types.resource_type_id
INSERT INTO resource_types (resource_type, description) VALUES ('route_distinguisher', 'Route Distinguisher (RD) ensuring unique route identification within this VRF.') RETURNING resource_types.resource_type_id
"""))
conn.execute(sa.text("""
INSERT INTO resource_types (resource_type, description) VALUES ('route_target', 'Route Target (RT) defining routing policies for importing/exporting routes') RETURNING resource_types.resource_type_id
INSERT INTO resource_types (resource_type, description) VALUES ('route_target', 'Route Target (RT) defining routing policies for importing/exporting routes.') RETURNING resource_types.resource_type_id
"""))
conn.execute(sa.text("""
INSERT INTO product_product_blocks (product_id, product_block_id) VALUES ((SELECT products.product_id FROM products WHERE products.name IN ('VRF')), (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('VRFBlock'))), ((SELECT products.product_id FROM products WHERE products.name IN ('Imported VRF')), (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('VRFBlock')))
INSERT INTO product_product_blocks (product_id, product_block_id) VALUES ((SELECT products.product_id FROM products WHERE products.name IN ('VRF')), (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('VRFBlock')))
"""))
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 ('VRFBlock')), (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('RouterBlock')))
......@@ -50,6 +50,9 @@ INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VA
conn.execute(sa.text("""
INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('VRFBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('route_target')))
"""))
conn.execute(sa.text("""
INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('VRFBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('vrf_as_number')))
"""))
def downgrade() -> None:
......@@ -73,13 +76,19 @@ DELETE FROM product_block_resource_types WHERE product_block_resource_types.prod
DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('VRFBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('route_target'))
"""))
conn.execute(sa.text("""
DELETE FROM subscription_instance_values WHERE subscription_instance_values.resource_type_id IN (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('vrf_name', 'route_distinguisher', 'route_target'))
DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('VRFBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('vrf_as_number'))
"""))
conn.execute(sa.text("""
DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('VRFBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('vrf_as_number'))
"""))
conn.execute(sa.text("""
DELETE FROM subscription_instance_values WHERE subscription_instance_values.resource_type_id IN (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('vrf_name', 'vrf_as_number', 'route_distinguisher', 'route_target'))
"""))
conn.execute(sa.text("""
DELETE FROM resource_types WHERE resource_types.resource_type IN ('vrf_name', 'route_distinguisher', 'route_target')
DELETE FROM resource_types WHERE resource_types.resource_type IN ('vrf_name', 'vrf_as_number', 'route_distinguisher', 'route_target')
"""))
conn.execute(sa.text("""
DELETE FROM product_product_blocks WHERE product_product_blocks.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('VRF', 'Imported VRF')) AND product_product_blocks.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('VRFBlock'))
DELETE FROM product_product_blocks WHERE product_product_blocks.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('VRF')) AND product_product_blocks.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('VRFBlock'))
"""))
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 ('VRFBlock')) AND product_block_relations.depends_on_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('RouterBlock'))
......@@ -91,17 +100,17 @@ DELETE FROM subscription_instances WHERE subscription_instances.product_block_id
DELETE FROM product_blocks WHERE product_blocks.name IN ('VRFBlock')
"""))
conn.execute(sa.text("""
DELETE FROM processes WHERE processes.pid IN (SELECT processes_subscriptions.pid FROM processes_subscriptions WHERE processes_subscriptions.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('VRF', 'Imported VRF'))))
DELETE FROM processes WHERE processes.pid IN (SELECT processes_subscriptions.pid FROM processes_subscriptions WHERE processes_subscriptions.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('VRF'))))
"""))
conn.execute(sa.text("""
DELETE FROM processes_subscriptions WHERE processes_subscriptions.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('VRF', 'Imported VRF')))
DELETE FROM processes_subscriptions WHERE processes_subscriptions.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('VRF')))
"""))
conn.execute(sa.text("""
DELETE FROM subscription_instances WHERE subscription_instances.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('VRF', 'Imported VRF')))
DELETE FROM subscription_instances WHERE subscription_instances.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('VRF')))
"""))
conn.execute(sa.text("""
DELETE FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('VRF', 'Imported VRF'))
DELETE FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('VRF'))
"""))
conn.execute(sa.text("""
DELETE FROM products WHERE products.name IN ('VRF', 'Imported VRF')
DELETE FROM products WHERE products.name IN ('VRF')
"""))
......@@ -20,7 +20,7 @@ from gso.products.product_types.router import ImportedRouter, Router
from gso.products.product_types.site import ImportedSite, Site
from gso.products.product_types.super_pop_switch import ImportedSuperPopSwitch, SuperPopSwitch
from gso.products.product_types.switch import ImportedSwitch, Switch
from gso.products.product_types.vrf import VRF, ImportedVRF
from gso.products.product_types.vrf import VRF
class ProductName(strEnum):
......@@ -60,7 +60,6 @@ class ProductName(strEnum):
EXPRESSROUTE = Layer2CircuitServiceType.EXPRESSROUTE
IMPORTED_EXPRESSROUTE = Layer2CircuitServiceType.IMPORTED_EXPRESSROUTE
VRF = "VRF"
IMPORTED_VRF = "Imported VRF"
class ProductType(strEnum):
......@@ -100,7 +99,6 @@ class ProductType(strEnum):
EXPRESSROUTE = Layer2Circuit.__name__
IMPORTED_EXPRESSROUTE = ImportedLayer2Circuit.__name__
VRF = VRF.__name__
IMPORTED_VRF = ImportedVRF.__name__
SUBSCRIPTION_MODEL_REGISTRY.update(
......@@ -139,7 +137,6 @@ SUBSCRIPTION_MODEL_REGISTRY.update(
ProductName.EXPRESSROUTE.value: Layer2Circuit,
ProductName.IMPORTED_EXPRESSROUTE.value: ImportedLayer2Circuit,
ProductName.VRF.value: VRF,
ProductName.IMPORTED_VRF.value: ImportedVRF,
},
)
......
......@@ -6,35 +6,36 @@ from orchestrator.types import SubscriptionLifecycle
from gso.products.product_blocks.router import RouterBlock, RouterBlockInactive, RouterBlockProvisioning
class VRFBlockInactive(
ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="VRFBlock"
):
class VRFBlockInactive(ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="VRFBlock"):
"""An inactive :term:`VRF` subscription. See :class:`VRFBlock`."""
vrf_router_list: list[RouterBlockInactive]
vrf_name: str
route_distinguisher: str
route_target: str
vrf_name: str | None = None
route_distinguisher: str | None = None
route_target: str | None = None
vrf_as_number: int | None = None
class VRFBlockProvisioning(VRFBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]
):
class VRFBlockProvisioning(VRFBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
"""A provisioning :term:`VRF` subscription. See :class:`VRFBlock`."""
vrf_router_list: list[RouterBlockProvisioning]
vrf_router_list: list[RouterBlockProvisioning] # type: ignore[assignment]
vrf_name: str
route_distinguisher: str
route_target: str
vrf_as_number: int | None = None
class VRFBlock(VRFBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
"""Represents an active :term:`VRF` subscription block."""
#: List of VRF routers
vrf_router_list: list[RouterBlock]
vrf_router_list: list[RouterBlock] # type: ignore[assignment]
#: Unique name identifying this VRF.
vrf_name: str
#: Route Distinguisher (RD) ensuring unique route identification within this VRF.
route_distinguisher: str
#: Route Target (RT) defining routing policies for importing/exporting routes.
route_target: str
#: AS number of the VRF
vrf_as_number: int | None = None
"""L3 Core VRF product types."""
from orchestrator.domain import SubscriptionModel
from orchestrator.types import SubscriptionLifecycle
from pydantic_forms.types import strEnum
from gso.products.product_blocks.l3_core_vrf import L3CoreVRFBlock, L3CoreVRFBlockInactive, L3CoreVRFBlockProvisioning
class L3CoreVRFType(strEnum):
"""Available types of L3 Core VRFs."""
GEANT_IP_VRF = "GÉANT IP VRF"
IMPORTED_GEANT_IP_VRF = "IMPORTED GÉANT IP VRF"
IAS_VRF = "IAS VRF"
IMPORTED_IAS_VRF = "IMPORTED IAS VRF"
LHCONE_VRF = "LHCONE VRF"
IMPORTED_LHCONE_VRF = "IMPORTED LHCONE VRF"
COPERNICUS_VRF = "COPERNICUS VRF"
IMPORTED_COPERNICUS_VRF = "IMPORTED COPERNICUS VRF"
class L3CoreVRFInactive(SubscriptionModel, is_base=True):
"""An inactive L3 Core VRF subscription."""
l3_core_vrf_type: L3CoreVRFType
l3_core_vrf: L3CoreVRFBlockInactive
class L3CoreVRFProvisioning(L3CoreVRFInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
"""A l3 Core VRF subscription that's being provisioned."""
l3_core_vrf_type: L3CoreVRFType
l3_core_vrf: L3CoreVRFBlockProvisioning
class L3CoreVRF(L3CoreVRFProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
"""An active L3 Core VRF subscription."""
l3_core_vrf_type: L3CoreVRFType
l3_core_vrf: L3CoreVRFBlock
class ImportedL3CoreVRFInactive(SubscriptionModel, is_base=True):
"""An imported, inactive L3 Core VRF subscription."""
l3_core_vrf_type: L3CoreVRFType
l3_core_vrf: L3CoreVRFBlockInactive
class ImportedL3CoreVRF(
ImportedL3CoreVRFInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING, SubscriptionLifecycle.ACTIVE]
):
"""An imported L3 Core VRF subscription."""
l3_core_vrf_type: L3CoreVRFType
l3_core_vrf: L3CoreVRFBlock
......@@ -22,15 +22,3 @@ class VRF(VRFProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
"""A :term:`VRF` that is currently active."""
vrf: VRFBlock
class ImportedVRFInactive(SubscriptionModel, is_base=True):
"""An imported, inactive :term:`VRF`."""
vrf: VRFBlockInactive
class ImportedVRF(ImportedVRFInactive, llifecycle=[SubscriptionLifecycle.PROVISIONING, SubscriptionLifecycle.ACTIVE]):
"""An imported :term:`VRF` that is currently active."""
vrf: VRFBlock
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