openapi: 3.0.1
info:
  title: NCMP DMI Plugin
  description: Adds Data Model Inventory Registry capability for ONAP
  version: 1.0.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:
      - name: cmHandle
        in: path
        description: The identifier for a network function, network element, subnetwork,
          or any other cm object by managed Network CM Proxy
        required: true
        schema:
          type: string
          example: my-cm-handle
      requestBody:
        description: Operational body
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ModuleReferencesRequest'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModuleSet'
        "404":
          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
        "500":
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
              example:
                status: 500
                message: Internal Server Error
                details: Internal Server Error occured
  /v1/ch/{cmHandle}/moduleResources:
    post:
      tags:
      - dmi-plugin
      summary: Retrieve module resources
      description: Retrieve module resources for one or more modules
      operationId: retrieveModuleResources
      parameters:
      - name: cmHandle
        in: path
        description: The identifier for a network function, network element, subnetwork,
          or any other cm object by managed Network CM Proxy
        required: true
        schema:
          type: string
          example: my-cm-handle
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ModuleResourcesReadRequest'
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/YangResources'
        "404":
          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
        "500":
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
              example:
                status: 500
                message: Internal Server Error
                details: Internal Server Error occured
  /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)
      operationId: registerCmHandles
      requestBody:
        description: list of cm handles
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CmHandles'
        required: true
      responses:
        "201":
          description: Created
          content:
            text/plain:
              schema:
                type: string
                example: cm-handle registered successfully
        "400":
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
              example:
                status: 400
                message: Bad Request
                details: The provided request is not valid
        "500":
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
              example:
                status: 500
                message: Internal Server Error
                details: Internal Server Error occured
      x-api-audience: component-internal
  /v1/ch/{cmHandle}/data/ds/ncmp-datastore:passthrough-operational:
    post:
      tags:
      - dmi-plugin
      summary: Get resource data from passthrough-operational for cm handle
      description: Get resource data from passthrough-operational for cm handle. Will
        support read operations only.
      operationId: dataAccessPassthroughOperational
      parameters:
      - name: cmHandle
        in: path
        description: The identifier for a network function, network element, subnetwork,
          or any other cm object by managed Network CM Proxy
        required: true
        schema:
          type: string
          example: my-cm-handle
      - name: resourceIdentifier
        in: query
        description: Resource identifier to get/set the resource data
        required: true
        allowReserved: true
        schema:
          type: string
          example: my-schema:my-node
      - name: options
        in: query
        description: options parameter in query, it is mandatory to wrap key(s)=value(s)
          in parenthesis'()'.
        required: false
        allowReserved: true
        schema:
          type: string
        examples:
          sample1:
            value:
              options: (key1=value1,key2=value2)
          sample2:
            value:
              options: (key1=value1,key2=value1/value2)
          sample3:
            value:
              options: (key1=10,key2=value2,key3=val31,val32)
      - name: topic
        in: query
        description: topic name passed from client(NCMP).
        required: false
        allowReserved: true
        schema:
          type: string
        examples:
          sample1:
            value: my-topic-name
      requestBody:
        description: Operational body
        content:
          application/json:
            schema:
              $ref: '#/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":
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
              example:
                status: 400
                message: Bad Request
                details: The provided request is not valid
        "500":
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
              example:
                status: 500
                message: Internal Server Error
                details: Internal Server Error occured
  /v1/ch/{cmHandle}/data/ds/ncmp-datastore:passthrough-running:
    post:
      tags:
      - dmi-plugin
      summary: Get, Create or Update request for data passthrough-running for a cm-handle
      description: Post request to Get, Create or to Update resource data for a cm-handle.
        Since all requests need to include additional information in a request body
        HTTP Post is used for all use cases and the actual operation is defined in
        the request body instead.
      operationId: dataAccessPassthroughRunning
      parameters:
      - name: cmHandle
        in: path
        description: The identifier for a network function, network element, subnetwork,
          or any other cm object by managed Network CM Proxy
        required: true
        schema:
          type: string
          example: my-cm-handle
      - name: resourceIdentifier
        in: query
        description: Resource identifier to get/set the resource data
        required: true
        allowReserved: true
        schema:
          type: string
          example: my-schema:my-node
      - name: options
        in: query
        description: options parameter in query, it is mandatory to wrap key(s)=value(s)
          in parenthesis'()'.
        required: false
        allowReserved: true
        schema:
          type: string
        examples:
          sample1:
            value:
              options: (key1=value1,key2=value2)
          sample2:
            value:
              options: (key1=value1,key2=value1/value2)
          sample3:
            value:
              options: (key1=10,key2=value2,key3=val31,val32)
      - name: topic
        in: query
        description: topic name passed from client(NCMP).
        required: false
        allowReserved: true
        schema:
          type: string
        examples:
          sample1:
            value: my-topic-name
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/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
        "201":
          description: Created
          content:
            text/plain:
              schema:
                type: string
                example: my-resource
        "204":
          description: No Content
          content: {}
        "400":
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
              example:
                status: 400
                message: Bad Request
                details: The provided request is not valid
        "500":
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
              example:
                status: 500
                message: Internal Server Error
                details: Internal Server Error occured
components:
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
  schemas:
    ModuleReferencesRequest:
      type: object
      properties:
        cmHandleProperties:
          $ref: '#/components/schemas/cmHandleProperties'
    cmHandleProperties:
      type: object
      additionalProperties:
        type: string
        example: '{"prop1":"value1","prop2":"value2"}'
    ModuleSet:
      type: object
      properties:
        schemas:
          type: array
          items:
            $ref: '#/components/schemas/ModuleSet_schemas'
    ErrorMessage:
      title: Error
      type: object
      properties:
        status:
          type: string
        message:
          type: string
        details:
          type: string
    ModuleResourcesReadRequest:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/ModuleResourcesReadRequest_data'
        cmHandleProperties:
          $ref: '#/components/schemas/cmHandleProperties'
    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
    CmHandles:
      type: object
      properties:
        cmHandles:
          type: array
          example:
          - cmHandleId1
          - cmHandleId2
          - cmHandleId3
          items:
            type: string
    DataAccessRequest:
      type: object
      properties:
        operation:
          type: string
          example: read
          enum:
          - read
          - create
          - update
          - patch
          - delete
        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
    ModuleSet_schemas:
      type: object
      properties:
        moduleName:
          type: string
          example: my-module-name
        revision:
          type: string
          example: my-revision
        namespace:
          type: string
          example: my-namespace
    ModuleResourcesReadRequest_data_modules:
      type: object
      properties:
        name:
          type: string
          example: my-name
        revision:
          type: string
          example: my-revision
    ModuleResourcesReadRequest_data:
      type: object
      properties:
        modules:
          type: array
          items:
            $ref: '#/components/schemas/ModuleResourcesReadRequest_data_modules'

security:
  - basicAuth: []