Commit fc5f3e93 authored by Shayan Hajipour's avatar Shayan Hajipour
Browse files

debug:

- endpoint order based on access domain fixed (access endpoints come first)
- connection group id extraction fixed
parent 09aa2b2d
Loading
Loading
Loading
Loading
+41 −16
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ from common.proto.context_pb2 import (
    ConfigRule,
    Constraint,
    DeviceId,
    Device,
    Empty,
    EndPointId,
    ServiceConfig,
@@ -16,6 +17,8 @@ from common.proto.context_pb2 import (
)
from common.tools.context_queries.Slice import get_slice_by_defualt_name
from common.tools.grpc.ConfigRules import update_config_rule_custom
from common.tools.object_factory.Device import json_device_id
from common.DeviceTypes import DeviceTypeEnum
from context.client import ContextClient

from .YangValidator import YangValidator
@@ -29,6 +32,19 @@ ADDRESS_PREFIX = 24
RAISE_IF_DIFFERS = False


def get_endpoint_controller_type(
    endpoint: EndPointId, context_client: ContextClient
) -> str:
    endpoint_device: Device = context_client.GetDevice(endpoint.device_id)
    if endpoint_device.controller_id == DeviceId():
        return ""
    controller = context_client.GetDevice(endpoint_device.controller_id)
    if controller is None:
        controller_uuid = endpoint_device.controller_id.device_uuid.uuid
        raise Exception("Device({:s}) not found".format(str(controller_uuid)))
    return controller.device_type


def get_custom_config_rule(
    service_config: ServiceConfig, resource_key: str
) -> Optional[ConfigRule]:
@@ -40,10 +56,27 @@ def get_custom_config_rule(
            return cr


def sort_endpoints(endpoinst_list: List, sdps: List, connection_group: Dict) -> List:
def sort_endpoints(
    endpoinst_list: List[EndPointId],
    sdps: List,
    connection_group: Dict,
    context_client: ContextClient,
) -> List[EndPointId]:
    first_ep = endpoinst_list[0]
    first_controller_type = get_endpoint_controller_type(first_ep, context_client)
    last_ep = endpoinst_list[-1]
    last_controller_type = get_endpoint_controller_type(last_ep, context_client)
    if first_controller_type == DeviceTypeEnum.NCE.value:
        return endpoinst_list
    elif last_controller_type == DeviceTypeEnum.NCE.value:
        return endpoinst_list[::-1]
    else:
        src_sdp_id = connection_group["connectivity-construct"][0]["p2p-sender-sdp"]
        sdp_id_name_mapping = {sdp["id"]: sdp["node-id"] for sdp in sdps}
    if endpoinst_list[0].device_id.device_uuid.uuid == sdp_id_name_mapping[src_sdp_id]:
        if (
            endpoinst_list[0].device_id.device_uuid.uuid
            == sdp_id_name_mapping[src_sdp_id]
        ):
            return endpoinst_list
        return endpoinst_list[::-1]

@@ -191,7 +224,7 @@ class IETFSliceHandler:
            break
        else:
            raise Exception("connection group not found")
        list_endpoints = sort_endpoints(list_endpoints, sdps, cg)
        list_endpoints = sort_endpoints(list_endpoints, sdps, cg, context_client)
        list_endpoints = replace_ont_endpoint_with_emu_dc(
            list_endpoints, context_client
        )
@@ -327,16 +360,14 @@ class IETFSliceHandler:
        slice_services = candidate_ietf_data["network-slice-services"]["slice-service"]
        slice_service = slice_services[0]
        slice_connection_groups = slice_service["connection-groups"]["connection-group"]
        connection_group_id = updated_connection_group["connection-group"][0]["id"]
        connection_group_id = updated_connection_group["id"]
        cg_idx = list(
            (
                slice_cg["id"] == connection_group_id
                for slice_cg in slice_connection_groups
            )
        ).index(True)
        slice_connection_groups[cg_idx] = updated_connection_group["connection-group"][
            0
        ]
        slice_connection_groups[cg_idx] = updated_connection_group
        fields = {
            name: (value, RAISE_IF_DIFFERS)
            for name, value in candidate_ietf_data.items()
@@ -462,12 +493,6 @@ class IETFSliceHandler:
        else:
            raise Exception("connection group not found")
        del slice_request.slice_constraints[:]
        # del slice_request.slice_endpoint_ids[:]
        # list_endpoints = sort_endpoints(list_endpoints, sdps, cg)
        # list_endpoints = replace_ont_endpoint_with_emu_dc(
        # list_endpoints, context_client
        # )
        # slice_request.slice_endpoint_ids.extend(list_endpoints)
        slice_request.slice_constraints.extend(list_constraints)
        fields = {name: (value, RAISE_IF_DIFFERS) for name, value in ietf_data.items()}
        update_config_rule_custom(