openapi: 3.0.3
info:
  description: NCMP Inventory API
  title: NCMP Inventory API
  version: "1.0"
servers:
  - url: /ncmpInventory
security:
  - basicAuth: []
paths:
  /v1/ch:
    post:
      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":
          content: {}
          description: No Content
        "400":
          content:
            application/json:
              example:
                status: 400 BAD_REQUEST
                message: Bad request error message
                details: Bad request error details
              schema:
                $ref: '#/components/schemas/ErrorMessage'
          description: Bad Request
        "401":
          content:
            application/json:
              example:
                status: 401
                message: Unauthorized error message
                details: Unauthorized error details
              schema:
                $ref: '#/components/schemas/ErrorMessage'
          description: Unauthorized
        "403":
          content:
            application/json:
              example:
                status: 403
                message: Forbidden error message
                details: Forbidden error details
              schema:
                $ref: '#/components/schemas/ErrorMessage'
          description: Forbidden
        "500":
          content:
            application/json:
              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
              schema:
                $ref: '#/components/schemas/DmiPluginRegistrationErrorResponse'
          description: Partial or Complete failure. The error details are provided
            in the response body and all supported error codes are documented in the
            example.
      summary: DMI notifies NCMP of new CM Handles
      tags:
        - network-cm-proxy-inventory
  /v1/ch/cmHandles:
    get:
      description: Get all cm handle IDs for a registered DMI plugin
      operationId: getAllCmHandleIdsForRegisteredDmi
      parameters:
        - description: dmi-plugin-identifier
          in: query
          name: dmi-plugin-identifier
          required: true
          schema:
            example: my-dmi-plugin
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  type: string
                type: array
          description: OK
        "401":
          content:
            application/json:
              example:
                status: 401
                message: Unauthorized error message
                details: Unauthorized error details
              schema:
                $ref: '#/components/schemas/ErrorMessage'
          description: Unauthorized
        "403":
          content:
            application/json:
              example:
                status: 403
                message: Forbidden error message
                details: Forbidden error details
              schema:
                $ref: '#/components/schemas/ErrorMessage'
          description: Forbidden
        "500":
          content:
            application/json:
              example:
                status: 500
                message: Internal Server Error
                details: Internal Server Error occurred
              schema:
                $ref: '#/components/schemas/ErrorMessage'
          description: Internal Server Error
      summary: "Get all cm handle IDs for a registered DMI plugin (DMI plugin, DMI\
        \ data plugin, DMI model plugin)"
      tags:
        - network-cm-proxy-inventory
  /v1/ch/searches:
    post:
      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":
          content:
            application/json:
              schema:
                items:
                  type: string
                type: array
          description: OK
        "401":
          content:
            application/json:
              example:
                status: 401
                message: Unauthorized error message
                details: Unauthorized error details
              schema:
                $ref: '#/components/schemas/ErrorMessage'
          description: Unauthorized
        "403":
          content:
            application/json:
              example:
                status: 403
                message: Forbidden error message
                details: Forbidden error details
              schema:
                $ref: '#/components/schemas/ErrorMessage'
          description: Forbidden
        "500":
          content:
            application/json:
              example:
                status: 500
                message: Internal Server Error
                details: Internal Server Error occurred
              schema:
                $ref: '#/components/schemas/ErrorMessage'
          description: Internal Server Error
      summary: Query for CM Handle IDs
      tags:
        - network-cm-proxy-inventory
components:
  parameters:
    dmiPluginIdentifierInQuery:
      description: dmi-plugin-identifier
      in: query
      name: dmi-plugin-identifier
      required: true
      schema:
        example: my-dmi-plugin
        type: string
  responses:
    NoContent:
      content: {}
      description: No Content
    BadRequest:
      content:
        application/json:
          example:
            status: 400 BAD_REQUEST
            message: Bad request error message
            details: Bad request error details
          schema:
            $ref: '#/components/schemas/ErrorMessage'
      description: Bad Request
    Unauthorized:
      content:
        application/json:
          example:
            status: 401
            message: Unauthorized error message
            details: Unauthorized error details
          schema:
            $ref: '#/components/schemas/ErrorMessage'
      description: Unauthorized
    Forbidden:
      content:
        application/json:
          example:
            status: 403
            message: Forbidden error message
            details: Forbidden error details
          schema:
            $ref: '#/components/schemas/ErrorMessage'
      description: Forbidden
    InternalServerError:
      content:
        application/json:
          example:
            status: 500
            message: Internal Server Error
            details: Internal Server Error occurred
          schema:
            $ref: '#/components/schemas/ErrorMessage'
      description: Internal Server Error
  schemas:
    RestDmiPluginRegistration:
      example:
        updatedCmHandles:
          - cmHandle: my-cm-handle
            publicCmHandleProperties:
              key: my-property
            cmHandleProperties:
              key: my-property
            moduleSetTag: my-module-set-tag
            trustLevel: COMPLETE
          - cmHandle: my-cm-handle
            publicCmHandleProperties:
              key: my-property
            cmHandleProperties:
              key: my-property
            moduleSetTag: my-module-set-tag
            trustLevel: COMPLETE
        createdCmHandles:
          - cmHandle: my-cm-handle
            publicCmHandleProperties:
              key: my-property
            cmHandleProperties:
              key: my-property
            moduleSetTag: my-module-set-tag
            trustLevel: COMPLETE
          - cmHandle: my-cm-handle
            publicCmHandleProperties:
              key: my-property
            cmHandleProperties:
              key: my-property
            moduleSetTag: my-module-set-tag
            trustLevel: COMPLETE
        dmiPlugin: my-dmi-plugin
        dmiModelPlugin: my-dmi-model-plugin
        upgradedCmHandles:
          cmHandles:
            - my-cm-handle1
            - my-cm-handle2
            - my-cm-handle3
          moduleSetTag: my-module-set-tag
        dmiDataPlugin: my-dmi-data-plugin
        removedCmHandles:
          - my-cm-handle1
          - my-cm-handle2
          - my-cm-handle3
      properties:
        dmiPlugin:
          default: ""
          example: my-dmi-plugin
          type: string
        dmiDataPlugin:
          default: ""
          example: my-dmi-data-plugin
          type: string
        dmiModelPlugin:
          default: ""
          example: my-dmi-model-plugin
          type: string
        createdCmHandles:
          items:
            $ref: '#/components/schemas/RestInputCmHandle'
          type: array
        updatedCmHandles:
          items:
            $ref: '#/components/schemas/RestInputCmHandle'
          type: array
        removedCmHandles:
          example:
            - my-cm-handle1
            - my-cm-handle2
            - my-cm-handle3
          items:
            type: string
          type: array
        upgradedCmHandles:
          $ref: '#/components/schemas/UpgradedCmHandles'
      type: object
    RestInputCmHandle:
      example:
        cmHandle: my-cm-handle
        publicCmHandleProperties:
          key: my-property
        cmHandleProperties:
          key: my-property
        moduleSetTag: my-module-set-tag
        trustLevel: COMPLETE
      properties:
        cmHandle:
          example: my-cm-handle
          type: string
        cmHandleProperties:
          additionalProperties:
            example: my-property
            type: string
          type: object
        publicCmHandleProperties:
          additionalProperties:
            example: my-property
            type: string
          type: object
        moduleSetTag:
          example: my-module-set-tag
          type: string
        trustLevel:
          enum:
            - COMPLETE
            - NONE
          example: COMPLETE
          type: string
      required:
        - cmHandle
      type: object
    RestCmHandleProperties:
      additionalProperties:
        example: my-property
        type: string
      type: object
    UpgradedCmHandles:
      example:
        cmHandles:
          - my-cm-handle1
          - my-cm-handle2
          - my-cm-handle3
        moduleSetTag: my-module-set-tag
      properties:
        cmHandles:
          example:
            - my-cm-handle1
            - my-cm-handle2
            - my-cm-handle3
          items:
            type: string
          type: array
        moduleSetTag:
          example: my-module-set-tag
          type: string
      required:
        - cmHandles
      type: object
    ErrorMessage:
      properties:
        status:
          type: string
        message:
          type: string
        details:
          type: string
      title: Error
      type: object
    DmiPluginRegistrationErrorResponse:
      properties:
        failedCreatedCmHandles:
          items:
            $ref: '#/components/schemas/CmHandlerRegistrationErrorResponse'
          type: array
        failedUpdatedCmHandles:
          items:
            $ref: '#/components/schemas/CmHandlerRegistrationErrorResponse'
          type: array
        failedRemovedCmHandles:
          items:
            $ref: '#/components/schemas/CmHandlerRegistrationErrorResponse'
          type: array
        failedUpgradeCmHandles:
          items:
            $ref: '#/components/schemas/CmHandlerRegistrationErrorResponse'
          type: array
      type: object
    CmHandlerRegistrationErrorResponse:
      properties:
        cmHandle:
          example: my-cm-handle
          type: string
        errorCode:
          example: "00"
          type: string
        errorText:
          example: Unknown error. <error-details>
          type: string
      type: object
    CmHandleQueryParameters:
      example:
        cmHandleQueryParameters:
          - conditionParameters:
              - key: conditionParameters
              - key: conditionParameters
            conditionName: conditionName
          - conditionParameters:
              - key: conditionParameters
              - key: conditionParameters
            conditionName: conditionName
        conditions:
          - name: name
            conditionParameters:
              - moduleName: my-module
              - moduleName: my-module
          - name: name
            conditionParameters:
              - moduleName: my-module
              - moduleName: my-module
      properties:
        cmHandleQueryParameters:
          items:
            $ref: '#/components/schemas/ConditionProperties'
          type: array
        conditions:
          deprecated: true
          description: "not necessary, it is just for backward compatibility"
          items:
            $ref: '#/components/schemas/OldConditionProperties'
          type: array
      title: Cm Handle query parameters for executing cm handle search
      type: object
    ConditionProperties:
      example:
        conditionParameters:
          - key: conditionParameters
          - key: conditionParameters
        conditionName: conditionName
      properties:
        conditionName:
          type: string
        conditionParameters:
          items:
            additionalProperties:
              type: string
            type: object
          type: array
    OldConditionProperties:
      deprecated: true
      example:
        name: name
        conditionParameters:
          - moduleName: my-module
          - moduleName: my-module
      properties:
        name:
          type: string
        conditionParameters:
          items:
            $ref: '#/components/schemas/ModuleNameAsJsonObject'
          type: array
    ModuleNameAsJsonObject:
      example:
        moduleName: my-module
      properties:
        moduleName:
          example: my-module
          type: string
  securitySchemes:
    basicAuth:
      scheme: basic
      type: http
