openapi: 3.0.2

info:
  title: SOL005 - NS LCM Coordination interface
  description: |
    SOL005 - NS LCM Coordination interface

    IMPORTANT: Please note that this file might be not aligned to the current
    version of the ETSI Group Specification it refers to. In case of
    discrepancies the published ETSI Group Specification takes precedence.

    Please report bugs to https://forge.etsi.org/rep/nfv/SOL005/issues

  contact:
    name: NFV-SOL WG
  license:
    name: ETSI Forge copyright notice
    url: https://forge.etsi.org/etsi-forge-copyright-notice.txt
  version: 1.0.0-impl:etsi.org:ETSI_NFV_OpenAPI:1

externalDocs:
  description: ETSI GS NFV-SOL 005 V3.5.1
  url: https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/005/03.05.01_60/gs_nfv-sol005v030501p.pdf

servers:
  - url: http://127.0.0.1/lcmcoord/v1
  - url: https://127.0.0.1/lcmcoord/v1

paths:
  ###############################################################################
  # API Versions                                                                #
  ###############################################################################
  /api_versions:
    $ref: '../endpoints/SOL005_endpoints.yaml#/endpoints/api-versions'

  /coordinations:
    parameters:
      - $ref: ../components/SOL005_params.yaml#/components/parameters/Version
      - $ref: ../components/SOL005_params.yaml#/components/parameters/Authorization
      - $ref: ../components/SOL005_params.yaml#/components/parameters/Accept
    post:
      description: |
        The POST method requests the coordination of an LCM operation occurrence with a management operation executed
        in the API producer. See clause 12.4.2.3.1.
      requestBody:
         $ref: '#/components/requestBodies/LcmCoordRequest'
      responses:
        201:
          $ref: '#/components/responses/CoordinationActions.Post.201'
        202:
          $ref: '#/components/responses/CoordinationActions.Post.202'
        400:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/400
        401:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/401
        403:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/403
        404:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/404
        405:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/405
        406:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/406
        409:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/409
        416:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/416
        500:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/500
        503:
          $ref: '#/components/responses/CoordinationActions.Post.503'
        504:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/504

  /coordinations/{coordinationId}:
    parameters:
      - $ref: ../components/SOL005_params.yaml#/components/parameters/Version
      - $ref: ../components/SOL005_params.yaml#/components/parameters/Authorization
      - $ref: ../components/SOL005_params.yaml#/components/parameters/Accept
      - $ref: '#/components/parameters/CoordinationId'
    get:
      description: |
        The GET method reads a coordination result. See clause 12.4.3.3.2.
      responses:
        200:
          $ref: '#/components/responses/IndividualCoordinationAction.Get.200'
        400:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/400
        401:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/401
        403:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/403
        404:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/404
        405:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/405
        406:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/406
        416:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/416
        500:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/500
        503:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/503
        504:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/504

  /coordinations/cancel:
    parameters:
      - $ref: ../components/SOL005_params.yaml#/components/parameters/Version
      - $ref: ../components/SOL005_params.yaml#/components/parameters/Authorization
      - $ref: ../components/SOL005_params.yaml#/components/parameters/Accept
    post:
      description: |
        The POST method initiates the cancellation of an ongoing coordination action.
        See clause 12.4.4.3.1.
      responses:
        202:
          $ref: '#/components/responses/CoordinationActionCancel.Post.202'
        400:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/400
        401:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/401
        403:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/403
        404:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/404
        405:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/405
        406:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/406
        409:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/409
        416:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/416
        500:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/500
        503:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/503
        504:
          $ref: ../responses/SOL005_resp.yaml#/components/responses/504

components:
  parameters:
    CoordinationId:
      name: coordinationId
      in: path
      description: |
        Identifier of the LCM coordination.

        NOTE: This identifier can be retrieved from the resource referenced by the 
              "Location" HTTP header in the response to a POST request to the 
              "Coordinations" resource.
      required: true
      style: simple
      explode: false
      schema:
        type: string

  requestBodies:
    LcmCoordRequest:
      description: |
        Parameters for the coordination action as defined in clause 12.5.2.2.
      content:
        application/json:
          schema:
            $ref: ./definitions/SOL005NSLCMCoordination_def.yaml#/definitions/LcmCoordRequest
      required: true

  responses:
    CoordinationActions.Post.201:
      description: |
        201 CREATED

        Shall be returned  to indicate a finished coordination action when the API producer has chosen the synchronous
        mode, which may be selected for coordination actions that finish within the time frame in which an HTTP
        response is expected..
        
        The response body shall contain an LcmCoord data structure that represents the result 
        of the coordination action.
        The HTTP response shall include a "Location" HTTP header that indicates the URI of the 
        "Individual coordination action" resource that has been created as the result of the 
        finished coordination procedure.
      headers:
        Version:
          description: The used API version.
          style: simple
          explode: false
          schema:
            type: string
        WWW-Authenticate:
          description: |
            Challenge if the corresponding HTTP request has not provided authorization, or error details if the
            corresponding HTTP request has provided an invalid authorization token.
          style: simple
          explode: false
          schema:
            type: string
        Location:
          description: The resource URI of the created VNF Snapshot Package.
          style: simple
          explode: false
          schema:
            type: string
            format: url
        Content-Type:
          description: The MIME type of the body of the response.
          style: simple
          explode: false
          schema:
            type: string
      content:
        application/json:
          schema:
            $ref: definitions/SOL005NSLCMCoordination_def.yaml#/definitions/LcmCoord

    CoordinationActions.Post.202:
      description: |
        202 ACCEPTED

        Shall be returned when the API producer has chosen the asynchronous mode and 
        the request has been accepted for processing.

        The response body shall be empty.
        
        The HTTP response shall include a "Location" HTTP header that indicates the 
        URI of the "Individual coordination action" resource that will be created 
        once the coordination operation has finished successfully.

        Further, the HTTP response may include a "Retry-After" HTTP header that indicates the time to wait before
        sending the next GET request to the "individual coordination" resource indicated in the "Location" header.
        If the header is provided, the NFVO shall record the signalled delay value in the "delay" attribute of the
        applicable entry in the "lcmCoordinations" array in the "NsLcmOpOcc" structure.
      headers:
        Version:
          description: The used API version.
          style: simple
          explode: false
          schema:
            type: string
        WWW-Authenticate:
          description: |
            Challenge if the corresponding HTTP request has not provided authorization, or error details if the
            corresponding HTTP request has provided an invalid authorization token.
          style: simple
          explode: false
          schema:
            type: string
        Location:
          description: The resource URI of the created VNF Snapshot Package.
          style: simple
          explode: false
          schema:
            type: string
            format: url
        Content-Type:
          description: The MIME type of the body of the response.
          style: simple
          explode: false
          schema:
            type: string

    CoordinationActions.Post.503:
      description: |
        503 Service Unavailable

        Shall be returned upon the following error: The API producer has chosen the synchronous mode and cannot perform
        the requested coordination currently, but expects to be able to perform it sometime in the future.

        No "individual coordination action" resource shall be created.

        A ProblemDetails structure shall be included in the response to provide more details about the rejection
        in the "details" attribute.

        The HTTP response shall include a "Retry-After" HTTP header that indicates the delay after which it is
        suggested to repeat the coordination request with the same set of parameters. The NFVO shall record the
        signalled delay value in the "delay" attribute of the applicable entry in the "rejectedLcmCoordinations"
        array in the "NsLcmOpOcc" structure.
      headers:
        Version:
          description: The used API version.
          style: simple
          explode: false
          schema:
            type: string
        WWW-Authenticate:
          description: |
            Challenge if the corresponding HTTP request has not provided authorization, or error details if the
            corresponding HTTP request has provided an invalid authorization token.
          style: simple
          explode: false
          schema:
            type: string
        Retry-After:
          description: |
            It indicates the delay after which it is suggested to repeat the coordination request with the same
            set of parameters.
          style: simple
          explode: false
          schema:
            type: string
            format: url
        Content-Type:
          description: The MIME type of the body of the response.
          style: simple
          explode: false
          schema:
            type: string
      content:
        application/json:
          schema:
            $ref: "../definitions/SOL005_def.yaml#/definitions/ProblemDetails"

    IndividualCoordinationAction.Get.200:
      description: |
        200 OK

        Shall be returned when the coordination is finished and the coordination result 
        has been read successfully.
        A representation of the "Individual coordination action" resource shall be returned 
        in the response body.
      headers:
        Version:
          description: The used API version.
          style: simple
          explode: false
          schema:
            type: string
        WWW-Authenticate:
          description: |
            Challenge if the corresponding HTTP request has not provided authorization, or error details if the
            corresponding HTTP request has provided an invalid authorization token.
          style: simple
          explode: false
          schema:
            type: string
        Content-Type:
          description: The MIME type of the body of the response.
          style: simple
          explode: false
          schema:
            type: string
      content:
        application/json:
          schema:
            $ref: definitions/SOL005NSLCMCoordination_def.yaml#/definitions/LcmCoord

    CoordinationActionCancel.Post.202:
      description: |
        202 ACCEPTED

        Shall be returned when the cancellation request has been accepted for processing.
        
        The response shall have an empty payload body.
      headers:
        Version:
          description: The used API version.
          style: simple
          explode: false
          schema:
            type: string
        WWW-Authenticate:
          description: |
            Challenge if the corresponding HTTP request has not provided authorization, or error details if the
            corresponding HTTP request has provided an invalid authorization token.
          style: simple
          explode: false
          schema:
            type: string
        Content-Type:
          description: The MIME type of the body of the response.
          style: simple
          explode: false
          schema:
            type: string

      