From: egernug Date: Tue, 13 May 2025 11:10:54 +0000 (+0100) Subject: Move DMI-Plugin and DataJob API into CPS repo X-Git-Tag: 3.6.3~16^2~1 X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F73%2F140873%2F1;p=cps.git Move DMI-Plugin and DataJob API into CPS repo Issue-ID: CPS-2811 Change-Id: Idc5931ab81c7d6b836e589a024cb7df153bd48c8 Signed-off-by: egernug --- diff --git a/docs/api/swagger/dmi/dmi-components.yml b/docs/api/swagger/dmi/dmi-components.yml new file mode 100644 index 0000000000..a14771b1e3 --- /dev/null +++ b/docs/api/swagger/dmi/dmi-components.yml @@ -0,0 +1,318 @@ +# ============LICENSE_START======================================================= +# Copyright (C) 2021-2025 OpenInfra Foundation Europe. All rights reserved. +# Modifications Copyright (C) 2022 Bell Canada +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END========================================================= + +components: + securitySchemes: + basicAuth: + type: http + scheme: basic + schemas: + ErrorMessage: + type: object + title: Error + properties: + status: + type: string + message: + type: string + details: + type: string + + CmHandles: + type: object + properties: + cmHandles: + type: array + example: ["cmHandleId1","cmHandleId2","cmHandleId3"] + items: + type: string + + ModuleReferencesRequest: + type: object + properties: + moduleSetTag: + type: string + cmHandleProperties: + $ref: '#/components/schemas/cmHandleProperties' + + ResourceDataOperationRequests: + type: array + items: + type: object + title: 'DataOperationRequest' + properties: + operation: + type: string + example: 'read' + operationId: + description: 'it is recommended that the operationId is unique within the scope of the request' + type: string + example: '12' + datastore: + type: string + example: 'ncmp-datastore:passthrough-operational' + options: + type: string + example: '(fields=NRCellDU/attributes/cellLocalId)' + resourceIdentifier: + type: string + example: '/ManagedElement=NRNode1/GNBDUFunction=1' + cmHandles: + type: array + items: + $ref: '#/components/schemas/dmiOperationCmHandle' + required: + - operation + - operationId + - datastore + - cmHandles + + dmiOperationCmHandle: + type: object + title: 'CmHandle with properties for DMI' + properties: + id: + type: string + cmHandleProperties: + additionalProperties: + type: string + moduleSetTag: + type: string + example: module-set-tag1 + example: + id: cmHandle123 + cmHandleProperties: + myProp: some value + otherProp: other value + moduleSetTag: module-set-tag1 + + ModuleResourcesReadRequest: + type: object + properties: + moduleSetTag: + type: string + description: Module set tag of the given cm handle + example: Module-set-tag-1 + required: false + data: + type: object + properties: + modules: + type: array + items: + type: object + properties: + name: + type: string + example: my-name + revision: + type: string + example: my-revision + cmHandleProperties: + $ref: '#/components/schemas/cmHandleProperties' + + ModuleSet: + type: object + properties: + schemas: + type: array + items: + type: object + properties: + moduleName: + type: string + example: my-module-name + revision: + type: string + example: my-revision + namespace: + type: string + example: my-namespace + + YangResources: + type: array + items: + $ref: '#/components/schemas/YangResource' + + YangResource: + properties: + yangSource: + type: string + example: my-yang-source + moduleName: + type: string + example: my-module-name + revision: + type: string + example: my-revision + + DataAccessRequest: + type: object + properties: + operation: + type: string + enum: [ read, create, update, patch, delete ] + example: read + dataType: + type: string + example: my-data-type + data: + type: string + example: my-data + cmHandleProperties: + $ref: '#/components/schemas/cmHandleProperties' + requestId: + type: string + example: 3a9ce55c-e365-4dc9-8da3-a06f07cbc6d7 + moduleSetTag: + type: string + example: module-set-tag1 + + cmHandleProperties: + type: object + nullable: true + additionalProperties: + type: string + example: {"prop1":"value1","prop2":"value2"} + + responses: + NoContent: + description: No Content + content: {} + + BadRequest: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorMessage' + example: + status: 400 + message: Bad Request + details: The provided request is not valid + + NotFound: + description: The specified resource was not found + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorMessage' + example: + status: 404 + message: Resource Not Found + details: The requested resource is not found + + ServerError: + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorMessage' + example: + status: 500 + message: Internal Server Error + details: Internal Server Error occured + + NotImplemented: + description: Not Implemented + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorMessage' + example: + status: 501 + message: Not Implemented + details: Method Not Implemented + + parameters: + cmHandleInPath: + name: cmHandle + in: path + description: The CM handle or alternate identifier for a network function, network element, subnetwork, or any other CM object managed by Network CM Proxy + required: true + schema: + type: string + example: my-cm-handle + + resourceIdentifierInQuery: + name: resourceIdentifier + in: query + description: Resource identifier to get/set the resource data + required: true + schema: + type: string + example: '/ManagedElement=NRNode1/GNBDUFunction=1' + + optionsParamInQuery: + name: options + in: query + description: options parameter in query, it is mandatory to wrap key(s)=value(s) in parenthesis'()'. + required: false + schema: + type: string + examples: + sample1: + value: + options: (fields=NRCellDU/attributes/cellLocalId) + + topicParamInQuery: + name: topic + in: query + description: topic name passed from client(NCMP). + required: false + schema: + type: string + examples: + sample1: + value: my-topic-name + + requiredTopicParamInQuery: + name: topic + in: query + description: mandatory topic name passed from client(NCMP). + required: true + schema: + type: string + examples: + sample1: + value: + topic: my-topic-name + + requiredRequestIdParamInQuery: + name: requestId + in: query + description: request ID generated by NCMP and is sent here and sent as an acknowledgement for the client request. + required: true + schema: + type: string + examples: + sample1: + value: 4753fc1f-7de2-449a-b306-a6204b5370b3 + + datastoreName: + name: datastore-name + in: path + description: The type of the requested data + required: true + schema: + type: string + example: ncmp-datastore:passthrough-operational or ncmp-datastore:passthrough-running + +security: + - basicAuth: [] diff --git a/docs/api/swagger/dmi/openapi-datajob.yml b/docs/api/swagger/dmi/openapi-datajob.yml new file mode 100644 index 0000000000..860486cf1a --- /dev/null +++ b/docs/api/swagger/dmi/openapi-datajob.yml @@ -0,0 +1,333 @@ +# ============LICENSE_START======================================================= +# Copyright (C) 2024-2025 OpenInfra Foundation Europe. All rights reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END========================================================= + +openapi: 3.0.3 +info: + title: NCMP Data Subjob API + description: Support datajobs through one or more subjob for each DMI and Data Producer Identifier combination + version: 1.7.0 +servers: + - url: /dmi +tags: + - description: DMI plugin rest apis + name: dmi-datajob +paths: + /v1/cmreadJob: + post: + description: Create a read request + operationId: readDataJob + parameters: + - $ref: '#/dmi-components/parameters/destinationInQuery' + requestBody: + description: Operation body + content: + application/3gpp-json-patch+json: + schema: + $ref: '#/dmi-components/schemas/SubjobReadRequest' + tags: + - dmi-datajob + responses: + "501": + $ref: '#/dmi-components/responses/NotImplemented' + /v1/cmwriteJob: + post: + description: Create a write request + operationId: writeDataJob + parameters: + - $ref: '#/dmi-components/parameters/destinationInQuery' + requestBody: + description: Operation body + content: + application/3gpp-json-patch+json: + schema: + $ref: '#/dmi-components/schemas/SubjobWriteRequest' + tags: + - dmi-datajob + responses: + "501": + $ref: '#/dmi-components/responses/NotImplemented' + /v1/cmwriteJob/dataProducer/{dataProducerId}/dataProducerJob/{dataProducerJobId}/status: + get: + description: Retrieve the status of a specific data job. + operationId: getDataJobStatus + parameters: + - $ref: '#/dmi-components/parameters/dataProducerIdInPath' + - $ref: '#/dmi-components/parameters/dataProducerJobIdInPath' + tags: + - dmi-datajob + responses: + "501": + $ref: '#/dmi-components/responses/NotImplemented' + /v1/cmwriteJob/dataProducer/{dataProducerId}/dataProducerJob/{dataProducerJobId}/result: + get: + description: Retrieve the result of a data job. + operationId: getDataJobResult + parameters: + - $ref: '#/dmi-components/parameters/dataProducerIdInPath' + - $ref: '#/dmi-components/parameters/dataProducerJobIdInPath' + - $ref: '#/dmi-components/parameters/destinationInQuery' + tags: + - dmi-datajob + responses: + "501": + $ref: '#/dmi-components/responses/NotImplemented' + +dmi-components: + parameters: + requestIdInPath: + description: Identifier for the overall Datajob + in: path + name: requestId + required: true + schema: + example: some-identifier + type: string + dataProducerJobIdInPath: + description: Identifier for the data producer job + in: path + name: dataProducerJobId + required: true + schema: + example: some-producer-job-identifier + type: string + dataProducerIdInPath: + name: dataProducerId + in: path + description: Identifier for the data producer + required: true + schema: + type: string + example: some-data-producer-identifier + dataProducerIdInQuery: + name: dataProducerId + in: query + description: Identifier for the data producer + required: true + schema: + type: string + example: some-data-producer-identifier + destinationInQuery: + name: destination + in: query + description: The destination of the results (Kafka topic name or s3 bucket name) + required: true + schema: + type: string + example: some-destination + schemas: + ErrorMessage: + type: object + title: Error + properties: + status: + type: string + message: + type: string + details: + type: string + SubjobReadRequest: + type: object + required: + - dataProducerId + - data + properties: + dataAcceptType: + description: Defines the data response accept type + example: application/vnd.3gpp.object-tree-hierarchical+json + type: string + dataContentType: + description: Defines the data request content type + example: application/3gpp-json-patch+json + type: string + dataProducerId: + description: ID of the producer registered by DMI for the paths in the operations in this request + example: my-data-producer-identifier + type: string + data: + example: + op: read + operationId: 1 + path: SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003/GNBCUCPFunction=2 + attributes: userLabel + scope: + scopeTyp: BASE_ONLY + type: array + items: + type: object + required: + - path + - op + properties: + path: + description: Defines the resource on which operation is executed + example: SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003 + type: string + op: + description: Describes the operation to execute + example: read + type: string + operationId: + description: Unique identifier for the operation within the request + example: 1 + type: string + attributes: + description: This parameter specifies the attributes of the scoped resources that are returned + type: array + items: + example: cellId + type: string + fields: + description: This parameter specifies the attribute fields of the scoped resources that are returned + type: array + items: + type: string + filter: + description: This parameter is used to filter the scoped Managed Objects. Only Managed Objects passing the filter criteria will be fetched + example: NRCellDU/attributes/administrativeState==LOCKED + type: string + scopeType: + description: ScopeType selects MOs depending on relationships with Base Managed Object + example: BASE_ONLY + type: string + scopeLevel: + description: Only used when the scope type is BASE_NTH_LEVEL to specify amount of levels to search + example: 0 + type: integer + moduleSetTag: + description: Module set identifier + example: my-module-set-tag + type: string + cmHandleProperties: + description: Private properties of the cm handle for the given path + $ref: '#/dmi-components/schemas/CmHandleProperties' + SubjobWriteRequest: + type: object + required: + - dataProducerId + - data + properties: + dataAcceptType: + description: Defines the data response accept type + example: application/vnd.3gpp.object-tree-hierarchical+json + type: string + dataContentType: + description: Defines the data request content type + example: application/3gpp-json-patch+json + type: string + dataProducerId: + description: ID of the producer registered by DMI for the paths in the operations in this request + example: my-data-producer-identifier + type: string + dataJobId: + description: Identifier for the overall Data Job + example: my-data-producer-identifier + type: string + data: + example: + op: add + path: SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003/GNBCUCPFunction=1/EUtraNetwork=1/EUtranFrequency=12 + value: + id: 12 + attributes: + userLabel: label12 + type: array + items: + type: object + required: + - path + - op + properties: + path: + description: Defines the resource on which operation is executed + example: SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003 + type: string + op: + description: Describes the operation to execute + example: add + type: string + operationId: + description: Unique identifier for the operation within the request + example: 1 + type: string + moduleSetTag: + description: Module set identifier + example: my-module-set-tag + type: string + cmHandleProperties: + description: Private properties of the cm handle for the given path + $ref: '#/dmi-components/schemas/CmHandleProperties' + value: + description: Value dependent on the op specified. Resource for an add. Object for a replace. ActionParameters for an action. + type: object + oneOf: + - $ref: '#/dmi-components/schemas/Resource' + - $ref: '#/dmi-components/schemas/ActionParameters' + - $ref: '#/dmi-components/schemas/Object' + CmHandleProperties: + description: Private properties of the cm handle for the given path + type: object + Resource: + type: object + properties: + id: + description: Identifier of the resource object + example: resource-identifier + type: string + attributes: + description: Key value map representing the objects class attributes and values + type: object + additionalProperties: + example: 'userLabel: label11' + type: string + ActionParameters: + description: The input of the action in the form of key value pairs + type: object + additionalProperties: + type: string + Object: + type: object + SubjobWriteResponse: + type: object + required: + - subJobId + - dmiServiceName + - dataProducerId + properties: + subJobId: + description: Unique identifier for the sub-job + example: my-sub-job-id + type: string + dmiServiceName: + description: Name of the relevant DMI Service + example: my-dmi-service + type: string + dataProducerId: + description: ID of the producer registered by DMI for the paths in the operations in this request + example: my-data-producer-identifier + type: string + responses: + NotImplemented: + description: Not Implemented + content: + application/json: + schema: + $ref: '#/dmi-components/schemas/ErrorMessage' + example: + status: 501 + message: Not Implemented + details: Method Not Implemented diff --git a/docs/api/swagger/dmi/openapi.yml b/docs/api/swagger/dmi/openapi.yml new file mode 100644 index 0000000000..fc0e546ea8 --- /dev/null +++ b/docs/api/swagger/dmi/openapi.yml @@ -0,0 +1,177 @@ +# ============LICENSE_START======================================================= +# Copyright (C) 2021-2025 OpenInfra Foundation Europe. All rights reserved. +# Modifications Copyright (C) 2022 Bell Canada +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END========================================================= + +openapi: 3.0.1 +info: + title: NCMP DMI Plugin + description: Adds Data Model Inventory Registry capability for ONAP + version: "1.7.0" +servers: + - url: /dmi +tags: + - name: dmi-plugin-internal + description: DMI plugin internal rest apis + - name: dmi-plugin + description: DMI plugin rest apis + + +paths: + /v1/ch/{cmHandle}/modules: + post: + tags: + - dmi-plugin + summary: Get all modules for cm handle + description: Get all modules for given cm handle + operationId: getModuleReferences + parameters: + - $ref: 'dmi-components.yml#/components/parameters/cmHandleInPath' + requestBody: + description: Operational body + content: + application/json: + schema: + $ref: 'dmi-components.yml#/components/schemas/ModuleReferencesRequest' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: 'dmi-components.yml#/components/schemas/ModuleSet' + '404': + $ref: 'dmi-components.yml#/components/responses/NotFound' + '500': + $ref: 'dmi-components.yml#/components/responses/ServerError' + + + /v1/ch/{cmHandle}/moduleResources: + post: + description: Retrieve module resources for one or more modules + tags: + - dmi-plugin + summary: Retrieve module resources + operationId: retrieveModuleResources + parameters: + - $ref: 'dmi-components.yml#/components/parameters/cmHandleInPath' + requestBody: + required: true + content: + application/json: + schema: + $ref: 'dmi-components.yml#/components/schemas/ModuleResourcesReadRequest' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: 'dmi-components.yml#/components/schemas/YangResources' + '404': + $ref: 'dmi-components.yml#/components/responses/NotFound' + '500': + $ref: 'dmi-components.yml#/components/responses/ServerError' + + /v1/inventory/cmHandles: + post: + tags: + - dmi-plugin-internal + summary: register given list of cm handles (internal use only) + description: register given list of cm handles (internal use only) + x-api-audience: component-internal + operationId: registerCmHandles + requestBody: + description: list of cm handles + content: + application/json: + schema: + $ref: 'dmi-components.yml#/components/schemas/CmHandles' + required: true + responses: + '201': + description: Created + content: + text/plain: + schema: + type: string + example: cm-handle registered successfully + '400': + $ref: 'dmi-components.yml#/components/responses/BadRequest' + '500': + $ref: 'dmi-components.yml#/components/responses/ServerError' + + /v1/ch/{cmHandle}/data/ds/{datastore-name}: + post: + tags: + - dmi-plugin + summary: Get resource data from passthrough operational or running for a cm handle + description: Get resource data from passthrough operational or running for a cm handle + operationId: dataAccessPassthrough + parameters: + - $ref: 'dmi-components.yml#/components/parameters/datastoreName' + - $ref: 'dmi-components.yml#/components/parameters/cmHandleInPath' + - $ref: 'dmi-components.yml#/components/parameters/resourceIdentifierInQuery' + - $ref: 'dmi-components.yml#/components/parameters/optionsParamInQuery' + - $ref: 'dmi-components.yml#/components/parameters/topicParamInQuery' + requestBody: + description: Contains collection of cm handles with it's private properties and requestId + content: + application/json: + schema: + $ref: 'dmi-components.yml#/components/schemas/DataAccessRequest' + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + example: + - yangSource: my-yang-source + moduleName: my-module-name + revision: my-revision + '400': + $ref: 'dmi-components.yml#/components/responses/BadRequest' + '500': + $ref: 'dmi-components.yml#/components/responses/ServerError' + + /v1/data: + post: + tags: + - dmi-plugin + summary: Execute a data operation for group of CM handle references. + description: Execute a data operation for group of CM handle (IDs or alternate IDs) by supplied operation details + operationId: getResourceDataForCmHandleDataOperation + parameters: + - $ref: 'dmi-components.yml#/components/parameters/requiredTopicParamInQuery' + - $ref: 'dmi-components.yml#/components/parameters/requiredRequestIdParamInQuery' + requestBody: + description: list of operation details + content: + application/json: + schema: + $ref: 'dmi-components.yml#/components/schemas/ResourceDataOperationRequests' + responses: + '202': + description: Accepted + '400': + $ref: 'dmi-components.yml#/components/responses/BadRequest' + '500': + $ref: 'dmi-components.yml#/components/responses/ServerError' + '501': + $ref: 'dmi-components.yml#/components/responses/NotImplemented' \ No newline at end of file