Revert "Migrate CPS to Spring-boot 3.0"
[cps.git] / cps-ncmp-rest / docs / openapi / components.yaml
index 1f55ce1..243de62 100644 (file)
@@ -1,6 +1,7 @@
 #  ============LICENSE_START=======================================================
-#  Copyright (C) 2021 Nordix Foundation
+#  Copyright (C) 2021-2023 Nordix Foundation
 #  Modifications Copyright (C) 2021 Pantheon.tech
+#  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.
@@ -30,87 +31,423 @@ components:
           type: string
         details:
           type: string
-
+    # DMI Server Exception Schema
+    DmiErrorMessage:
+      title: DMI Error Message
+      type: object
+      properties:
+        message:
+          type: string
+          example: 'Bad Gateway Error Message NCMP'
+        dmi-response:
+          type: object
+          properties:
+            http-code:
+              type: integer
+              example: 400
+            body:
+              type: string
+              example: Bad Request
     # Request Schemas
     RestDmiPluginRegistration:
       type: object
       properties:
         dmiPlugin:
           type: string
-          example: onap-dmi-plugin
+          example: my-dmi-plugin
+          default: ""
+        dmiDataPlugin:
+          type: string
+          example: my-dmi-data-plugin
+          default: ""
+        dmiModelPlugin:
+          type: string
+          example: my-dmi-model-plugin
+          default: ""
         createdCmHandles:
           type: array
           items:
-            $ref: '#/components/schemas/RestCmHandle'
+            $ref: '#/components/schemas/RestInputCmHandle'
         updatedCmHandles:
           type: array
           items:
-            $ref: '#/components/schemas/RestCmHandle'
+            $ref: '#/components/schemas/RestInputCmHandle'
+            example:
+              cmHandle: my-cm-handle
+              cmHandleProperties:
+                add-my-property: add-property
+                update-my-property: updated-property
+                delete-my-property: '~'
+              publicCmHandleProperties:
+                add-my-property: add-property
+                update-my-property: updated-property
+                delete-my-property: '~'
         removedCmHandles:
           type: array
           items:
             type: string
+          example: [ my-cm-handle1, my-cm-handle2, my-cm-handle3 ]
+    DmiPluginRegistrationErrorResponse:
+      type: object
+      properties:
+        failedCreatedCmHandles:
+          type: array
+          items:
+            $ref: '#/components/schemas/CmHandlerRegistrationErrorResponse'
+        failedUpdatedCmHandles:
+          type: array
+          items:
+            $ref: '#/components/schemas/CmHandlerRegistrationErrorResponse'
+        failedRemovedCmHandles:
+          type: array
+          items:
+            $ref: '#/components/schemas/CmHandlerRegistrationErrorResponse'
+    CmHandlerRegistrationErrorResponse:
+      type: object
+      properties:
+        cmHandle:
+          type: string
+          example: my-cm-handle
+        errorCode:
+          type: string
+          example: '00'
+        errorText:
+          type: string
+          example: 'Unknown error. <error-details>'
 
-    RestCmHandle:
+    RestInputCmHandle:
       required:
         - cmHandle
       type: object
       properties:
         cmHandle:
           type: string
-          example: cmHandle123
+          example: my-cm-handle
         cmHandleProperties:
-            $ref: '#/components/schemas/RestCmHandleAdditionalProperties'
-    RestCmHandleAdditionalProperties:
-        type: object
-        additionalProperties:
-            type: string
-            example: system-001
+          $ref: '#/components/schemas/RestCmHandleProperties'
+        publicCmHandleProperties:
+          $ref: '#/components/schemas/RestCmHandleProperties'
+        moduleSetTag:
+          type: string
+          example: "my-module-set-tag"
+    RestCmHandleProperties:
+      type: object
+      additionalProperties:
+        type: string
+        example: my-property
+
+    #Response Schemas
+    RestModuleReference:
+      type: object
+      title: Module reference details
+      properties:
+        moduleName:
+          type: string
+          example: my-module-name
+        revision:
+          type: string
+          example: my-module-revision
 
-    Conditions:
+    RestModuleDefinition:
       type: object
+      title: Module definitions
       properties:
+        moduleName:
+          type: string
+          example: my-module-name
+        revision:
+          type: string
+          example: 2020-09-15
+        content:
+          type: string
+          example: |
+            module stores {
+              yang-version 1.1;
+              namespace 'org:onap:ccsdk:sample';
+              prefix book-store;
+              revision '2020-09-15' {
+                description
+                'Sample Model';
+              }
+            }
+
+    CmHandleQueryParameters:
+      type: object
+      title: Cm Handle query parameters for executing cm handle search
+      properties:
+        cmHandleQueryParameters:
+          type: array
+          items:
+            $ref: '#/components/schemas/ConditionProperties'
         conditions:
-          $ref: '#/components/schemas/ConditionsData'
-    ConditionsData:
-      type: array
-      items:
-        type: object
-        $ref: '#/components/schemas/ConditionProperties'
+          deprecated: true
+          type: array
+          items:
+            $ref: '#/components/schemas/OldConditionProperties'
+          description: not necessary, it is just for backward compatibility
+
     ConditionProperties:
+      properties:
+        conditionName:
+          type: string
+        conditionParameters:
+          type: array
+          items:
+            type: object
+            additionalProperties:
+              type: string
+    OldConditionProperties:
+      deprecated: true
       properties:
         name:
           type: string
-          example: hasAllModules
         conditionParameters:
-          $ref: '#/components/schemas/ConditionParameters'
-    ConditionParameters:
-      type: array
-      items:
-        type: object
-        $ref: '#/components/schemas/ConditionParameter'
-    ConditionParameter:
-        properties:
-          moduleName:
-            type: string
-            example: someModuleName
+          type: array
+          items:
+            $ref: '#/components/schemas/ModuleNameAsJsonObject'
+    ModuleNameAsJsonObject:
+      properties:
+        moduleName:
+          type: string
+          example: my-module
 
-    #Response Schemas
-    CmHandles:
+    RestOutputCmHandle:
       type: object
+      title: CM handle Details
       properties:
-        cmHandles:
-          $ref: '#/components/schemas/CmHandleProperties'
-    CmHandleProperties:
+        cmHandle:
+          type: string
+          example: my-cm-handle1
+        publicCmHandleProperties:
+          $ref: '#/components/schemas/CmHandlePublicProperties'
+        state:
+          $ref: '#/components/schemas/CmHandleCompositeState'
+    CmHandlePublicProperties:
       type: array
       items:
         type: object
-        $ref: '#/components/schemas/CmHandleProperty'
-    CmHandleProperty:
+        additionalProperties:
+          type: string
+          example: Book Type
+    CmHandleCompositeState:
+      type: object
       properties:
-        cmHandleId:
+        cmHandleState:
           type: string
-          example: someCmHandleId
+          example: ADVISED
+        lockReason:
+          $ref: '#/components/schemas/lock-reason'
+        lastUpdateTime:
+          type: string
+          example: 2022-12-31T20:30:40.000+0000
+        dataSyncEnabled:
+          type: boolean
+          example: false
+        dataSyncState:
+          $ref: '#/components/schemas/dataStores'
+
+    lock-reason:
+      type: object
+      properties:
+        reason:
+          type: string
+          example: LOCKED_MISBEHAVING
+        details:
+          type: string
+          example: locked due to failure in module sync
+
+    dataStores:
+      type: object
+      properties:
+        operational:
+          $ref: '#/components/schemas/sync-state'
+        running:
+          $ref: '#/components/schemas/sync-state'
+
+    sync-state:
+      type: object
+      properties:
+        syncState:
+          type: string
+          example: NONE_REQUESTED
+        lastSyncTime:
+          type: string
+          example: 2022-12-31T20:30:40.000+0000
+
+    RestOutputCmHandlePublicProperties:
+      type: object
+      properties:
+        publicCmHandleProperties:
+          $ref: '#/components/schemas/CmHandlePublicProperties'
+
+    RestOutputCmHandleCompositeState:
+      type: object
+      properties:
+        state:
+          $ref: '#/components/schemas/CmHandleCompositeState'
+    # Data Operation Request Schemas
+    DataOperationRequest:
+      type: object
+      title: execute data operation for given array of operations
+      properties:
+        operations:
+          type: array
+          items:
+            $ref: '#/components/schemas/DataOperationDefinition'
+          description: contains group of data operation requests
+    DataOperationDefinition:
+      required:
+        - operation
+        - datastore
+        - operationId
+      properties:
+        operation:
+          type: string
+          example: 'read'
+        operationId:
+          type: string
+          example: '12'
+        datastore:
+          type: string
+          example: 'ncmp-datastore:passthrough-operational'
+        options:
+          type: string
+          example: '(fields=schemas/schema)'
+        resourceIdentifier:
+          type: string
+          example: 'parent/child'
+        targetIds:
+          type: array
+          items:
+            type: string
+            example: [ "da310eecdb8d44c2acc0ddaae01174b1","c748c58f8e0b438f9fd1f28370b17d47" ]
+
+  examples:
+    dataSampleRequest:
+      summary: Sample request
+      description: Sample request body
+      value:
+        test:bookstore:
+          bookstore-name: Chapters
+          categories:
+            - code: '01'
+              name: SciFi
+              books:
+                - authors:
+                    - Iain M. Banks
+                    - Ursula K. Le Guin
+            - code: '02'
+              name: kids
+              books:
+                - authors:
+                    - Philip Pullman
+
+    dataSamplePatchRequest:
+      summary: Sample patch request
+      description: Sample patch request body
+      value:
+        ietf-restconf:yang-patch:
+          patch-id: patch-1
+          edit:
+            - edit-id: edit1
+              operation: merge
+              target: /
+              value:
+                test:bookstore:
+                  bookstore-name: Chapters
+                  categories:
+                    - code: '01'
+                      name: Science
+                      books:
+                        - authors:
+                            - Author1
+                            - Author2
+                    - code: '02'
+                      name: Arts
+                      books:
+                        - authors:
+                            - Author3
+            - edit-id: edit2
+              operation: merge
+              target: /
+              value:
+                test:bookstore:
+                  bookstore-name: Novels
+                  categories:
+                    - code: '03'
+                      name: History
+                      books:
+                        - authors:
+                            - Iain M. Banks
+                            - Ursula K. Le Guin
+                    - code: '04'
+                      name: Fiction
+                      books:
+                        - authors:
+                            - Philip Pullman
+
+    dataSampleResponse:
+      summary: Sample response
+      description: Sample response for selecting 'sample 1'.
+      value:
+        bookstore:
+          categories:
+            - code: '01'
+              books:
+                - authors:
+                    - Iain M. Banks
+                    - Ursula K. Le Guin
+              name: SciFi
+            - code: '02'
+              books:
+                - authors:
+                    - Philip Pullman
+              name: kids
+
+    allCmHandleQueryParameters:
+      value:
+        cmHandleQueryParameters:
+          - conditionName: hasAllModules
+            conditionParameters:
+              - { "moduleName": "my-module-1" }
+              - { "moduleName": "my-module-2" }
+              - { "moduleName": "my-module-3" }
+          - conditionName: hasAllProperties
+            conditionParameters:
+              - { "Color": "yellow" }
+              - { "Shape": "circle" }
+              - { "Size": "small" }
+          - conditionName: cmHandleWithCpsPath
+            conditionParameters:
+              - { "cpsPath": "//state[@cm-handle-state='ADVISED']" }
+    pubPropCmHandleQueryParameters:
+      value:
+        cmHandleQueryParameters:
+          - conditionName: hasAllProperties
+            conditionParameters:
+              - { "Color": "yellow" }
+              - { "Shape": "circle" }
+              - { "Size": "small" }
+    modulesCmHandleQueryParameters:
+      value:
+        cmHandleQueryParameters:
+          - conditionName: hasAllModules
+            conditionParameters:
+              - { "moduleName": "my-module-1" }
+              - { "moduleName": "my-module-2" }
+              - { "moduleName": "my-module-3" }
+    cpsPathCmHandleStateQueryParameters:
+      value:
+        cmHandleQueryParameters:
+          - conditionName: cmHandleWithCpsPath
+            conditionParameters:
+              - { "cpsPath": "//state[@cm-handle-state='LOCKED']" }
+    cpsPathCmHandleDataSyncQueryParameters:
+      value:
+        cmHandleQueryParameters:
+          - conditionName: cmHandleWithCpsPath
+            conditionParameters:
+              - { "cpsPath": "//state[@data-sync-enabled='true']" }
 
   parameters:
     cmHandleInPath:
@@ -120,6 +457,15 @@ components:
       required: true
       schema:
         type: string
+        example: my-cm-handle
+    dataSyncEnabled:
+      name: dataSyncEnabled
+      in: query
+      description: Is used to enable or disable the data synchronization flag
+      required: true
+      schema:
+        type: boolean
+        example: true
     xpathInQuery:
       name: xpath
       in: query
@@ -138,7 +484,7 @@ components:
     includeDescendantsOptionInQuery:
       name: include-descendants
       in: query
-      description: include-descendants
+      description: Determines if descendants are included in response
       required: false
       schema:
         type: boolean
@@ -146,11 +492,24 @@ components:
     cpsPathInQuery:
       name: cps-path
       in: query
-      description: cps-path
+      description: For more details on cps path, please refer https://docs.onap.org/projects/onap-cps/en/latest/cps-path.html
       required: false
       schema:
         type: string
         default: /
+      examples:
+        container cps path:
+          value: //bookstore
+        list attributes cps path:
+          value: //categories[@code=1]
+    dmiPluginIdentifierInQuery:
+      name: dmi-plugin-identifier
+      in: query
+      description: dmi-plugin-identifier
+      required: true
+      schema:
+        type: string
+        example: my-dmi-plugin
     resourceIdentifierInQuery:
       name: resourceIdentifier
       in: query
@@ -160,44 +519,57 @@ components:
       schema:
         type: string
       examples:
-        sample1:
-          value:
-            resourceIdentifier: \parent\child
-        sample2:
+        sample 1:
           value:
-            resourceIdentifier: \parent\listElement[key=value]
-        sample3:
+            resourceIdentifier: \shops\bookstore
+        sample 2:
           value:
-            resourceIdentifier: \parent\listElement[key=value]\grandChild
-        sample4:
+            resourceIdentifier: \shops\bookstore\categories[@code=1]
+        sample 3:
           value:
-            resourceIdentifier: parent=1,child=abc
-    acceptParamInHeader:
-      name: Accept
-      in: header
-      required: false
-      description: Accept parameter for response, if accept parameter is null, that means client can accept any format.
-      schema:
-        type: string
-        enum: [ application/json, application/yang-data+json ]
+            resourceIdentifier: parent=shops,child=bookstore
     optionsParamInQuery:
       name: options
       in: query
-      description: options parameter in query, it is mandatory to wrap key(s)=value(s) in parenthesis'()'.
+      description: options parameter in query, it is mandatory to wrap key(s)=value(s) in parenthesis'()'. The format of options parameter depend on the associated DMI Plugin implementation.
       required: false
       schema:
         type: string
       allowReserved: true
       examples:
-        sample1:
+        sample 1:
+          value:
+            options: (depth=3)
+        sample 2:
           value:
-            options: (key1=value1,key2=value2)
-        sample2:
+            options: (fields=book)
+        sample 3:
+          value:
+            options: (depth=2,fields=book/authors)
+    topicParamInQuery:
+      name: topic
+      in: query
+      description: topic parameter in query.
+      required: false
+      schema:
+        type: string
+      allowReserved: true
+      examples:
+        sample 1:
           value:
-            options: (key1=value1,key2=value1/value2)
-        sample3:
+            topic: my-topic-name
+    requiredTopicParamInQuery:
+      name: topic
+      in: query
+      description: mandatory topic parameter in query.
+      required: true
+      schema:
+        type: string
+      allowReserved: true
+      examples:
+        sample 1:
           value:
-            options: (key1=10,key2=value2,key3=[val31;val32])
+            topic: my-topic-name
     contentParamInHeader:
       name: Content-Type
       in: header
@@ -206,7 +578,15 @@ components:
       schema:
         type: string
         default: application/json
-
+        example: application/yang-data+json
+    datastoreName:
+      name: datastore-name
+      in: path
+      description: The type of the requested data
+      required: true
+      schema:
+        type: string
+        example: ncmp-datastore:running
 
   responses:
     NotFound:
@@ -215,36 +595,60 @@ components:
         application/json:
           schema:
             $ref: '#/components/schemas/ErrorMessage'
+          example:
+            status: 400
+            message: Not found error message
+            details: Not found error details
     Unauthorized:
       description: Unauthorized
       content:
         application/json:
           schema:
             $ref: '#/components/schemas/ErrorMessage'
+          example:
+            status: 401
+            message: Unauthorized error message
+            details: Unauthorized error details
     Forbidden:
       description: Forbidden
       content:
         application/json:
           schema:
             $ref: '#/components/schemas/ErrorMessage'
+          example:
+            status: 403
+            message: Forbidden error message
+            details: Forbidden error details
     BadRequest:
       description: Bad Request
       content:
         application/json:
           schema:
             $ref: '#/components/schemas/ErrorMessage'
+          example:
+            status: 400 BAD_REQUEST
+            message: Bad request error message
+            details: Bad request error details
     Conflict:
       description: Conflict
       content:
         application/json:
           schema:
             $ref: '#/components/schemas/ErrorMessage'
+          example:
+            status: 409 CONFLICT
+            message: Conflict error message
+            details: Conflict error details
     NotImplemented:
       description: The given path has not been implemented
       content:
         application/json:
           schema:
             $ref: '#/components/schemas/ErrorMessage'
+          example:
+            status: 501
+            message: Not implemented error message
+            details: Not implemented error details
     Ok:
       description: OK
       content:
@@ -253,7 +657,28 @@ components:
             type: object
     Created:
       description: Created
-      content: {}
+      content: { }
     NoContent:
       description: No Content
-      content: {}
+      content: { }
+    InternalServerError:
+      description: Internal Server Error
+      content:
+        application/json:
+          schema:
+            $ref: "#/components/schemas/ErrorMessage"
+          example:
+            status: 500
+            message: Internal Server Error
+            details: Internal Server Error occurred
+    BadGateway:
+      description: Bad Gateway
+      content:
+        application/json:
+          schema:
+            $ref: "#/components/schemas/DmiErrorMessage"
+          example:
+            message: "Bad Gateway Error Message NCMP"
+            dmi-response:
+              http-code: 400
+              body: "Bad Request"