Revert "Download DMI API from the newly moved OpenAPI files CPS" 05/140805/1
authorSourabh Sourabh <sourabh.sourabh@est.tech>
Tue, 27 May 2025 14:53:23 +0000 (14:53 +0000)
committerSourabh Sourabh <sourabh.sourabh@est.tech>
Tue, 27 May 2025 14:53:23 +0000 (14:53 +0000)
This reverts commit bec82715175f007b1c54f7c5db6e36d44f417ca6.

Reason for revert: Reason for revert: K6 performance on nordix is failing as dmi-plugin-stub is responding http 500 status for write data job.

Issue-ID: CPS-2815
Change-Id: I6d8cbacb10bf69ffafcd69e64166a240a8bff205
Signed-off-by: sourabh_sourabh <sourabh.sourabh@est.tech>
.gitignore
dmi-service/openapi/components.yml [new file with mode: 0644]
dmi-service/openapi/openapi-datajob.yml [new file with mode: 0644]
dmi-service/openapi/openapi.yml [new file with mode: 0644]
dmi-service/pom.xml
dmi-stub/pom.xml
docs/api/swagger/openapi-datajob.yaml [new file with mode: 0644]
docs/api/swagger/openapi.yaml [new file with mode: 0644]
docs/design.rst

index 19fe1ad..4170caf 100644 (file)
@@ -30,4 +30,4 @@ tmp/
 /__pycache__/*
 
 /docs/docs/
-/docs/.vscode/
+/docs/.vscode/
\ No newline at end of file
diff --git a/dmi-service/openapi/components.yml b/dmi-service/openapi/components.yml
new file mode 100644 (file)
index 0000000..ba9fc45
--- /dev/null
@@ -0,0 +1,318 @@
+#  ============LICENSE_START=======================================================
+#  Copyright (C) 2021-2023 Nordix Foundation
+#  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/dmi-service/openapi/openapi-datajob.yml b/dmi-service/openapi/openapi-datajob.yml
new file mode 100644 (file)
index 0000000..d8aa2bb
--- /dev/null
@@ -0,0 +1,310 @@
+#  ============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: '#/components/parameters/destinationInQuery'
+      requestBody:
+        description: Operation body
+        content:
+          application/3gpp-json-patch+json:
+            schema:
+              $ref: '#/components/schemas/SubjobReadRequest'
+      tags:
+        - dmi-datajob
+      responses:
+        "501":
+          $ref: '#/components/responses/NotImplemented'
+  /v1/cmwriteJob:
+    post:
+      description: Create a write request
+      operationId: writeDataJob
+      parameters:
+        - $ref: '#/components/parameters/destinationInQuery'
+      requestBody:
+        description: Operation body
+        content:
+          application/3gpp-json-patch+json:
+            schema:
+              $ref: '#/components/schemas/SubjobWriteRequest'
+      tags:
+        - dmi-datajob
+      responses:
+        "501":
+          $ref: '#/components/responses/NotImplemented'
+  /v1/cmwriteJob/dataProducer/{dataProducerId}/dataProducerJob/{dataProducerJobId}/status:
+    get:
+      description: Retrieve the status of a specific data job.
+      operationId: getDataJobStatus
+      parameters:
+        - $ref: '#/components/parameters/dataProducerIdInPath'
+        - $ref: '#/components/parameters/dataProducerJobIdInPath'
+      tags:
+        - dmi-datajob
+      responses:
+        "501":
+          $ref: '#/components/responses/NotImplemented'
+  /v1/cmwriteJob/dataProducer/{dataProducerId}/dataProducerJob/{dataProducerJobId}/result:
+    get:
+      description: Retrieve the result of a data job.
+      operationId: getDataJobResult
+      parameters:
+        - $ref: '#/components/parameters/dataProducerIdInPath'
+        - $ref: '#/components/parameters/dataProducerJobIdInPath'
+        - $ref: '#/components/parameters/destinationInQuery'
+      tags:
+        - dmi-datajob
+      responses:
+        "501":
+          $ref: '#/components/responses/NotImplemented'
+
+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: '#/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: '#/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
+                additionalProperties: true
+    CmHandleProperties:
+      description: Private properties of the cm handle for the given path
+      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: '#/components/schemas/ErrorMessage'
+          example:
+            status: 501
+            message: Not Implemented
+            details: Method Not Implemented
diff --git a/dmi-service/openapi/openapi.yml b/dmi-service/openapi/openapi.yml
new file mode 100644 (file)
index 0000000..7bb381b
--- /dev/null
@@ -0,0 +1,177 @@
+#  ============LICENSE_START=======================================================
+#  Copyright (C) 2021-2023 Nordix Foundation
+#  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: 'components.yml#/components/parameters/cmHandleInPath'
+      requestBody:
+        description: Operational body
+        content:
+          application/json:
+            schema:
+              $ref: 'components.yml#/components/schemas/ModuleReferencesRequest'
+      responses:
+        '200':
+          description: OK
+          content:
+            application/json:
+              schema:
+                $ref: 'components.yml#/components/schemas/ModuleSet'
+        '404':
+          $ref: 'components.yml#/components/responses/NotFound'
+        '500':
+          $ref: '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: 'components.yml#/components/parameters/cmHandleInPath'
+      requestBody:
+        required: true
+        content:
+          application/json:
+            schema:
+              $ref: 'components.yml#/components/schemas/ModuleResourcesReadRequest'
+      responses:
+        '200':
+          description: OK
+          content:
+            application/json:
+              schema:
+                $ref: 'components.yml#/components/schemas/YangResources'
+        '404':
+          $ref: 'components.yml#/components/responses/NotFound'
+        '500':
+          $ref: '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: 'components.yml#/components/schemas/CmHandles'
+        required: true
+      responses:
+        '201':
+          description: Created
+          content:
+            text/plain:
+              schema:
+                type: string
+                example: cm-handle registered successfully
+        '400':
+          $ref: 'components.yml#/components/responses/BadRequest'
+        '500':
+          $ref: '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: 'components.yml#/components/parameters/datastoreName'
+        - $ref: 'components.yml#/components/parameters/cmHandleInPath'
+        - $ref: 'components.yml#/components/parameters/resourceIdentifierInQuery'
+        - $ref: 'components.yml#/components/parameters/optionsParamInQuery'
+        - $ref: 'components.yml#/components/parameters/topicParamInQuery'
+      requestBody:
+        description: Contains collection of cm handles with it's private properties and requestId
+        content:
+          application/json:
+            schema:
+              $ref: '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: 'components.yml#/components/responses/BadRequest'
+        '500':
+          $ref: '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: 'components.yml#/components/parameters/requiredTopicParamInQuery'
+        - $ref: 'components.yml#/components/parameters/requiredRequestIdParamInQuery'
+      requestBody:
+        description: list of operation details
+        content:
+          application/json:
+            schema:
+              $ref: 'components.yml#/components/schemas/ResourceDataOperationRequests'
+      responses:
+        '202':
+          description: Accepted
+        '400':
+          $ref: 'components.yml#/components/responses/BadRequest'
+        '500':
+          $ref: 'components.yml#/components/responses/ServerError'
+        '501':
+          $ref: 'components.yml#/components/responses/NotImplemented'
\ No newline at end of file
index 2934a4a..44dadd7 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
   ============LICENSE_START=======================================================
-  Copyright (C) 2024-2025 OpenInfra Foundation Europe. All rights reserved.
+  Copyright (C) 2024 Nordix Foundation
   ================================================================================
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
@@ -44,7 +44,7 @@
         <gmavenplus.plugin.version>4.0.1</gmavenplus.plugin.version>
         <maven.deploy.plugin.version>3.1.2</maven.deploy.plugin.version>
         <maven.surefire.plugin.version>3.3.1</maven.surefire.plugin.version>
-        <openapi.generator.maven.plugin.version>7.12.0</openapi.generator.maven.plugin.version>
+        <openapi.generator.maven.plugin.version>6.6.0</openapi.generator.maven.plugin.version>
         <sonar.version>4.0.0.4121</sonar.version>
         <spring.boot.maven.plugin.version>3.4.4</spring.boot.maven.plugin.version>
         <spotbugs.maven.plugin.version>4.7.3.0</spotbugs.maven.plugin.version>
                             <goal>generate</goal>
                         </goals>
                         <configuration>
-                            <inputSpec>https://gerrit.onap.org/r/gitweb?p=cps.git;a=blob_plain;f=docs/api/swagger/dmi/openapi.yml</inputSpec>
+                            <inputSpec>${project.basedir}/openapi/openapi.yml</inputSpec>
                             <generatorName>spring</generatorName>
                             <generateSupportingFiles>false</generateSupportingFiles>
                             <invokerPackage>org.onap.cps.ncmp.dmi.rest.controller</invokerPackage>
                             <goal>generate</goal>
                         </goals>
                         <configuration>
-                            <inputSpec>https://gerrit.onap.org/r/gitweb?p=cps.git;a=blob_plain;f=docs/api/swagger/dmi/openapi-datajob.yml</inputSpec>
+                            <inputSpec>${project.basedir}/openapi/openapi-datajob.yml</inputSpec>
                             <generatorName>spring</generatorName>
                             <generateSupportingFiles>false</generateSupportingFiles>
                             <invokerPackage>org.onap.cps.ncmp.dmi.datajobs.rest.controller</invokerPackage>
                             </configOptions>
                         </configuration>
                     </execution>
+                    <execution>
+                        <id>openapi-yaml-gen</id>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                        <phase>compile</phase>
+                        <configuration>
+                            <inputSpec>${project.basedir}/openapi/openapi.yml</inputSpec>
+                            <generatorName>openapi-yaml</generatorName>
+                            <configOptions>
+                                <outputFile>openapi/openapi.yaml</outputFile>
+                            </configOptions>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>openapi-datajob-yaml-gen</id>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                        <phase>compile</phase>
+                        <configuration>
+                            <inputSpec>${project.basedir}/openapi/openapi-datajob.yml</inputSpec>
+                            <generatorName>openapi-yaml</generatorName>
+                            <configOptions>
+                                <outputFile>openapi/openapi-datajob.yaml</outputFile>
+                            </configOptions>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-resources-plugin</artifactId>
+                <version>${maven-resources-plugin.version}</version>
+                <executions>
+                    <execution>
+                        <id>copy-to-doc-folder</id>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.basedir}/../docs/api/swagger</outputDirectory>
+                            <overwrite>true</overwrite>
+                            <resources>
+                                <resource>
+                                    <directory>${project.basedir}/target/generated-sources/openapi/openapi/</directory>
+                                    <includes>
+                                        <include>openapi.yaml</include>
+                                        <include>openapi-datajob.yaml</include>
+                                    </includes>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
                 </executions>
             </plugin>
             <plugin>
index a705fcb..f0c0115 100644 (file)
@@ -59,7 +59,7 @@
     <plugin>
         <groupId>org.openapitools</groupId>
         <artifactId>openapi-generator-maven-plugin</artifactId>
-        <version>7.12.0</version>
+        <version>6.6.0</version>
         <executions>
             <execution>
                 <id>code-gen</id>
@@ -67,7 +67,7 @@
                     <goal>generate</goal>
                 </goals>
                 <configuration>
-                    <inputSpec>https://gerrit.onap.org/r/gitweb?p=cps.git;a=blob_plain;f=docs/api/swagger/dmi/openapi-datajob.yml</inputSpec>
+                    <inputSpec>${maven.multiModuleProjectDirectory}/dmi-service/openapi/openapi-datajob.yml</inputSpec>
                     <modelPackage>org.onap.cps.ncmp.dmi.datajobs.model</modelPackage>
                     <apiPackage>org.onap.cps.ncmp.dmi.datajobs.rest.api</apiPackage>
                     <generatorName>spring</generatorName>
                     </configOptions>
                 </configuration>
             </execution>
+            <execution>
+                <id>openapi-yaml-gen</id>
+                <goals>
+                    <goal>generate</goal>
+                </goals>
+                <phase>compile</phase>
+                <configuration>
+                    <inputSpec>${maven.multiModuleProjectDirectory}/dmi-service/openapi/openapi-datajob.yml</inputSpec>
+                    <generatorName>openapi-yaml</generatorName>
+                    <configOptions>
+                        <outputFile>openapi-datajob.yaml</outputFile>
+                    </configOptions>
+                </configuration>
+            </execution>
         </executions>
     </plugin>
     </plugins>
diff --git a/docs/api/swagger/openapi-datajob.yaml b/docs/api/swagger/openapi-datajob.yaml
new file mode 100644 (file)
index 0000000..d6cea5e
--- /dev/null
@@ -0,0 +1,432 @@
+openapi: 3.0.3
+info:
+  description: Support datajobs through one or more subjob for each DMI and Data Producer
+    Identifier combination
+  title: NCMP Data Subjob API
+  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:
+      - description: The destination of the results (Kafka topic name or s3 bucket
+          name)
+        explode: true
+        in: query
+        name: destination
+        required: true
+        schema:
+          example: some-destination
+          type: string
+        style: form
+      requestBody:
+        content:
+          application/3gpp-json-patch+json:
+            schema:
+              $ref: '#/components/schemas/SubjobReadRequest'
+        description: Operation body
+      responses:
+        "501":
+          content:
+            application/json:
+              example:
+                status: 501
+                message: Not Implemented
+                details: Method Not Implemented
+              schema:
+                $ref: '#/components/schemas/ErrorMessage'
+          description: Not Implemented
+      tags:
+      - dmi-datajob
+  /v1/cmwriteJob:
+    post:
+      description: Create a write request
+      operationId: writeDataJob
+      parameters:
+      - description: The destination of the results (Kafka topic name or s3 bucket
+          name)
+        explode: true
+        in: query
+        name: destination
+        required: true
+        schema:
+          example: some-destination
+          type: string
+        style: form
+      requestBody:
+        content:
+          application/3gpp-json-patch+json:
+            schema:
+              $ref: '#/components/schemas/SubjobWriteRequest'
+        description: Operation body
+      responses:
+        "501":
+          content:
+            application/json:
+              example:
+                status: 501
+                message: Not Implemented
+                details: Method Not Implemented
+              schema:
+                $ref: '#/components/schemas/ErrorMessage'
+          description: Not Implemented
+      tags:
+      - dmi-datajob
+  /v1/cmwriteJob/dataProducer/{dataProducerId}/dataProducerJob/{dataProducerJobId}/status:
+    get:
+      description: Retrieve the status of a specific data job.
+      operationId: getDataJobStatus
+      parameters:
+      - description: Identifier for the data producer
+        explode: false
+        in: path
+        name: dataProducerId
+        required: true
+        schema:
+          example: some-data-producer-identifier
+          type: string
+        style: simple
+      - description: Identifier for the data producer job
+        explode: false
+        in: path
+        name: dataProducerJobId
+        required: true
+        schema:
+          example: some-producer-job-identifier
+          type: string
+        style: simple
+      responses:
+        "501":
+          content:
+            application/json:
+              example:
+                status: 501
+                message: Not Implemented
+                details: Method Not Implemented
+              schema:
+                $ref: '#/components/schemas/ErrorMessage'
+          description: Not Implemented
+      tags:
+      - dmi-datajob
+  /v1/cmwriteJob/dataProducer/{dataProducerId}/dataProducerJob/{dataProducerJobId}/result:
+    get:
+      description: Retrieve the result of a data job.
+      operationId: getDataJobResult
+      parameters:
+      - description: Identifier for the data producer
+        explode: false
+        in: path
+        name: dataProducerId
+        required: true
+        schema:
+          example: some-data-producer-identifier
+          type: string
+        style: simple
+      - description: Identifier for the data producer job
+        explode: false
+        in: path
+        name: dataProducerJobId
+        required: true
+        schema:
+          example: some-producer-job-identifier
+          type: string
+        style: simple
+      - description: The destination of the results (Kafka topic name or s3 bucket
+          name)
+        explode: true
+        in: query
+        name: destination
+        required: true
+        schema:
+          example: some-destination
+          type: string
+        style: form
+      responses:
+        "501":
+          content:
+            application/json:
+              example:
+                status: 501
+                message: Not Implemented
+                details: Method Not Implemented
+              schema:
+                $ref: '#/components/schemas/ErrorMessage'
+          description: Not Implemented
+      tags:
+      - dmi-datajob
+components:
+  parameters:
+    requestIdInPath:
+      description: Identifier for the overall Datajob
+      explode: false
+      in: path
+      name: requestId
+      required: true
+      schema:
+        example: some-identifier
+        type: string
+      style: simple
+    dataProducerJobIdInPath:
+      description: Identifier for the data producer job
+      explode: false
+      in: path
+      name: dataProducerJobId
+      required: true
+      schema:
+        example: some-producer-job-identifier
+        type: string
+      style: simple
+    dataProducerIdInPath:
+      description: Identifier for the data producer
+      explode: false
+      in: path
+      name: dataProducerId
+      required: true
+      schema:
+        example: some-data-producer-identifier
+        type: string
+      style: simple
+    dataProducerIdInQuery:
+      description: Identifier for the data producer
+      explode: true
+      in: query
+      name: dataProducerId
+      required: true
+      schema:
+        example: some-data-producer-identifier
+        type: string
+      style: form
+    destinationInQuery:
+      description: The destination of the results (Kafka topic name or s3 bucket name)
+      explode: true
+      in: query
+      name: destination
+      required: true
+      schema:
+        example: some-destination
+        type: string
+      style: form
+  responses:
+    NotImplemented:
+      content:
+        application/json:
+          example:
+            status: 501
+            message: Not Implemented
+            details: Method Not Implemented
+          schema:
+            $ref: '#/components/schemas/ErrorMessage'
+      description: Not Implemented
+  schemas:
+    ErrorMessage:
+      properties:
+        status:
+          type: string
+        message:
+          type: string
+        details:
+          type: string
+      title: Error
+      type: object
+    SubjobReadRequest:
+      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
+          items:
+            $ref: '#/components/schemas/SubjobReadRequest_data_inner'
+          type: array
+      required:
+      - data
+      - dataProducerId
+      type: object
+    SubjobWriteRequest:
+      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
+          items:
+            $ref: '#/components/schemas/SubjobWriteRequest_data_inner'
+          type: array
+      required:
+      - data
+      - dataProducerId
+      type: object
+    CmHandleProperties:
+      description: Private properties of the cm handle for the given path
+      type: object
+    Resource:
+      properties:
+        id:
+          description: Identifier of the resource object
+          example: resource-identifier
+          type: string
+        attributes:
+          additionalProperties:
+            example: "userLabel: label11"
+            type: string
+          description: Key value map representing the objects class attributes and
+            values
+          type: object
+      type: object
+    ActionParameters:
+      additionalProperties:
+        type: string
+      description: The input of the action in the form of key value pairs
+      type: object
+    Object:
+      type: object
+    SubjobWriteResponse:
+      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
+      required:
+      - dataProducerId
+      - dmiServiceName
+      - subJobId
+      type: object
+    SubjobReadRequest_data_inner:
+      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
+          items:
+            example: cellId
+            type: string
+          type: array
+        fields:
+          description: This parameter specifies the attribute fields of the scoped
+            resources that are returned
+          items:
+            type: string
+          type: array
+        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
+          type: object
+      required:
+      - op
+      - path
+      type: object
+    SubjobWriteRequest_data_inner_value:
+      description: Value dependent on the op specified. Resource for an add. Object
+        for a replace. ActionParameters for an action.
+      oneOf:
+      - $ref: '#/components/schemas/Resource'
+      - $ref: '#/components/schemas/ActionParameters'
+      - $ref: '#/components/schemas/Object'
+      type: object
+    SubjobWriteRequest_data_inner:
+      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
+          type: object
+        value:
+          $ref: '#/components/schemas/SubjobWriteRequest_data_inner_value'
+      required:
+      - op
+      - path
+      type: object
diff --git a/docs/api/swagger/openapi.yaml b/docs/api/swagger/openapi.yaml
new file mode 100644 (file)
index 0000000..ef3ccae
--- /dev/null
@@ -0,0 +1,684 @@
+openapi: 3.0.1
+info:
+  description: Adds Data Model Inventory Registry capability for ONAP
+  title: NCMP DMI Plugin
+  version: 1.7.0
+servers:
+- url: /dmi
+tags:
+- description: DMI plugin internal rest apis
+  name: dmi-plugin-internal
+- description: DMI plugin rest apis
+  name: dmi-plugin
+paths:
+  /v1/ch/{cmHandle}/modules:
+    post:
+      description: Get all modules for given cm handle
+      operationId: getModuleReferences
+      parameters:
+      - description: "The CM handle or alternate identifier for a network function,\
+          \ network element, subnetwork, or any other CM object managed by Network\
+          \ CM Proxy"
+        in: path
+        name: cmHandle
+        required: true
+        schema:
+          example: my-cm-handle
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ModuleReferencesRequest'
+        description: Operational body
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ModuleSet'
+          description: OK
+        "404":
+          content:
+            application/json:
+              example:
+                status: 404
+                message: Resource Not Found
+                details: The requested resource is not found
+              schema:
+                $ref: '#/components/schemas/ErrorMessage'
+          description: The specified resource was not found
+        "500":
+          content:
+            application/json:
+              example:
+                status: 500
+                message: Internal Server Error
+                details: Internal Server Error occured
+              schema:
+                $ref: '#/components/schemas/ErrorMessage'
+          description: Internal Server Error
+      summary: Get all modules for cm handle
+      tags:
+      - dmi-plugin
+  /v1/ch/{cmHandle}/moduleResources:
+    post:
+      description: Retrieve module resources for one or more modules
+      operationId: retrieveModuleResources
+      parameters:
+      - description: "The CM handle or alternate identifier for a network function,\
+          \ network element, subnetwork, or any other CM object managed by Network\
+          \ CM Proxy"
+        in: path
+        name: cmHandle
+        required: true
+        schema:
+          example: my-cm-handle
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ModuleResourcesReadRequest'
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/YangResources'
+          description: OK
+        "404":
+          content:
+            application/json:
+              example:
+                status: 404
+                message: Resource Not Found
+                details: The requested resource is not found
+              schema:
+                $ref: '#/components/schemas/ErrorMessage'
+          description: The specified resource was not found
+        "500":
+          content:
+            application/json:
+              example:
+                status: 500
+                message: Internal Server Error
+                details: Internal Server Error occured
+              schema:
+                $ref: '#/components/schemas/ErrorMessage'
+          description: Internal Server Error
+      summary: Retrieve module resources
+      tags:
+      - dmi-plugin
+  /v1/inventory/cmHandles:
+    post:
+      description: register given list of cm handles (internal use only)
+      operationId: registerCmHandles
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/CmHandles'
+        description: list of cm handles
+        required: true
+      responses:
+        "201":
+          content:
+            text/plain:
+              schema:
+                example: cm-handle registered successfully
+                type: string
+          description: Created
+        "400":
+          content:
+            application/json:
+              example:
+                status: 400
+                message: Bad Request
+                details: The provided request is not valid
+              schema:
+                $ref: '#/components/schemas/ErrorMessage'
+          description: Bad Request
+        "500":
+          content:
+            application/json:
+              example:
+                status: 500
+                message: Internal Server Error
+                details: Internal Server Error occured
+              schema:
+                $ref: '#/components/schemas/ErrorMessage'
+          description: Internal Server Error
+      summary: register given list of cm handles (internal use only)
+      tags:
+      - dmi-plugin-internal
+      x-api-audience: component-internal
+  /v1/ch/{cmHandle}/data/ds/{datastore-name}:
+    post:
+      description: Get resource data from passthrough operational or running for a
+        cm handle
+      operationId: dataAccessPassthrough
+      parameters:
+      - description: The type of the requested data
+        in: path
+        name: datastore-name
+        required: true
+        schema:
+          example: ncmp-datastore:passthrough-operational or ncmp-datastore:passthrough-running
+          type: string
+      - description: "The CM handle or alternate identifier for a network function,\
+          \ network element, subnetwork, or any other CM object managed by Network\
+          \ CM Proxy"
+        in: path
+        name: cmHandle
+        required: true
+        schema:
+          example: my-cm-handle
+          type: string
+      - description: Resource identifier to get/set the resource data
+        in: query
+        name: resourceIdentifier
+        required: true
+        schema:
+          example: /ManagedElement=NRNode1/GNBDUFunction=1
+          type: string
+      - description: "options parameter in query, it is mandatory to wrap key(s)=value(s)\
+          \ in parenthesis'()'."
+        examples:
+          sample1:
+            value:
+              options: (fields=NRCellDU/attributes/cellLocalId)
+        in: query
+        name: options
+        required: false
+        schema:
+          type: string
+      - description: topic name passed from client(NCMP).
+        examples:
+          sample1:
+            value: my-topic-name
+        in: query
+        name: topic
+        required: false
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/DataAccessRequest'
+        description: Contains collection of cm handles with it's private properties
+          and requestId
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                example:
+                - yangSource: my-yang-source
+                  moduleName: my-module-name
+                  revision: my-revision
+                type: object
+          description: OK
+        "400":
+          content:
+            application/json:
+              example:
+                status: 400
+                message: Bad Request
+                details: The provided request is not valid
+              schema:
+                $ref: '#/components/schemas/ErrorMessage'
+          description: Bad Request
+        "500":
+          content:
+            application/json:
+              example:
+                status: 500
+                message: Internal Server Error
+                details: Internal Server Error occured
+              schema:
+                $ref: '#/components/schemas/ErrorMessage'
+          description: Internal Server Error
+      summary: Get resource data from passthrough operational or running for a cm
+        handle
+      tags:
+      - dmi-plugin
+  /v1/data:
+    post:
+      description: Execute a data operation for group of CM handle (IDs or alternate
+        IDs) by supplied operation details
+      operationId: getResourceDataForCmHandleDataOperation
+      parameters:
+      - description: mandatory topic name passed from client(NCMP).
+        examples:
+          sample1:
+            value:
+              topic: my-topic-name
+        in: query
+        name: topic
+        required: true
+        schema:
+          type: string
+      - description: request ID generated by NCMP and is sent here and sent as an
+          acknowledgement for the client request.
+        examples:
+          sample1:
+            value: 4753fc1f-7de2-449a-b306-a6204b5370b3
+        in: query
+        name: requestId
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ResourceDataOperationRequests'
+        description: list of operation details
+      responses:
+        "202":
+          description: Accepted
+        "400":
+          content:
+            application/json:
+              example:
+                status: 400
+                message: Bad Request
+                details: The provided request is not valid
+              schema:
+                $ref: '#/components/schemas/ErrorMessage'
+          description: Bad Request
+        "500":
+          content:
+            application/json:
+              example:
+                status: 500
+                message: Internal Server Error
+                details: Internal Server Error occured
+              schema:
+                $ref: '#/components/schemas/ErrorMessage'
+          description: Internal Server Error
+        "501":
+          content:
+            application/json:
+              example:
+                status: 501
+                message: Not Implemented
+                details: Method Not Implemented
+              schema:
+                $ref: '#/components/schemas/ErrorMessage'
+          description: Not Implemented
+      summary: Execute a data operation for group of CM handle references.
+      tags:
+      - dmi-plugin
+components:
+  parameters:
+    cmHandleInPath:
+      description: "The CM handle or alternate identifier for a network function,\
+        \ network element, subnetwork, or any other CM object managed by Network CM\
+        \ Proxy"
+      in: path
+      name: cmHandle
+      required: true
+      schema:
+        example: my-cm-handle
+        type: string
+    datastoreName:
+      description: The type of the requested data
+      in: path
+      name: datastore-name
+      required: true
+      schema:
+        example: ncmp-datastore:passthrough-operational or ncmp-datastore:passthrough-running
+        type: string
+    resourceIdentifierInQuery:
+      description: Resource identifier to get/set the resource data
+      in: query
+      name: resourceIdentifier
+      required: true
+      schema:
+        example: /ManagedElement=NRNode1/GNBDUFunction=1
+        type: string
+    optionsParamInQuery:
+      description: "options parameter in query, it is mandatory to wrap key(s)=value(s)\
+        \ in parenthesis'()'."
+      examples:
+        sample1:
+          value:
+            options: (fields=NRCellDU/attributes/cellLocalId)
+      in: query
+      name: options
+      required: false
+      schema:
+        type: string
+    topicParamInQuery:
+      description: topic name passed from client(NCMP).
+      examples:
+        sample1:
+          value: my-topic-name
+      in: query
+      name: topic
+      required: false
+      schema:
+        type: string
+    requiredTopicParamInQuery:
+      description: mandatory topic name passed from client(NCMP).
+      examples:
+        sample1:
+          value:
+            topic: my-topic-name
+      in: query
+      name: topic
+      required: true
+      schema:
+        type: string
+    requiredRequestIdParamInQuery:
+      description: request ID generated by NCMP and is sent here and sent as an acknowledgement
+        for the client request.
+      examples:
+        sample1:
+          value: 4753fc1f-7de2-449a-b306-a6204b5370b3
+      in: query
+      name: requestId
+      required: true
+      schema:
+        type: string
+  responses:
+    NotFound:
+      content:
+        application/json:
+          example:
+            status: 404
+            message: Resource Not Found
+            details: The requested resource is not found
+          schema:
+            $ref: '#/components/schemas/ErrorMessage'
+      description: The specified resource was not found
+    ServerError:
+      content:
+        application/json:
+          example:
+            status: 500
+            message: Internal Server Error
+            details: Internal Server Error occured
+          schema:
+            $ref: '#/components/schemas/ErrorMessage'
+      description: Internal Server Error
+    BadRequest:
+      content:
+        application/json:
+          example:
+            status: 400
+            message: Bad Request
+            details: The provided request is not valid
+          schema:
+            $ref: '#/components/schemas/ErrorMessage'
+      description: Bad Request
+    NotImplemented:
+      content:
+        application/json:
+          example:
+            status: 501
+            message: Not Implemented
+            details: Method Not Implemented
+          schema:
+            $ref: '#/components/schemas/ErrorMessage'
+      description: Not Implemented
+  schemas:
+    ModuleReferencesRequest:
+      example:
+        moduleSetTag: moduleSetTag
+        cmHandleProperties:
+          key: "{\"prop1\":\"value1\",\"prop2\":\"value2\"}"
+      properties:
+        moduleSetTag:
+          type: string
+        cmHandleProperties:
+          additionalProperties:
+            example: "{\"prop1\":\"value1\",\"prop2\":\"value2\"}"
+            type: string
+          nullable: true
+          type: object
+      type: object
+    cmHandleProperties:
+      additionalProperties:
+        example: "{\"prop1\":\"value1\",\"prop2\":\"value2\"}"
+        type: string
+      nullable: true
+      type: object
+    ModuleSet:
+      example:
+        schemas:
+        - moduleName: my-module-name
+          namespace: my-namespace
+          revision: my-revision
+        - moduleName: my-module-name
+          namespace: my-namespace
+          revision: my-revision
+      properties:
+        schemas:
+          items:
+            $ref: '#/components/schemas/ModuleSet_schemas_inner'
+          type: array
+      type: object
+    ErrorMessage:
+      properties:
+        status:
+          type: string
+        message:
+          type: string
+        details:
+          type: string
+      title: Error
+      type: object
+    ModuleResourcesReadRequest:
+      example:
+        data:
+          modules:
+          - name: my-name
+            revision: my-revision
+          - name: my-name
+            revision: my-revision
+        moduleSetTag: Module-set-tag-1
+        cmHandleProperties:
+          key: "{\"prop1\":\"value1\",\"prop2\":\"value2\"}"
+      properties:
+        moduleSetTag:
+          description: Module set tag of the given cm handle
+          example: Module-set-tag-1
+          type: string
+        data:
+          $ref: '#/components/schemas/ModuleResourcesReadRequest_data'
+        cmHandleProperties:
+          additionalProperties:
+            example: "{\"prop1\":\"value1\",\"prop2\":\"value2\"}"
+            type: string
+          nullable: true
+          type: object
+      type: object
+    YangResources:
+      items:
+        $ref: '#/components/schemas/YangResource'
+      type: array
+    YangResource:
+      example:
+        yangSource: my-yang-source
+        moduleName: my-module-name
+        revision: my-revision
+      properties:
+        yangSource:
+          example: my-yang-source
+          type: string
+        moduleName:
+          example: my-module-name
+          type: string
+        revision:
+          example: my-revision
+          type: string
+    CmHandles:
+      example:
+        cmHandles:
+        - cmHandleId1
+        - cmHandleId2
+        - cmHandleId3
+      properties:
+        cmHandles:
+          example:
+          - cmHandleId1
+          - cmHandleId2
+          - cmHandleId3
+          items:
+            type: string
+          type: array
+      type: object
+    DataAccessRequest:
+      example:
+        data: my-data
+        requestId: 3a9ce55c-e365-4dc9-8da3-a06f07cbc6d7
+        dataType: my-data-type
+        cmHandleProperties:
+          key: "{\"prop1\":\"value1\",\"prop2\":\"value2\"}"
+        moduleSetTag: module-set-tag1
+        operation: read
+      properties:
+        operation:
+          enum:
+          - read
+          - create
+          - update
+          - patch
+          - delete
+          example: read
+          type: string
+        dataType:
+          example: my-data-type
+          type: string
+        data:
+          example: my-data
+          type: string
+        cmHandleProperties:
+          additionalProperties:
+            example: "{\"prop1\":\"value1\",\"prop2\":\"value2\"}"
+            type: string
+          nullable: true
+          type: object
+        requestId:
+          example: 3a9ce55c-e365-4dc9-8da3-a06f07cbc6d7
+          type: string
+        moduleSetTag:
+          example: module-set-tag1
+          type: string
+      type: object
+    ResourceDataOperationRequests:
+      items:
+        $ref: '#/components/schemas/DataOperationRequest'
+      type: array
+    dmiOperationCmHandle:
+      example:
+        id: cmHandle123
+        cmHandleProperties:
+          myProp: some value
+          otherProp: other value
+          moduleSetTag: module-set-tag1
+      properties:
+        id:
+          type: string
+        cmHandleProperties:
+          additionalProperties:
+            type: string
+          type: object
+        moduleSetTag:
+          example: module-set-tag1
+          type: string
+      title: CmHandle with properties for DMI
+      type: object
+    ModuleSet_schemas_inner:
+      example:
+        moduleName: my-module-name
+        namespace: my-namespace
+        revision: my-revision
+      properties:
+        moduleName:
+          example: my-module-name
+          type: string
+        revision:
+          example: my-revision
+          type: string
+        namespace:
+          example: my-namespace
+          type: string
+      type: object
+    ModuleResourcesReadRequest_data_modules_inner:
+      example:
+        name: my-name
+        revision: my-revision
+      properties:
+        name:
+          example: my-name
+          type: string
+        revision:
+          example: my-revision
+          type: string
+      type: object
+    ModuleResourcesReadRequest_data:
+      example:
+        modules:
+        - name: my-name
+          revision: my-revision
+        - name: my-name
+          revision: my-revision
+      properties:
+        modules:
+          items:
+            $ref: '#/components/schemas/ModuleResourcesReadRequest_data_modules_inner'
+          type: array
+      type: object
+    DataOperationRequest:
+      example:
+        resourceIdentifier: /ManagedElement=NRNode1/GNBDUFunction=1
+        datastore: ncmp-datastore:passthrough-operational
+        options: (fields=NRCellDU/attributes/cellLocalId)
+        operationId: "12"
+        cmHandles:
+        - id: cmHandle123
+          cmHandleProperties:
+            myProp: some value
+            otherProp: other value
+            moduleSetTag: module-set-tag1
+        - id: cmHandle123
+          cmHandleProperties:
+            myProp: some value
+            otherProp: other value
+            moduleSetTag: module-set-tag1
+        operation: read
+      properties:
+        operation:
+          example: read
+          type: string
+        operationId:
+          description: it is recommended that the operationId is unique within the
+            scope of the request
+          example: "12"
+          type: string
+        datastore:
+          example: ncmp-datastore:passthrough-operational
+          type: string
+        options:
+          example: (fields=NRCellDU/attributes/cellLocalId)
+          type: string
+        resourceIdentifier:
+          example: /ManagedElement=NRNode1/GNBDUFunction=1
+          type: string
+        cmHandles:
+          items:
+            $ref: '#/components/schemas/dmiOperationCmHandle'
+          type: array
+      required:
+      - cmHandles
+      - datastore
+      - operation
+      - operationId
+      title: DataOperationRequest
+      type: object
index 92975cc..dd1472c 100644 (file)
@@ -1,6 +1,6 @@
 .. This work is licensed under a Creative Commons Attribution 4.0 International License.
 .. http://creativecommons.org/licenses/by/4.0
-.. Copyright (C) 2021-2025 OpenInfra Foundation Europe. All rights reserved.
+.. Copyright (C) 2021-2024 Nordix Foundation
 
 .. DO NOT CHANGE THIS LABEL FOR RELEASE NOTES - EVEN THOUGH IT GIVES A WARNING
 .. _design:
@@ -17,9 +17,9 @@ Offered APIs
 
 The DMI-Plugin supports the public APIs listed in the link below:
 
-:download:`DMI Rest OpenApi Specification <https://gerrit.onap.org/r/gitweb?p=cps.git;a=blob_plain;f=docs/api/swagger/dmi/openapi.yml>`
+:download:`DMI Rest OpenApi Specification <api/swagger/openapi.yaml>`
 
-:download:`DMI Datajob OpenApi Specification <https://gerrit.onap.org/r/gitweb?p=cps.git;a=blob_plain;f=docs/api/swagger/dmi/openapi-datajob.yml>`
+:download:`DMI Datajob OpenApi Specification <api/swagger/openapi-datajob.yaml>`
 
 View Offered APIs
 -----------------