Skip to content
Snippets Groups Projects
Commit 2d714590 authored by root's avatar root
Browse files

Reworked devices and sites - added new attribute to manage local connection to IAS

parent e60d6f9e
Branches
Tags
1 merge request!56Reworked devices and sites - added new attribute to manage local connection to IAS
Pipeline #83803 failed
"""Modify sites and device PB.
Revision ID: 7728b3ef410c
Revises: e57ebfade80b
Create Date: 2023-08-07 12:53:31.090424
"""
import sqlalchemy as sa
from alembic import op
# revision identifiers, used by Alembic.
revision = '7728b3ef410c'
down_revision = 'e57ebfade80b'
branch_labels = None
depends_on = None
def upgrade() -> None:
conn = op.get_bind()
conn.execute("""
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 ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ts_address'))
""")
conn.execute("""
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 ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ts_address'))
""")
conn.execute("""
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 ('device_ts_address'))
""")
conn.execute("""
DELETE FROM resource_types WHERE resource_types.resource_type IN ('device_ts_address')
""")
conn.execute("""
INSERT INTO resource_types (resource_type, description) VALUES ('device_is_ias_connected', 'device has lt to IAS') RETURNING resource_types.resource_type_id
""")
conn.execute("""
INSERT INTO resource_types (resource_type, description) VALUES ('site_ts_address', 'Address of the terminal server') RETURNING resource_types.resource_type_id
""")
conn.execute("""
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 ('SiteBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_ts_address')))
""")
conn.execute("""
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 ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_is_ias_connected')))
""")
conn.execute("""
WITH subscription_instance_ids AS (
SELECT subscription_instances.subscription_instance_id
FROM subscription_instances
WHERE subscription_instances.product_block_id IN (
SELECT product_blocks.product_block_id
FROM product_blocks
WHERE product_blocks.name = 'SiteBlock'
)
)
INSERT INTO
subscription_instance_values (subscription_instance_id, resource_type_id, value)
SELECT
subscription_instance_ids.subscription_instance_id,
resource_types.resource_type_id,
'Address of the terminal server'
FROM resource_types
CROSS JOIN subscription_instance_ids
WHERE resource_types.resource_type = 'site_ts_address'
""")
conn.execute("""
WITH subscription_instance_ids AS (
SELECT subscription_instances.subscription_instance_id
FROM subscription_instances
WHERE subscription_instances.product_block_id IN (
SELECT product_blocks.product_block_id
FROM product_blocks
WHERE product_blocks.name = 'DeviceBlock'
)
)
INSERT INTO
subscription_instance_values (subscription_instance_id, resource_type_id, value)
SELECT
subscription_instance_ids.subscription_instance_id,
resource_types.resource_type_id,
'true'
FROM resource_types
CROSS JOIN subscription_instance_ids
WHERE resource_types.resource_type = 'device_is_ias_connected'
""")
def downgrade() -> None:
conn = op.get_bind()
conn.execute("""
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 ('SiteBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_ts_address'))
""")
conn.execute("""
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 ('SiteBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_ts_address'))
""")
conn.execute("""
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 ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_is_ias_connected'))
""")
conn.execute("""
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 ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_is_ias_connected'))
""")
conn.execute("""
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 ('device_is_ias_connected', 'site_ts_address'))
""")
conn.execute("""
DELETE FROM resource_types WHERE resource_types.resource_type IN ('device_is_ias_connected', 'site_ts_address')
""")
...@@ -34,7 +34,6 @@ class DeviceBlockInactive( ...@@ -34,7 +34,6 @@ class DeviceBlockInactive(
"""A device that's being currently inactive. See {class}`DeviceBlock`.""" """A device that's being currently inactive. See {class}`DeviceBlock`."""
device_fqdn: Optional[str] = None device_fqdn: Optional[str] = None
device_ts_address: Optional[str] = None
device_ts_port: Optional[int] = None device_ts_port: Optional[int] = None
device_access_via_ts: Optional[bool] = None device_access_via_ts: Optional[bool] = None
device_lo_ipv4_address: Optional[ipaddress.IPv4Address] = None device_lo_ipv4_address: Optional[ipaddress.IPv4Address] = None
...@@ -46,13 +45,13 @@ class DeviceBlockInactive( ...@@ -46,13 +45,13 @@ class DeviceBlockInactive(
device_vendor: Optional[DeviceVendor] = None device_vendor: Optional[DeviceVendor] = None
device_role: Optional[DeviceRole] = None device_role: Optional[DeviceRole] = None
device_site: Optional[SiteBlockInactive] device_site: Optional[SiteBlockInactive]
device_is_ias_connected: Optional[bool] = None
class DeviceBlockProvisioning(DeviceBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]): class DeviceBlockProvisioning(DeviceBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
"""A device that's being provisioned. See {class}`DeviceBlock`.""" """A device that's being provisioned. See {class}`DeviceBlock`."""
device_fqdn: str device_fqdn: str
device_ts_address: str
device_ts_port: int device_ts_port: int
device_access_via_ts: Optional[bool] = None device_access_via_ts: Optional[bool] = None
device_lo_ipv4_address: Optional[ipaddress.IPv4Address] = None device_lo_ipv4_address: Optional[ipaddress.IPv4Address] = None
...@@ -64,6 +63,7 @@ class DeviceBlockProvisioning(DeviceBlockInactive, lifecycle=[SubscriptionLifecy ...@@ -64,6 +63,7 @@ class DeviceBlockProvisioning(DeviceBlockInactive, lifecycle=[SubscriptionLifecy
device_vendor: Optional[DeviceVendor] = None device_vendor: Optional[DeviceVendor] = None
device_role: Optional[DeviceRole] = None device_role: Optional[DeviceRole] = None
device_site: Optional[SiteBlockProvisioning] device_site: Optional[SiteBlockProvisioning]
device_is_ias_connected: Optional[bool] = None
class DeviceBlock(DeviceBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]): class DeviceBlock(DeviceBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
...@@ -71,10 +71,6 @@ class DeviceBlock(DeviceBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTI ...@@ -71,10 +71,6 @@ class DeviceBlock(DeviceBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTI
device_fqdn: str device_fqdn: str
"""{term}`FQDN` of a device.""" """{term}`FQDN` of a device."""
device_ts_address: str
"""The address of the terminal server that this device is connected to. The terminal server provides out of band
access. This is required in case a link goes down, or when a device is initially added to the network and it does
not have any IP trunks connected to it yet."""
device_ts_port: int device_ts_port: int
"""The port of the terminal server that this device is connected to. Used for the same reason as mentioned """The port of the terminal server that this device is connected to. Used for the same reason as mentioned
previously.""" previously."""
...@@ -86,11 +82,11 @@ class DeviceBlock(DeviceBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTI ...@@ -86,11 +82,11 @@ class DeviceBlock(DeviceBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTI
"""The IPv6 loopback address of the device.""" """The IPv6 loopback address of the device."""
device_lo_iso_address: str device_lo_iso_address: str
"""The {term}`ISO` {term}`NET` of the device, used for {term}`IS-IS` support.""" """The {term}`ISO` {term}`NET` of the device, used for {term}`IS-IS` support."""
device_si_ipv4_network: ipaddress.IPv4Network device_si_ipv4_network: Optional[ipaddress.IPv4Network]
"""The SI IPv4 network of the device.""" """The SI IPv4 network of the device."""
device_ias_lt_ipv4_network: ipaddress.IPv4Network device_ias_lt_ipv4_network: Optional[ipaddress.IPv4Network]
"""The IAS LT IPv4 network of the device.""" """The IAS LT IPv4 network of the device."""
device_ias_lt_ipv6_network: ipaddress.IPv6Network device_ias_lt_ipv6_network: Optional[ipaddress.IPv6Network]
"""The IAS LT IPv6 network of the device.""" """The IAS LT IPv6 network of the device."""
device_vendor: DeviceVendor device_vendor: DeviceVendor
"""The vendor of the device, can be any of the values defined in {class}`DeviceVendor`.""" """The vendor of the device, can be any of the values defined in {class}`DeviceVendor`."""
...@@ -98,3 +94,5 @@ class DeviceBlock(DeviceBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTI ...@@ -98,3 +94,5 @@ class DeviceBlock(DeviceBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTI
"""The role of the device, which can be any of the values defined in {class}`DeviceRole`.""" """The role of the device, which can be any of the values defined in {class}`DeviceRole`."""
device_site: SiteBlock device_site: SiteBlock
"""The {class}`Site` that this device resides in. Both physically and computationally.""" """The {class}`Site` that this device resides in. Both physically and computationally."""
device_is_ias_connected: bool
"""The device is going to have a lt interface between inet0 and IAS"""
...@@ -31,6 +31,7 @@ class SiteBlockInactive(ProductBlockModel, lifecycle=[SubscriptionLifecycle.INIT ...@@ -31,6 +31,7 @@ class SiteBlockInactive(ProductBlockModel, lifecycle=[SubscriptionLifecycle.INIT
site_internal_id: Optional[int] = None site_internal_id: Optional[int] = None
site_bgp_community_id: Optional[int] = None site_bgp_community_id: Optional[int] = None
site_tier: Optional[SiteTier] = None site_tier: Optional[SiteTier] = None
site_ts_address: Optional[str] = None
class SiteBlockProvisioning(SiteBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]): class SiteBlockProvisioning(SiteBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
...@@ -45,6 +46,7 @@ class SiteBlockProvisioning(SiteBlockInactive, lifecycle=[SubscriptionLifecycle. ...@@ -45,6 +46,7 @@ class SiteBlockProvisioning(SiteBlockInactive, lifecycle=[SubscriptionLifecycle.
site_internal_id: Optional[int] = None site_internal_id: Optional[int] = None
site_bgp_community_id: Optional[int] = None site_bgp_community_id: Optional[int] = None
site_tier: Optional[SiteTier] = None site_tier: Optional[SiteTier] = None
site_ts_address: Optional[str] = None
class SiteBlock(SiteBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]): class SiteBlock(SiteBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
...@@ -70,3 +72,7 @@ class SiteBlock(SiteBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]) ...@@ -70,3 +72,7 @@ class SiteBlock(SiteBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE])
"""The {term}`BGP` community ID of a site, used to advertise routes learned at this site.""" """The {term}`BGP` community ID of a site, used to advertise routes learned at this site."""
site_tier: SiteTier site_tier: SiteTier
"""The tier of a site, as described in {class}`SiteTier`.""" """The tier of a site, as described in {class}`SiteTier`."""
site_ts_address: Optional[str] = None
"""The address of the terminal server that this device is connected to. The terminal server provides out of band
access. This is required in case a link goes down, or when a device is initially added to the network and it does
not have any IP trunks connected to it yet."""
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment