diff --git a/src/device/service/drivers/ietf_l3vpn/Tools.py b/src/device/service/drivers/ietf_l3vpn/Tools.py index eeb0d87f1600979ebc30fd7400f23e3595afb7a4..7caaa27a52cacf03d9822e933f0a6b74fd0e4db8 100644 --- a/src/device/service/drivers/ietf_l3vpn/Tools.py +++ b/src/device/service/drivers/ietf_l3vpn/Tools.py @@ -76,222 +76,6 @@ def get_connectivity_service(wim_url, auth, service_uuid): raise Exception("Request Timeout", http_code=408) -def create_l3vpn_datamodel(service_uuid, resource_value: dict) -> dict: - src_device_uuid: str = resource_value["src_device_name"] - src_endpoint_uuid: str = resource_value["src_endpoint_name"] - src_site_location: str = resource_value["src_site_location"] - src_ipv4_lan_prefixes: list[LANPrefixesDict] = resource_value.get( - "src_ipv4_lan_prefixes" - ) - src_site_id: str = resource_value.get("src_site_id", f"site_{src_site_location}") - src_management_type: str = resource_value.get( - "src_management_type", "ietf-l3vpn-svc:provider-managed" - ) - if src_management_type != "ietf-l3vpn-svc:provider-managed": - raise Exception("management type %s not supported", src_management_type) - src_role: str = "ietf-l3vpn-svc:hub-role" - src_ce_address: str = resource_value["src_ce_address"] - src_pe_address: str = resource_value["src_pe_address"] - src_ce_pe_network_prefix: int = resource_value["src_ce_pe_network_prefix"] - src_mtu: int = resource_value["src_mtu"] - src_input_bw: int = resource_value.get("src_input_bw", 1000000000) - src_output_bw: int = resource_value.get("src_input_bw", 1000000000) - src_qos_profile_id = "qos-realtime" - src_qos_profile_direction = "ietf-l3vpn-svc:both" - src_qos_profile_latency: int = resource_value.get("src_qos_profile_latency", 10) - src_qos_profile_bw_guarantee: int = resource_value.get( - "src_qos_profile_bw_guarantee", 100 - ) - - dst_device_uuid = resource_value["dst_device_name"] - dst_endpoint_uuid = resource_value["dst_endpoint_name"] - dst_site_location: str = resource_value["dst_site_location"] - dst_ipv4_lan_prefixes: list[LANPrefixesDict] = resource_value[ - "dst_ipv4_lan_prefixes" - ] - dst_site_id: str = resource_value.get("dst_site_id", f"site_{dst_site_location}") - dst_management_type: str = resource_value.get( - "dst_management_type", "ietf-l3vpn-svc:provider-managed" - ) - if dst_management_type != "ietf-l3vpn-svc:provider-managed": - raise Exception("management type %s not supported", dst_management_type) - dst_role: str = "ietf-l3vpn-svc:spoke-role" - dst_ce_address: str = resource_value["dst_ce_address"] - dst_pe_address: str = resource_value["dst_pe_address"] - dst_ce_pe_network_prefix: int = resource_value["dst_ce_pe_network_prefix"] - dst_mtu: int = resource_value["dst_mtu"] - dst_input_bw: int = resource_value.get("dst_input_bw", 1000000000) - dst_output_bw: int = resource_value.get("dst_output_bw", 1000000000) - dst_qos_profile_id = "qos-realtime" - dst_qos_profile_direction = "ietf-l3vpn-svc:both" - dst_qos_profile_latency: int = resource_value.get("dst_qos_profile_latency", 10) - dst_qos_profile_bw_guarantee: int = resource_value.get( - "dst_qos_profile_bw_guarantee", 100 - ) - - # Create source site information - src_management = {"type": src_management_type} - src_locations = {"location": [{"location-id": src_site_location}]} - src_devices = { - "device": [{"device-id": src_device_uuid, "location": src_site_location}] - } - src_site_lan_prefixes = [ - {"lan": lp["lan"], "lan-tag": lp["lan_tag"], "next-hop": src_pe_address} - for lp in src_ipv4_lan_prefixes - ] - src_site_routing_protocols = { - "routing-protocol": [ - { - "type": "ietf-l3vpn-svc:static", - "static": { - "cascaded-lan-prefixes": { - "ipv4-lan-prefixes": src_site_lan_prefixes - } - }, - } - ] - } - src_site_network_accesses = { - "site-network-access": [ - { - "site-network-access-id": src_endpoint_uuid, - "site-network-access-type": SITE_NETWORK_ACCESS_TYPE, - "device-reference": src_device_uuid, - "vpn-attachment": {"vpn-id": service_uuid, "site-role": src_role}, - "ip-connection": { - "ipv4": { - "address-allocation-type": "ietf-l3vpn-svc:static-address", - "addresses": { - "provider-address": src_pe_address, - "customer-address": src_ce_address, - "prefix-length": src_ce_pe_network_prefix, - }, - } - }, - "service": { - "svc-mtu": src_mtu, - "svc-input-bandwidth": src_input_bw, - "svc-output-bandwidth": src_output_bw, - "qos": { - "qos-profile": { - "classes": { - "class": [ - { - "class-id": src_qos_profile_id, - "direction": src_qos_profile_direction, - "latency": { - "latency-boundary": src_qos_profile_latency - }, - "bandwidth": { - "guaranteed-bw-percent": src_qos_profile_bw_guarantee - }, - } - ] - } - } - }, - }, - } - ] - } - - # Create destination site information - dst_management = {"type": src_management_type} - dst_locations = {"location": [{"location-id": dst_site_location}]} - dst_devices = { - "device": [{"device-id": dst_device_uuid, "location": dst_site_location}] - } - dst_site_lan_prefixes = [ - {"lan": lp["lan"], "lan-tag": lp["lan_tag"], "next-hop": dst_pe_address} - for lp in dst_ipv4_lan_prefixes - ] - dst_site_routing_protocols = { - "routing-protocol": [ - { - "type": "ietf-l3vpn-svc:static", - "static": { - "cascaded-lan-prefixes": { - "ipv4-lan-prefixes": dst_site_lan_prefixes - } - }, - } - ] - } - dst_site_network_accesses = { - "site-network-access": [ - { - "site-network-access-id": dst_endpoint_uuid, - "site-network-access-type": SITE_NETWORK_ACCESS_TYPE, - "device-reference": dst_device_uuid, - "vpn-attachment": {"vpn-id": service_uuid, "site-role": dst_role}, - "ip-connection": { - "ipv4": { - "address-allocation-type": "ietf-l3vpn-svc:static-address", - "addresses": { - "provider-address": dst_pe_address, - "customer-address": dst_ce_address, - "prefix-length": dst_ce_pe_network_prefix, - }, - } - }, - "service": { - "svc-mtu": dst_mtu, - "svc-input-bandwidth": dst_input_bw, - "svc-output-bandwidth": dst_output_bw, - "qos": { - "qos-profile": { - "classes": { - "class": [ - { - "class-id": dst_qos_profile_id, - "direction": dst_qos_profile_direction, - "latency": { - "latency-boundary": dst_qos_profile_latency - }, - "bandwidth": { - "guaranteed-bw-percent": dst_qos_profile_bw_guarantee - }, - } - ] - } - } - }, - }, - } - ] - } - - sites = { - "site": [ - { - "site-id": src_site_id, - "management": src_management, - "locations": src_locations, - "devices": src_devices, - "routing-protocols": src_site_routing_protocols, - "site-network-accesses": src_site_network_accesses, - }, - { - "site-id": dst_site_id, - "management": dst_management, - "locations": dst_locations, - "devices": dst_devices, - "routing-protocols": dst_site_routing_protocols, - "site-network-accesses": dst_site_network_accesses, - }, - ] - } - - l3_vpn_data_model = { - "ietf-l3vpn-svc:l3vpn-svc": { - "vpn-services": {"vpn-service": [{"vpn-id": service_uuid}]}, - "sites": sites, - } - } - - return l3_vpn_data_model - - def process_optional_string_field( endpoint_data: Dict[str, Any], field_name: str, diff --git a/src/device/service/drivers/ietf_l3vpn/driver.py b/src/device/service/drivers/ietf_l3vpn/driver.py index cdab75625455bfdc77b6eb9295f407adff03427c..2aca83b6a645bf2e793b08841949813f0413a531 100644 --- a/src/device/service/drivers/ietf_l3vpn/driver.py +++ b/src/device/service/drivers/ietf_l3vpn/driver.py @@ -42,11 +42,7 @@ from device.service.driver_api.ImportTopologyEnum import ( from .Constants import SPECIAL_RESOURCE_MAPPINGS from .TfsApiClient import TfsApiClient -from .Tools import ( - compose_resource_endpoint, - create_l3vpn_datamodel, - service_exists, -) +from .Tools import compose_resource_endpoint LOGGER = logging.getLogger(__name__) @@ -245,18 +241,12 @@ class IetfL3VpnDriver(_Driver): service_id = resource_value["ietf-l3vpn-svc:l3vpn-svc"][ "vpn-services" ]["vpn-service"][0]["vpn-id"] - l3vpn_datamodel = create_l3vpn_datamodel( - service_id, resource_value, operation_type - ) - self.tac.create_connectivity_service(l3vpn_datamodel) + self.tac.create_connectivity_service(resource_value) elif operation_type == "update": service_id = resource_value["ietf-l3vpn-svc:l3vpn-svc"][ "vpn-services" ]["vpn-service"][0]["vpn-id"] - l3vpn_datamodel = create_l3vpn_datamodel( - service_id, resource_value, operation_type - ) - self.tac.update_connectivity_service(l3vpn_datamodel) + self.tac.update_connectivity_service(resource_value) else: raise Exception("operation type not supported") results.append((resource_key, True))