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

feat: update IETF Slice connection group operations added to TFS NBI

parent f2f4cbc3
Loading
Loading
Loading
Loading
+21 −0
Original line number Original line Diff line number Diff line
@@ -36,6 +36,27 @@ class NSS_Service_Connection_Group(Resource):
        # TODO Return list of current network-slice-services
        # TODO Return list of current network-slice-services
        return response
        return response


    # @HTTP_AUTH.login_required
    def update(self, slice_id: str, connection_group_id: str):
        if not request.is_json:
            raise UnsupportedMediaType("JSON payload is required")
        request_data: Dict = request.json

        context_client = ContextClient()
        slice_request = IETFSliceHandler.update_connection_group(
            slice_id, request_data, context_client
        )
        slice_client = SliceClient()
        slice_client.UpdateSlice(slice_request)
        slice_request = IETFSliceHandler.copy_candidate_ietf_slice_data_to_running(
            slice_id, context_client
        )
        _ = context_client.SetSlice(slice_request)

        response = jsonify({})
        response.status_code = HTTP_CREATED
        return response

    # @HTTP_AUTH.login_required
    # @HTTP_AUTH.login_required
    def delete(self, slice_id: str, connection_group_id: str):
    def delete(self, slice_id: str, connection_group_id: str):
        context_client = ContextClient()
        context_client = ContextClient()
+36 −40
Original line number Original line Diff line number Diff line
@@ -293,6 +293,42 @@ class IETFSliceHandler:
        validate_ietf_slice_data(ietf_data)
        validate_ietf_slice_data(ietf_data)
        return slice
        return slice


    @staticmethod
    def update_connection_group(
        self,
        slice_name: str,
        updated_connection_group: dict,
        context_client: ContextClient,
    ):
        slice_request = get_slice_by_defualt_name(
            context_client, slice_name, rw_copy=False
        )
        slice_config = slice_request.slice_config
        cr = get_custom_config_rule(slice_config, CANDIDATE_RESOURCE_KEY)
        candidate_ietf_data = json.loads(cr.custom.resource_value)
        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"]
        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
        ]
        fields = {
            name: (value, RAISE_IF_DIFFERS)
            for name, value in candidate_ietf_data.items()
        }
        update_config_rule_custom(
            slice_request.slice_config.config_rules, CANDIDATE_RESOURCE_KEY, fields
        )
        slice_request.slice_status.slice_status = SliceStatusEnum.SLICESTATUS_PLANNED
        return slice_request

    @staticmethod
    @staticmethod
    def delete_connection_group(
    def delete_connection_group(
        slice_uuid: str, connection_group_id: str, context_client: ContextClient
        slice_uuid: str, connection_group_id: str, context_client: ContextClient
@@ -321,47 +357,7 @@ class IETFSliceHandler:
        update_config_rule_custom(
        update_config_rule_custom(
            slice_request.slice_config.config_rules, CANDIDATE_RESOURCE_KEY, fields
            slice_request.slice_config.config_rules, CANDIDATE_RESOURCE_KEY, fields
        )
        )
        # src_sdp_id = removed_connection_group["connectivity-construct"][0][
        #     "p2p-sender-sdp"
        # ]
        # dst_sdp_id = removed_connection_group["connectivity-construct"][0][
        #     "p2p-receiver-sdp"
        # ]
        # cr = get_custom_config_rule(slice_config, RUNNING_RESOURCE_KEY)
        # running_ietf_data = json.loads(cr.custom.resource_value)
        # slice_services = running_ietf_data["network-slice-services"]["slice-service"]
        # slice_service = slice_services[0]
        # sdps = slice_service["sdps"]["sdp"]
        slice_request.slice_status.slice_status = SliceStatusEnum.SLICESTATUS_PLANNED
        slice_request.slice_status.slice_status = SliceStatusEnum.SLICESTATUS_PLANNED
        # list_endpoints = []
        # for sdp in sdps:
        #     if sdp["id"] == src_sdp_id:
        #         attachment_circuits = sdp["attachment-circuits"]["attachment-circuit"]
        #         if len(attachment_circuits) != 1:
        #             raise Exception("All SDPs should have 1 attachment-circuit")
        #         endpoint = EndPointId()
        #         endpoint.topology_id.context_id.context_uuid.uuid = DEFAULT_CONTEXT_NAME
        #         endpoint.device_id.device_uuid.uuid = sdp["node-id"]
        #         endpoint.endpoint_uuid.uuid = attachment_circuits[0]["ac-tp-id"]
        #         list_endpoints.append(endpoint)
        #         break
        # else:
        #     raise Exception("Second SDP not found")
        # for sdp in sdps:
        #     if sdp["id"] == dst_sdp_id:
        #         attachment_circuits = sdp["attachment-circuits"]["attachment-circuit"]
        #         if len(attachment_circuits) != 1:
        #             raise Exception("All SDPs should have 1 attachment-circuit")
        #         endpoint = EndPointId()
        #         endpoint.topology_id.context_id.context_uuid.uuid = DEFAULT_CONTEXT_NAME
        #         endpoint.device_id.device_uuid.uuid = sdp["node-id"]
        #         endpoint.endpoint_uuid.uuid = attachment_circuits[0]["ac-tp-id"]
        #         list_endpoints.append(endpoint)
        #         break
        # else:
        #     raise Exception("SDP not found")
        # del slice_request.slice_endpoint_ids[:]
        # slice_request.slice_endpoint_ids.extend(list_endpoints)
        return slice_request
        return slice_request


    @staticmethod
    @staticmethod