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

Merge branch 'feat/241-cttc-l3nm-nce-service-handler-is-required' into camara-integration

parents 5c2ad17c 5700d692
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ from common.tools.object_factory.ConfigRule import (
    json_config_rule_delete,
    json_config_rule_set,
)
from service.service.service_handler_api.AnyTreeTools import TreeNode


def setup_config_rules(service_uuid: str, json_settings: Dict) -> List[Dict]:
+257 −238
Original line number Diff line number Diff line
@@ -29,7 +29,6 @@ from service.service.service_handler_api._ServiceHandler import _ServiceHandler
from service.service.service_handler_api.SettingsHandler import SettingsHandler
from service.service.service_handler_api.Tools import (
    get_device_endpoint_uuids,
    get_endpoint_matching,
)
from service.service.task_scheduler.TaskExecutor import TaskExecutor

@@ -104,8 +103,9 @@ class L3NMNCEServiceHandler(_ServiceHandler):
        chk_type("endpoints", endpoints, list)
        if len(endpoints) == 0:
            return []
        results = []
        try:
            context_client = ContextClient()
        service_uuid = self.__service.service_id.service_uuid.uuid
            service_name = self.__service.name
            service_config = self.__service.service_config
            settings = self.__settings_handler.get("/settings")
@@ -133,15 +133,16 @@ class L3NMNCEServiceHandler(_ServiceHandler):
            running_resource_value_dict = json.loads(
                running_ietf_slice_cr.custom.resource_value
            )
        LOGGER.debug(f"P70: {running_candidate_diff}")
            if not running_candidate_diff:  # Slice Creation
                operation_type = "create"
            slice_services = candidate_resource_value_dict["network-slice-services"][
                "slice-service"
            ]
                slice_services = candidate_resource_value_dict[
                    "network-slice-services"
                ]["slice-service"]
                slice_service = slice_services[0]
                sdps = slice_service["sdps"]["sdp"]
            connection_groups = slice_service["connection-groups"]["connection-group"]
                connection_groups = slice_service["connection-groups"][
                    "connection-group"
                ]
                sdp_ids = [sdp["id"] for sdp in sdps]
                for sdp in sdps:
                    node_id = sdp["node-id"]
@@ -149,9 +150,10 @@ class L3NMNCEServiceHandler(_ServiceHandler):
                    device_controller = self.__task_executor.get_device_controller(
                        device_obj
                    )
                LOGGER.debug(f"P71: {controller}")
                LOGGER.debug(f"P72: {device_controller}")
                if device_controller is None or controller.name != device_controller.name:
                    if (
                        device_controller is None
                        or controller.name != device_controller.name
                    ):
                        continue
                    src_sdp_idx = sdp_ids.pop(sdp_ids.index(sdp["id"]))
                    dst_sdp_idx = sdp_ids[0]
@@ -162,12 +164,14 @@ class L3NMNCEServiceHandler(_ServiceHandler):
                else:
                    raise Exception("connection group id not found")
            elif "iterable_item_added" in running_candidate_diff:  # new SDP added
            slice_services = candidate_resource_value_dict["network-slice-services"][
                "slice-service"
            ]
                slice_services = candidate_resource_value_dict[
                    "network-slice-services"
                ]["slice-service"]
                slice_service = slice_services[0]
                sdps = slice_service["sdps"]["sdp"]
            connection_groups = slice_service["connection-groups"]["connection-group"]
                connection_groups = slice_service["connection-groups"][
                    "connection-group"
                ]
                operation_type = "create"
                added_items = {
                    "sdp": {"sdp_idx": None, "value": {}},
@@ -191,13 +195,17 @@ class L3NMNCEServiceHandler(_ServiceHandler):
                        }
                    elif connection_group_match:
                        added_items["connection_group"] = {
                        "connection_group_idx": int(connection_group_match.groups()[0]),
                            "connection_group_idx": int(
                                connection_group_match.groups()[0]
                            ),
                            "value": added_value,
                        }
                    elif match_criterion_match:
                        added_items["match_criterion"] = {
                            "sdp_idx": int(match_criterion_match.groups()[0]),
                        "match_criterion_idx": int(match_criterion_match.groups()[1]),
                            "match_criterion_idx": int(
                                match_criterion_match.groups()[1]
                            ),
                            "value": added_value,
                        }
                new_sdp = sdps[added_items["sdp"]["sdp_idx"]]
@@ -208,7 +216,9 @@ class L3NMNCEServiceHandler(_ServiceHandler):
                ]["id"]
                if (
                    connection_grp_id
                != added_items["match_criterion"]["value"]["target-connection-group-id"]
                    != added_items["match_criterion"]["value"][
                        "target-connection-group-id"
                    ]
                ):
                    raise Exception(
                        "connection group missmatch in destination sdp and added connection group"
@@ -221,7 +231,9 @@ class L3NMNCEServiceHandler(_ServiceHandler):
                ]
                slice_service = slice_services[0]
                sdps = slice_service["sdps"]["sdp"]
            connection_groups = slice_service["connection-groups"]["connection-group"]
                connection_groups = slice_service["connection-groups"][
                    "connection-group"
                ]
                operation_type = "delete"
                added_items = {
                    "sdp": {"sdp_idx": None, "value": {}},
@@ -245,13 +257,17 @@ class L3NMNCEServiceHandler(_ServiceHandler):
                        }
                    elif connection_group_match:
                        added_items["connection_group"] = {
                        "connection_group_idx": int(connection_group_match.groups()[0]),
                            "connection_group_idx": int(
                                connection_group_match.groups()[0]
                            ),
                            "value": added_value,
                        }
                    elif match_criterion_match:
                        added_items["match_criterion"] = {
                            "sdp_idx": int(match_criterion_match.groups()[0]),
                        "match_criterion_idx": int(match_criterion_match.groups()[1]),
                            "match_criterion_idx": int(
                                match_criterion_match.groups()[1]
                            ),
                            "value": added_value,
                        }
                new_sdp = sdps[added_items["sdp"]["sdp_idx"]]
@@ -275,13 +291,15 @@ class L3NMNCEServiceHandler(_ServiceHandler):
                if type_value["type"] == "ietf-network-slice-service:source-ip-prefix":
                    src_ip = type_value["value"][0].split("/")[0]
                elif (
                type_value["type"] == "ietf-network-slice-service:destination-ip-prefix"
                    type_value["type"]
                    == "ietf-network-slice-service:destination-ip-prefix"
                ):
                    dst_ip = type_value["value"][0].split("/")[0]
                elif type_value["type"] == "ietf-network-slice-service:source-tcp-port":
                    src_port = type_value["value"][0]
                elif (
                type_value["type"] == "ietf-network-slice-service:destination-tcp-port"
                    type_value["type"]
                    == "ietf-network-slice-service:destination-tcp-port"
                ):
                    dst_port = type_value["value"][0]
            qos_info = {
@@ -328,9 +346,8 @@ class L3NMNCEServiceHandler(_ServiceHandler):
                                "percentile-value"
                            ]
                break
        results = []
            resource_value_dict = {
            "uuid": service_uuid,
                "uuid": service_name,
                "operation_type": operation_type,
                "app_flow_id": f"{src_sdp_idx}_{dst_sdp_idx}_{service_name}",
                "app_flow_user_id": str(uuid4()),
@@ -346,11 +363,13 @@ class L3NMNCEServiceHandler(_ServiceHandler):
                "dst_ip": dst_ip,
                "dst_port": dst_port,
            }
        json_config_rules = setup_config_rules(service_uuid, resource_value_dict)
            json_config_rules = setup_config_rules(service_name, resource_value_dict)
            del controller.device_config.config_rules[:]
            for jcr in json_config_rules:
                controller.device_config.config_rules.append(ConfigRule(**jcr))
            self.__task_executor.configure_device(controller)
        except Exception as e:  # pylint: disable=broad-except
            results.append(e)
        return results

    @metered_subclass_method(METRICS_POOL)