openapi: 3.0.1
info:
  title: NCMP Inventory API
  description: NCMP Inventory API
  version: "1.0"
servers:
  - url: /ncmpInventory
security:
  - basicAuth: []
paths:
  /v1/ch:
    post:
      tags:
        - network-cm-proxy-inventory
      summary: DMI notifies NCMP of new CM Handles
      description: "Register a DMI Plugin with any new, updated or removed CM Handles."
      operationId: updateDmiPluginRegistration
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RestDmiPluginRegistration'
        required: true
      responses:
        "200":
          description: No Content
          content: {}
        "400":
          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
        "401":
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
              example:
                status: 401
                message: Unauthorized error message
                details: Unauthorized error details
        "403":
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
              example:
                status: 403
                message: Forbidden error message
                details: Forbidden error details
        "500":
          description: Partial or Complete failure. The error details are provided
            in the response body and all supported error codes are documented in the
            example.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DmiPluginRegistrationErrorResponse'
              example:
                failedCreatedCmHandles:
                  - cmHandle: my-cm-handle-01
                    errorCode: "00"
                    errorText: Unknown error. <error-details>
                  - cmHandle: my-cm-handle-02
                    errorCode: "01"
                    errorText: cm-handle already exists
                  - cmHandle: my-cm-handle-03
                    errorCode: "03"
                    errorText: cm-handle has an invalid character(s) in id
                failedUpdatedCmHandles:
                  - cmHandle: my-cm-handle-01
                    errorCode: "00"
                    errorText: Unknown error. <error-details>
                  - cmHandle: my-cm-handle-02
                    errorCode: "02"
                    errorText: cm-handle does not exist
                  - cmHandle: my-cm-handle-03
                    errorCode: "03"
                    errorText: cm-handle has an invalid character(s) in id
                failedRemovedCmHandles:
                  - cmHandle: my-cm-handle-01
                    errorCode: "00"
                    errorText: Unknown error. <error-details>
                  - cmHandle: my-cm-handle-02
                    errorCode: "02"
                    errorText: cm-handle does not exists
                  - cmHandle: my-cm-handle-03
                    errorCode: "03"
                    errorText: cm-handle has an invalid character(s) in id
  /v1/ch/cmHandles:
    get:
      tags:
        - network-cm-proxy-inventory
      summary: "Get all cm handle IDs for a registered DMI plugin (DMI plugin, DMI\
        \ data plugin, DMI model plugin)"
      description: Get all cm handle IDs for a registered DMI plugin
      operationId: getAllCmHandleIdsForRegisteredDmi
      parameters:
        - name: dmi-plugin-identifier
          in: query
          description: dmi-plugin-identifier
          required: true
          schema:
            type: string
            example: my-dmi-plugin
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        "401":
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
              example:
                status: 401
                message: Unauthorized error message
                details: Unauthorized error details
        "403":
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
              example:
                status: 403
                message: Forbidden error message
                details: Forbidden error details
        "500":
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
              example:
                status: 500
                message: Internal Server Error
                details: Internal Server Error occurred
  /v1/ch/searches:
    post:
      tags:
        - network-cm-proxy-inventory
      summary: Query for CM Handle IDs
      description: "Query and get CMHandleIds for additional properties, public properties\
        \ and registered DMI plugin (DMI plugin, DMI data plugin, DMI model plugin)."
      operationId: searchCmHandleIds
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CmHandleQueryParameters'
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        "401":
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
              example:
                status: 401
                message: Unauthorized error message
                details: Unauthorized error details
        "403":
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
              example:
                status: 403
                message: Forbidden error message
                details: Forbidden error details
        "500":
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
              example:
                status: 500
                message: Internal Server Error
                details: Internal Server Error occurred
components:
  schemas:
    RestDmiPluginRegistration:
      type: object
      properties:
        dmiPlugin:
          type: string
          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/RestInputCmHandle'
        updatedCmHandles:
          type: array
          items:
            $ref: '#/components/schemas/RestInputCmHandle'
        removedCmHandles:
          type: array
          example:
            - my-cm-handle1
            - my-cm-handle2
            - my-cm-handle3
          items:
            type: string
    RestInputCmHandle:
      required:
        - cmHandle
      type: object
      properties:
        cmHandle:
          type: string
          example: my-cm-handle
        cmHandleProperties:
          $ref: '#/components/schemas/RestCmHandleProperties'
        publicCmHandleProperties:
          $ref: '#/components/schemas/RestCmHandleProperties'
    RestCmHandleProperties:
      type: object
      additionalProperties:
        type: string
        example: my-property
    ErrorMessage:
      title: Error
      type: object
      properties:
        status:
          type: string
        message:
          type: string
        details:
          type: string
    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>
    CmHandleQueryParameters:
      title: Cm Handle query parameters for executing cm handle search
      type: object
      properties:
        cmHandleQueryParameters:
          type: array
          items:
            $ref: '#/components/schemas/ConditionProperties'
        conditions:
          type: array
          description: "not necessary, it is just for backward compatibility"
          deprecated: true
          items:
            $ref: '#/components/schemas/OldConditionProperties'
    ConditionProperties:
      properties:
        conditionName:
          type: string
        conditionParameters:
          type: array
          items:
            type: object
            additionalProperties:
              type: string
    OldConditionProperties:
      properties:
        name:
          type: string
        conditionParameters:
          type: array
          items:
            $ref: '#/components/schemas/ModuleNameAsJsonObject'
      deprecated: true
    ModuleNameAsJsonObject:
      properties:
        moduleName:
          type: string
          example: my-module
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic