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

feat: IETF Slices retrieval added

- get_all_ietf_slices method added to IETFSliceHandler
- get method of NSS_Services adapted to retrieve all IETF Slices.
parent 522a2767
Loading
Loading
Loading
Loading
+5 −3
Original line number Original line Diff line number Diff line
@@ -22,7 +22,7 @@ from werkzeug.exceptions import UnsupportedMediaType
from context.client.ContextClient import ContextClient
from context.client.ContextClient import ContextClient
from slice.client.SliceClient import SliceClient
from slice.client.SliceClient import SliceClient


from ..tools.HttpStatusCodes import HTTP_CREATED
from ..tools.HttpStatusCodes import HTTP_CREATED, HTTP_OK
from .ietf_slice_handler import IETFSliceHandler
from .ietf_slice_handler import IETFSliceHandler


LOGGER = logging.getLogger(__name__)
LOGGER = logging.getLogger(__name__)
@@ -31,8 +31,10 @@ LOGGER = logging.getLogger(__name__)
class NSS_Services(Resource):
class NSS_Services(Resource):
    # @HTTP_AUTH.login_required
    # @HTTP_AUTH.login_required
    def get(self):
    def get(self):
        response = jsonify({"message": "All went well!"})
        context_client = ContextClient()
        # TODO Return list of current network-slice-services
        ietf_slices = IETFSliceHandler.get_all_ietf_slices(context_client)
        response = jsonify(ietf_slices)
        response.status_code = HTTP_OK
        return response
        return response


    # @HTTP_AUTH.login_required
    # @HTTP_AUTH.login_required
+20 −6
Original line number Original line Diff line number Diff line
import json
import json
import logging
import logging
import uuid
import uuid
from typing import Optional
from typing import Dict, List, Optional


from common.Constants import DEFAULT_CONTEXT_NAME
from common.Constants import DEFAULT_CONTEXT_NAME
from common.proto.context_pb2 import (
from common.proto.context_pb2 import (
@@ -16,7 +16,6 @@ from common.proto.context_pb2 import (
)
)
from common.tools.context_queries.Slice import get_slice_by_defualt_name
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.grpc.ConfigRules import update_config_rule_custom
from common.tools.grpc.Tools import grpc_message_to_json
from context.client import ContextClient
from context.client import ContextClient


from .YangValidator import YangValidator
from .YangValidator import YangValidator
@@ -41,7 +40,7 @@ def get_custom_config_rule(
            return cr
            return cr




def sort_endpoints(endpoinst_list: list, sdps: list, connection_group: dict) -> list:
def sort_endpoints(endpoinst_list: List, sdps: List, connection_group: Dict) -> List:
    src_sdp_id = connection_group["connectivity-construct"][0]["p2p-sender-sdp"]
    src_sdp_id = connection_group["connectivity-construct"][0]["p2p-sender-sdp"]
    sdp_id_name_mapping = {sdp["id"]: sdp["node-id"] for sdp in sdps}
    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]:
@@ -50,8 +49,8 @@ def sort_endpoints(endpoinst_list: list, sdps: list, connection_group: dict) ->




def replace_ont_endpoint_with_emu_dc(
def replace_ont_endpoint_with_emu_dc(
    endpoint_list: list, context_client: ContextClient
    endpoint_list: List, context_client: ContextClient
) -> list:
) -> List:
    link_list = context_client.ListLinks(Empty())
    link_list = context_client.ListLinks(Empty())
    links = list(link_list.links)
    links = list(link_list.links)
    devices_list = context_client.ListDevices(Empty())
    devices_list = context_client.ListDevices(Empty())
@@ -96,13 +95,28 @@ def replace_ont_endpoint_with_emu_dc(
    return endpoint_list
    return endpoint_list




def validate_ietf_slice_data(request_data: dict) -> None:
def validate_ietf_slice_data(request_data: Dict) -> None:
    yang_validator = YangValidator("ietf-network-slice-service")
    yang_validator = YangValidator("ietf-network-slice-service")
    _ = yang_validator.parse_to_dict(request_data)
    _ = yang_validator.parse_to_dict(request_data)
    yang_validator.destroy()
    yang_validator.destroy()




class IETFSliceHandler:
class IETFSliceHandler:
    @staticmethod
    def get_all_ietf_slices(context_client: ContextClient) -> Dict:
        slices_list = context_client.ListSlices(Empty())
        slices = slices_list.slices
        ietf_slices = {"network-slice-services": {"slice-service": []}}
        for slice in slices:
            candidate_cr = get_custom_config_rule(
                slice.slice_config, CANDIDATE_RESOURCE_KEY
            )
            candidate_ietf_data = json.loads(candidate_cr.custom.resource_value)
            ietf_slices["network-slice-services"]["slice-service"].append(
                candidate_ietf_data["network-slice-services"]["slice-service"][0]
            )
        return ietf_slices

    @staticmethod
    @staticmethod
    def create_slice_service(
    def create_slice_service(
        request_data: dict, context_client: ContextClient
        request_data: dict, context_client: ContextClient