Commit 82d6dadc authored by Shayan Hajipour's avatar Shayan Hajipour
Browse files

debug:

- create_l3vvpn_datamodel removed from l3vpn's driver
parent b06cbae9
Loading
Loading
Loading
Loading
+0 −216
Original line number Diff line number Diff line
@@ -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,
+3 −13
Original line number Diff line number Diff line
@@ -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))