From 52c83fc9e8c7683df7eee129af3f5a25566ee38d Mon Sep 17 00:00:00 2001 From: Karel van Klink <karel.vanklink@geant.org> Date: Thu, 17 Oct 2024 09:42:09 +0200 Subject: [PATCH] Refactor Edge Port name to avoid conflict --- ...80b_add_edge_port_and_nren_l3_core_service_.py | 12 ++++++------ gso/products/product_blocks/edge_port.py | 6 +++--- gso/workflows/edge_port/create_edge_port.py | 15 ++++++++------- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/gso/migrations/versions/2024-10-16_2d224884c80b_add_edge_port_and_nren_l3_core_service_.py b/gso/migrations/versions/2024-10-16_2d224884c80b_add_edge_port_and_nren_l3_core_service_.py index bc1c6df5..89d08a47 100644 --- a/gso/migrations/versions/2024-10-16_2d224884c80b_add_edge_port_and_nren_l3_core_service_.py +++ b/gso/migrations/versions/2024-10-16_2d224884c80b_add_edge_port_and_nren_l3_core_service_.py @@ -72,7 +72,7 @@ INSERT INTO resource_types (resource_type, description) VALUES ('has_custom_poli INSERT INTO resource_types (resource_type, description) VALUES ('families', 'IP families, can be v4 v6 and UNICAST or MULTICAST') RETURNING resource_types.resource_type_id """)) conn.execute(sa.text(""" -INSERT INTO resource_types (resource_type, description) VALUES ('name', 'Name') RETURNING resource_types.resource_type_id +INSERT INTO resource_types (resource_type, description) VALUES ('edge_port_name', 'Edge Port interface name') RETURNING resource_types.resource_type_id """)) conn.execute(sa.text(""" INSERT INTO resource_types (resource_type, description) VALUES ('edge_port_type', 'Type of Edge Port') RETURNING resource_types.resource_type_id @@ -171,7 +171,7 @@ INSERT INTO product_block_relations (in_use_by_id, depends_on_id) VALUES ((SELEC 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_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('EdgePortBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('name'))) +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 ('EdgePortBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('edge_port_name'))) """)) 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 ('EdgePortBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('edge_port_description'))) @@ -277,10 +277,10 @@ INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VA def downgrade() -> None: conn = op.get_bind() conn.execute(sa.text(""" -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 ('EdgePortBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('name')) +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 ('EdgePortBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('edge_port_name')) """)) 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 ('EdgePortBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('name')) +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 ('EdgePortBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('edge_port_name')) """)) conn.execute(sa.text(""" 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 ('EdgePortBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('edge_port_description')) @@ -481,10 +481,10 @@ 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 ('BGPSession'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('rtbh_enabled')) """)) 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 ('ignore_if_down', 'multipath_enabled', 'geant_ga_id', 'has_custom_policies', 'families', 'name', 'edge_port_type', 'custom_firewall_filters', 'peer_address', 'ipv6_address', 'edge_port_description', 'authentication_key', 'bfd_multiplier', 'is_tagged', 'rtbh_enabled', 'mac_address', 'bfd_interval', 'is_multi_hop', 'member_speed', 'ipv4_mask', 'geant_sid', 'encapsulation', 'ipv4_address', 'ipv6_mask', 'bfd_enabled', 'ap_type', 'send_default_route', 'is_passive', 'sbp_type', 'enable_lacp')) +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 ('ignore_if_down', 'multipath_enabled', 'geant_ga_id', 'has_custom_policies', 'families', 'edge_port_name', 'edge_port_type', 'custom_firewall_filters', 'peer_address', 'ipv6_address', 'edge_port_description', 'authentication_key', 'bfd_multiplier', 'is_tagged', 'rtbh_enabled', 'mac_address', 'bfd_interval', 'is_multi_hop', 'member_speed', 'ipv4_mask', 'geant_sid', 'encapsulation', 'ipv4_address', 'ipv6_mask', 'bfd_enabled', 'ap_type', 'send_default_route', 'is_passive', 'sbp_type', 'enable_lacp')) """)) conn.execute(sa.text(""" -DELETE FROM resource_types WHERE resource_types.resource_type IN ('ignore_if_down', 'multipath_enabled', 'geant_ga_id', 'has_custom_policies', 'families', 'name', 'edge_port_type', 'custom_firewall_filters', 'peer_address', 'ipv6_address', 'edge_port_description', 'authentication_key', 'bfd_multiplier', 'is_tagged', 'rtbh_enabled', 'mac_address', 'bfd_interval', 'is_multi_hop', 'member_speed', 'ipv4_mask', 'geant_sid', 'encapsulation', 'ipv4_address', 'ipv6_mask', 'bfd_enabled', 'ap_type', 'send_default_route', 'is_passive', 'sbp_type', 'enable_lacp') +DELETE FROM resource_types WHERE resource_types.resource_type IN ('ignore_if_down', 'multipath_enabled', 'geant_ga_id', 'has_custom_policies', 'families', 'edge_port_name', 'edge_port_type', 'custom_firewall_filters', 'peer_address', 'ipv6_address', 'edge_port_description', 'authentication_key', 'bfd_multiplier', 'is_tagged', 'rtbh_enabled', 'mac_address', 'bfd_interval', 'is_multi_hop', 'member_speed', 'ipv4_mask', 'geant_sid', 'encapsulation', 'ipv4_address', 'ipv6_mask', 'bfd_enabled', 'ap_type', 'send_default_route', 'is_passive', 'sbp_type', 'enable_lacp') """)) 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 ('Imported Edge Port', 'Edge Port')) AND product_product_blocks.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('EdgePortBlock')) diff --git a/gso/products/product_blocks/edge_port.py b/gso/products/product_blocks/edge_port.py index 7a7baf78..3ec09b2a 100644 --- a/gso/products/product_blocks/edge_port.py +++ b/gso/products/product_blocks/edge_port.py @@ -63,7 +63,7 @@ class EdgePortBlockInactive( """An edge port that's currently inactive. See :class:`EdgePortBlock`.""" node: RouterBlockInactive | None = None - name: str | None = None + edge_port_name: str | None = None edge_port_description: str | None = None enable_lacp: bool | None = None encapsulation: EncapsulationType = EncapsulationType.DOT1Q @@ -80,7 +80,7 @@ class EdgePortBlockProvisioning(EdgePortBlockInactive, lifecycle=[SubscriptionLi """An edge port that's being provisioned. See :class:`EdgePortBlock`.""" node: RouterBlockProvisioning - name: str + edge_port_name: str edge_port_description: str | None = None enable_lacp: bool encapsulation: EncapsulationType = EncapsulationType.DOT1Q @@ -99,7 +99,7 @@ class EdgePortBlock(EdgePortBlockProvisioning, lifecycle=[SubscriptionLifecycle. #: The router that this edge port is connected to. node: RouterBlock #: The name of the edge port, in our case, corresponds to the name of the :term:`LAG` interface. - name: str + edge_port_name: str #: A description of the edge port. edge_port_description: str | None = None #: Indicates whether :term:`LACP` is enabled for this edge port. diff --git a/gso/workflows/edge_port/create_edge_port.py b/gso/workflows/edge_port/create_edge_port.py index c6b3eaf8..6e88ad53 100644 --- a/gso/workflows/edge_port/create_edge_port.py +++ b/gso/workflows/edge_port/create_edge_port.py @@ -104,7 +104,7 @@ def initialize_subscription( service_type: EdgePortType, speed: PhysicalPortCapacity, encapsulation: EncapsulationType, - name: str, + edge_port_name: str, minimum_links: int, geant_ga_id: str | None, mac_address: str | None, @@ -121,13 +121,14 @@ def initialize_subscription( subscription.edge_port.edge_port_enable_lacp = enable_lacp subscription.edge_port.edge_port_member_speed = speed subscription.edge_port.edge_port_encapsulation = encapsulation - subscription.edge_port.edge_port_name = name + subscription.edge_port.edge_port_name = edge_port_name subscription.edge_port.edge_port_minimum_links = minimum_links subscription.edge_port.edge_port_ignore_if_down = ignore_if_down subscription.edge_port.edge_port_geant_ga_id = geant_ga_id subscription.edge_port.edge_port_mac_address = mac_address partner_name = get_partner_by_id(partner).name - subscription.description = f"Edge Port {name} on {router.router_fqdn}, {partner_name}, {geant_ga_id or ""}" + subscription.description = (f"Edge Port {edge_port_name} on {router.router_fqdn}, " + f"{partner_name}, {geant_ga_id or ""}") subscription.edge_port.edge_port_description = description for member in ae_members: subscription.edge_port.edge_port_ae_members.append( @@ -147,7 +148,7 @@ def reserve_interfaces_in_netbox(subscription: EdgePortProvisioning) -> State: lag_interface: Interfaces = nbclient.create_interface( iface_name=edge_port.edge_port_name, interface_type="lag", - device_name=edge_port.edge_port_node.router_fqdn, + device_name=edge_port.node.router_fqdn, description=str(subscription.subscription_id), enabled=True, ) @@ -156,13 +157,13 @@ def reserve_interfaces_in_netbox(subscription: EdgePortProvisioning) -> State: # Reserve interfaces for interface in edge_port.edge_port_ae_members: nbclient.attach_interface_to_lag( - device_name=edge_port.edge_port_node.router_fqdn, + device_name=edge_port.node.router_fqdn, lag_name=lag_interface.name, iface_name=interface.interface_name, description=str(subscription.subscription_id), ) nbclient.reserve_interface( - device_name=edge_port.edge_port_node.router_fqdn, + device_name=edge_port.node.router_fqdn, iface_name=interface.interface_name, ) return { @@ -174,7 +175,7 @@ def reserve_interfaces_in_netbox(subscription: EdgePortProvisioning) -> State: def allocate_interfaces_in_netbox(subscription: EdgePortProvisioning) -> None: """Allocate the interfaces in NetBox.""" for interface in subscription.edge_port.edge_port_ae_members: - fqdn = subscription.edge_port.edge_port_node.router_fqdn + fqdn = subscription.edge_port.node.router_fqdn iface_name = interface.interface_name if not fqdn or not iface_name: msg = "FQDN and/or interface name missing in subscription" -- GitLab