Loading src/nbi/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services_Connection_Group.py +21 −0 Original line number Original line Diff line number Diff line Loading @@ -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() Loading src/nbi/service/rest_server/nbi_plugins/ietf_network_slice/ietf_slice_handler.py +36 −40 Original line number Original line Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading Loading
src/nbi/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services_Connection_Group.py +21 −0 Original line number Original line Diff line number Diff line Loading @@ -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() Loading
src/nbi/service/rest_server/nbi_plugins/ietf_network_slice/ietf_slice_handler.py +36 −40 Original line number Original line Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading