API for NS instances
[osm/SOL005.git] / osm-openapi.yaml
index d8d8439..5e00a2a 100644 (file)
@@ -24,7 +24,7 @@ tags:
   - name: 'NS instances'
     description: Management operations of NS instances
 paths:
-  /nsd/v1/ns_descriptors:
+  '/nsd/v1/ns_descriptors':
     get:
       tags:
         - "NS packages"
@@ -80,6 +80,11 @@ paths:
       responses:
         '201':
           description: Created
+          headers:
+            Location:
+              schema:
+                type: string
+                format: uri
           content:
             application/json:
               schema:
@@ -316,258 +321,1823 @@ paths:
           $ref: '#/components/responses/UnexpectedError'
         default:
           $ref: '#/components/responses/UnexpectedError'
-externalDocs:
-  description: Find out more OSM
-  url: 'http://osm.etsi.org/wikipub'
-components:
-  responses:
-    BadRequest:
-      description: Bad request. The server cannot process the request due to a client error.
-      content:
-        application/json:
-          schema:
-            $ref: '#/components/schemas/ProblemDetails'
-    Unauthorized:
-      description: Authorization information is missing or invalid.
-      content:
-        application/json:
-          schema:
-            $ref: '#/components/schemas/ProblemDetails'
-    Forbidden:
-      description: Not enough permissions to do this operation.
-      content:
-        application/json:
-          schema:
-            $ref: '#/components/schemas/ProblemDetails'
-    NotFound:
-      description: The specified resource was not found.
-      content:
-        application/json:
-          schema:
-            $ref: '#/components/schemas/ProblemDetails'
-    MethodNotAllowed:
-      description: This method is not supported for the requested resource.
-      content:
-        application/json:
-          schema:
-            $ref: '#/components/schemas/ProblemDetails'
-    NotAcceptable:
-      description: The requested resource content cannot match the Accept headers sent in the request.
-      content:
-        application/json:
-          schema:
-            $ref: '#/components/schemas/ProblemDetails'
-    Conflict:
-      description: The operation cannot be executed currently, due to a conflict with the state of the resource.
-      content:
-        application/json:
-          schema:
-            $ref: '#/components/schemas/ProblemDetails'
-    UnprocessableEntity:
-      description: The request was well-formed but was unable to be followed due to semantic errors.
-      content:
-        application/json:
-          schema:
-            $ref: '#/components/schemas/ProblemDetails'
-    InternalServerError:
-      description: Internal server error.
-      content:
-        application/json:
-          schema:
-            $ref: '#/components/schemas/ProblemDetails'
-    ServiceUnavailable:
-      description: Service temporarily unavailable.
-      content:
-        application/json:
-          schema:
-            $ref: '#/components/schemas/ProblemDetails'
-    UnexpectedError:
-      description: Unexpected error.
-      content:
-        application/json:
-          schema:
-            $ref: '#/components/schemas/ProblemDetails'
-  schemas:
-    NsDescriptor:
-      type: string
-    NsPackage:
-      type: string
-      format: binary
-    userDefinedData:
-      type: object
-      additionalProperties:
-        type: string
-    CreateNsdInfoRequest:
-      type: object
-      properties:
-        userDefinedData:
-          $ref: '#/components/schemas/userDefinedData'
-    NsdOnboardingStateType:
-      type: string
-      enum: [CREATED, UPLAODING, PROCESSING, ONBOARDED]
-      description: |
-        NSD onboarding state:
-         * `CREATED` - The NSD information object is created.
-         * `UPLOADING` - The associated NSD content is being uploaded.
-         * `PROCESSING` - The associated NSD content is being processed, e.g. validation.
-         * `ONBOARDED` - The associated NSD content is on-boarded. 
-    NsdOperationalStateType:
-      type: string
-      enum: [ENABLED, DISABLED]
-      description: |
-        NSD operational state:
-         * `ENABLED` - The NSD is enabled.
-         * `ENABLED` - The NSD is disabled.
-    NsdUsageStateType:
-      type: string
-      enum: [IN_USE, NOT_IN_USE]
-      description: |
-        NSD operational state:
-         * `IN_USE` - The NSD is in use.
-         * `NOT_IN_USE` - The NSD is not in use.
-    NsdInfoModifications:
-      type: object
-      properties:
-        nsdOperationalState:
-          $ref: '#/components/schemas/NsdOperationalStateType'
-        userDefinedData:
-          $ref: '#/components/schemas/userDefinedData'
-    NsdInfo:
-      type: object
-      properties:
-        id:
-          description: |
-           Identifier of the onboarded individual NS descriptor
-           resource. This identifier is allocated by the NFVO. 
-          type: string
-          format: uuid
-        nsdId:
-          description: |
-            This identifier, which is allocated by the NSD
-            designer, identifies the NSD in a globally unique
-            way. It is copied from the NSD content and shall be
-            present after the NSD content is on-boarded.
-          type: string
-          format: uuid
-        nsdName:
-          description: |
-            Name of the onboarded NSD. This information is
-            copied from the NSD content and shall be present
-            after the NSD content is on-boarded. 
-          type: string
-        nsdVersion:
-          description: |
-            Version of the on-boarded NSD. This information is
-            copied from the NSD content and shall be present
-            after the NSD content is on-boarded.
-          type: string
-        nsdDesigner:
-          description: |
-            Designer of the on-boarded NSD. This information is
-            copied from the NSD content and shall be present
-            after the NSD content is on-boarded.
-          type: string
-        nsdInvariantId:
-          description: |
-            This identifier, which is allocated by the NSD designer,
-            identifies an NSD in a version independent manner. This
-            information is copied from the NSD content and shall be
-            present after the NSD content is on-boarded. 
-          type: string
-        vnfPkgIds:
-          description: |
-            List of VNF package identifiers referenced by the on-boarded
-            NS descriptor resource.
-          type: array
-          items:
-            type: string
-            format: uuid
-        pnfdInfoIds:
-          description: |
-            List of PNFD identifiers referenced by the on-boarded NS
-            descriptor resource.
-          type: array
-          items:
-            type: string
-            format: uuid
-        nestedNsdInfoIds:
-          description: |
-            List of NSD identifiers referenced by the on-boarded NS
-            descriptor resource.
-          type: array
-          items:
-            type: string
-            format: uuid
-        nsdOnboardingState:
-          $ref: '#components/schemas/NsdOnboardingStateType'
-        onboardingFailureDetails:
-          $ref: '#/components/schemas/ProblemDetails'
-        nsdOperationalState:
-          $ref: '#components/schemas/NsdOperationalStateType'
-        nsdUsagestate:
-          $ref: '#components/schemas/NsdUsageStateType'
-        userDefinedData:
-          $ref: '#/components/schemas/userDefinedData'
-        self:
-          type: string
-          format: uri
-        nsd_content:
-          type: string
-          format: uri
-      required:
-        - id
-    ArrayOfNsdInfo:
-      type: array
-      items:
-        $ref: '#/components/schemas/NsdInfo'
-    # Problem details as described in RFC 7807.
-    # Optional fields "type" and "instance", as described in RFC 7807 are not used here.
-    ProblemDetails:
-      type: object
-      properties:
-        type:
-          type: string
-          format: uri
-        title:
-          type: string
-        status:
-          type: integer
-        detail:
-          type: string
-        instance:
-          type: string
-          format: uri
-      additionalProperties: true
-      required:
-        - status
-        - detail
-  requestBodies:
-    CreateNsdInfoRequest:
-      content:
-        application/json:
-          schema:
-            $ref: '#/components/schemas/CreateNsdInfoRequest'
-        application/yaml:
-          schema:
-            $ref: '#/components/schemas/CreateNsdInfoRequest'
-    NsdInfoModifications:
-      content:
-        application/json:
-          schema:
-            $ref: '#/components/schemas/NsdInfoModifications'
-        application/yaml:
-          schema:
-            $ref: '#/components/schemas/NsdInfoModifications'
-    NsdContent:
-      content:
-        text/plain:
-          schema:
-            $ref: '#/components/schemas/NsDescriptor'
-        application/zip:
-          schema:
-            $ref: '#/components/schemas/NsPackage'
-  securitySchemes:
-    bearerAuth:
-      type: http
-      scheme: bearer
+  '/vnfpkgm/v1/vnf_packages':
+    get:
+      tags:
+        - "VNF packages"
+      summary: Query information about multiple VNF package resources
+      description: Query information about multiple VNF package resoureces
+      operationId: getVnfPkgs
+      security:
+        - bearerAuth: []
+      responses:
+        '200':
+          description: OK
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ArrayOfVnfPkgInfo'
+            application/yaml:
+              schema:
+                $ref: '#/components/schemas/ArrayOfVnfPkgInfo'
+        '400':
+          $ref: '#/components/responses/BadRequest'
+        '401':
+          $ref: '#/components/responses/Unauthorized'
+        '403':
+          $ref: '#/components/responses/Forbidden'
+        '404':
+          $ref: '#/components/responses/NotFound'
+        '405':
+          $ref: '#/components/responses/MethodNotAllowed'
+        '406':
+          $ref: '#/components/responses/NotAcceptable'
+        '409':
+          $ref: '#/components/responses/Conflict'
+        '422':
+          $ref: '#/components/responses/UnprocessableEntity'
+        '500':
+          $ref: '#/components/responses/InternalServerError'
+        '503':
+          $ref: '#/components/responses/ServiceUnavailable'
+        '5XX':
+          $ref: '#/components/responses/UnexpectedError'
+        default:
+          $ref: '#/components/responses/UnexpectedError'
+    post:
+      tags:
+        - "VNF packages"
+      summary: Create a new VNF package resource
+      description: Create a new VNF package resource
+      operationId: addVnfPkg
+      security:
+        - bearerAuth: []
+      requestBody:
+        $ref: '#/components/requestBodies/CreateVnfPkgInfoRequest'
+      responses:
+        '201':
+          description: Created
+          headers:
+            Location:
+              schema:
+                type: string
+                format: uri
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/VnfPkgInfo'
+            application/yaml:
+              schema:
+                $ref: '#/components/schemas/VnfPkgInfo'
+        '400':
+          $ref: '#/components/responses/BadRequest'
+        '401':
+          $ref: '#/components/responses/Unauthorized'
+        '403':
+          $ref: '#/components/responses/Forbidden'
+        '404':
+          $ref: '#/components/responses/NotFound'
+        '405':
+          $ref: '#/components/responses/MethodNotAllowed'
+        '406':
+          $ref: '#/components/responses/NotAcceptable'
+        '409':
+          $ref: '#/components/responses/Conflict'
+        '422':
+          $ref: '#/components/responses/UnprocessableEntity'
+        '500':
+          $ref: '#/components/responses/InternalServerError'
+        '503':
+          $ref: '#/components/responses/ServiceUnavailable'
+        '5XX':
+          $ref: '#/components/responses/UnexpectedError'
+        default:
+          $ref: '#/components/responses/UnexpectedError'
+  '/vnfpkgm/v1/vnf_packages/{vnfPkgId}':
+    get:
+      tags:
+        - "VNF packages"
+      summary: Read information about an individual VNF package resource
+      description: Read information about an individual VNF package resource
+      operationId: getVnfPkg
+      security:
+        - bearerAuth: []
+      responses:
+        '200':
+          description: OK
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/VnfPkgInfo'
+            application/yaml:
+              schema:
+                $ref: '#/components/schemas/VnfPkgInfo'
+        '400':
+          $ref: '#/components/responses/BadRequest'
+        '401':
+          $ref: '#/components/responses/Unauthorized'
+        '403':
+          $ref: '#/components/responses/Forbidden'
+        '404':
+          $ref: '#/components/responses/NotFound'
+        '405':
+          $ref: '#/components/responses/MethodNotAllowed'
+        '406':
+          $ref: '#/components/responses/NotAcceptable'
+        '409':
+          $ref: '#/components/responses/Conflict'
+        '422':
+          $ref: '#/components/responses/UnprocessableEntity'
+        '500':
+          $ref: '#/components/responses/InternalServerError'
+        '503':
+          $ref: '#/components/responses/ServiceUnavailable'
+        '5XX':
+          $ref: '#/components/responses/UnexpectedError'
+        default:
+          $ref: '#/components/responses/UnexpectedError'
+    delete:
+      tags:
+        - "VNF packages"
+      summary: Delete an individual VNF package resource
+      description: Delete an individual VNF package resource
+      operationId: deleteVnfPkg
+      security:
+        - bearerAuth: []
+      responses:
+        '204':
+          description: No Content
+        '400':
+          $ref: '#/components/responses/BadRequest'
+        '401':
+          $ref: '#/components/responses/Unauthorized'
+        '403':
+          $ref: '#/components/responses/Forbidden'
+        '404':
+          $ref: '#/components/responses/NotFound'
+        '405':
+          $ref: '#/components/responses/MethodNotAllowed'
+        '406':
+          $ref: '#/components/responses/NotAcceptable'
+        '409':
+          $ref: '#/components/responses/Conflict'
+        '422':
+          $ref: '#/components/responses/UnprocessableEntity'
+        '500':
+          $ref: '#/components/responses/InternalServerError'
+        '503':
+          $ref: '#/components/responses/ServiceUnavailable'
+        '5XX':
+          $ref: '#/components/responses/UnexpectedError'
+        default:
+          $ref: '#/components/responses/UnexpectedError'
+    patch:
+      tags:
+        - "VNF packages"
+      summary: Modify the operational state and/or the user defined data of an individual VNF package resource
+      description: Modify the operational state and/or the user defined data of an individual VNF package resource
+      operationId: updateVnfPkg
+      security:
+        - bearerAuth: []
+      requestBody:
+        $ref: '#/components/requestBodies/VnfPkgInfoModifications'
+      responses:
+        '200':
+          description: OK
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/VnfPkgInfoModifications'
+            application/yaml:
+              schema:
+                $ref: '#/components/schemas/VnfPkgInfoModifications'
+        '400':
+          $ref: '#/components/responses/BadRequest'
+        '401':
+          $ref: '#/components/responses/Unauthorized'
+        '403':
+          $ref: '#/components/responses/Forbidden'
+        '404':
+          $ref: '#/components/responses/NotFound'
+        '405':
+          $ref: '#/components/responses/MethodNotAllowed'
+        '406':
+          $ref: '#/components/responses/NotAcceptable'
+        '409':
+          $ref: '#/components/responses/Conflict'
+        '422':
+          $ref: '#/components/responses/UnprocessableEntity'
+        '500':
+          $ref: '#/components/responses/InternalServerError'
+        '503':
+          $ref: '#/components/responses/ServiceUnavailable'
+        '5XX':
+          $ref: '#/components/responses/UnexpectedError'
+        default:
+          $ref: '#/components/responses/UnexpectedError'
+  '/vnfpkgm/v1/vnf_packages/{vnfPkgId}/vnfd':
+    get:
+      tags:
+        - "VNF packages"
+      summary: Read VNFD of an on-boarded VNF package
+      description: Read VNFD of an on-boarded VNF package
+      operationId: getVnfPkgVNFD
+      security:
+        - bearerAuth: []
+      responses:
+        '200':
+          description: OK
+          content:
+            text/plain:
+              schema:
+                $ref: '#/components/schemas/VnfDescriptor'
+        '400':
+          $ref: '#/components/responses/BadRequest'
+        '401':
+          $ref: '#/components/responses/Unauthorized'
+        '403':
+          $ref: '#/components/responses/Forbidden'
+        '404':
+          $ref: '#/components/responses/NotFound'
+        '405':
+          $ref: '#/components/responses/MethodNotAllowed'
+        '406':
+          $ref: '#/components/responses/NotAcceptable'
+        '409':
+          $ref: '#/components/responses/Conflict'
+        '422':
+          $ref: '#/components/responses/UnprocessableEntity'
+        '500':
+          $ref: '#/components/responses/InternalServerError'
+        '503':
+          $ref: '#/components/responses/ServiceUnavailable'
+        '5XX':
+          $ref: '#/components/responses/UnexpectedError'
+        default:
+          $ref: '#/components/responses/UnexpectedError'
+  '/vnfpkgm/v1/vnf_packages/{vnfPkgId}/package_content':
+    get:
+      tags:
+        - "VNF packages"
+      summary: Fetch an on-boarded VNF package
+      description: Fetch an on-boarded VNF package
+      operationId: getVnfPkgContent
+      security:
+        - bearerAuth: []
+      responses:
+        '200':
+          description: OK
+          content:
+            application/zip:
+              schema:
+                $ref: '#/components/schemas/VnfPackage'
+        '206':
+          description: Partial Content
+          headers:
+            Content-Range:
+              schema:
+                type: string
+          content:
+            application/zip:
+              schema:
+                $ref: '#/components/schemas/VnfPackage'
+        '400':
+          $ref: '#/components/responses/BadRequest'
+        '401':
+          $ref: '#/components/responses/Unauthorized'
+        '403':
+          $ref: '#/components/responses/Forbidden'
+        '404':
+          $ref: '#/components/responses/NotFound'
+        '405':
+          $ref: '#/components/responses/MethodNotAllowed'
+        '406':
+          $ref: '#/components/responses/NotAcceptable'
+        '409':
+          $ref: '#/components/responses/Conflict'
+        '422':
+          $ref: '#/components/responses/UnprocessableEntity'
+        '500':
+          $ref: '#/components/responses/InternalServerError'
+        '503':
+          $ref: '#/components/responses/ServiceUnavailable'
+        '5XX':
+          $ref: '#/components/responses/UnexpectedError'
+        default:
+          $ref: '#/components/responses/UnexpectedError'
+    put:
+      tags:
+        - "VNF packages"
+      summary: Upload a VNF package by providing the content of the VNF package
+      description: Upload a VNF package by providing the content of the VNF package
+      operationId: uploadVnfPkgContent
+      security:
+        - bearerAuth: []
+      requestBody:
+        $ref: '#/components/requestBodies/VnfPackage'
+      responses:
+        '202':
+          description: Accepted
+        #'204':
+        #  description: No Content
+        '400':
+          $ref: '#/components/responses/BadRequest'
+        '401':
+          $ref: '#/components/responses/Unauthorized'
+        '403':
+          $ref: '#/components/responses/Forbidden'
+        '404':
+          $ref: '#/components/responses/NotFound'
+        '405':
+          $ref: '#/components/responses/MethodNotAllowed'
+        '406':
+          $ref: '#/components/responses/NotAcceptable'
+        '409':
+          $ref: '#/components/responses/Conflict'
+        '422':
+          $ref: '#/components/responses/UnprocessableEntity'
+        '500':
+          $ref: '#/components/responses/InternalServerError'
+        '503':
+          $ref: '#/components/responses/ServiceUnavailable'
+        '5XX':
+          $ref: '#/components/responses/UnexpectedError'
+        default:
+          $ref: '#/components/responses/UnexpectedError'
+  '/vnfpkgm/v1/vnf_packages/{vnfPkgId}/package_content/upload_from_uri':
+    post:
+      tags:
+        - "VNF packages"
+      summary: Upload a VNF package by providing the URI of the VNF package
+      description: Upload a VNF package by providing the URI of the VNF package
+      operationId: uploadVnfPkgContentFromURI
+      security:
+        - bearerAuth: []
+      requestBody:
+        $ref: '#/components/requestBodies/UploadVnfPackageFromUriRequest'
+      responses:
+        '202':
+          description: Accepted
+        #'204':
+        #  description: No Content
+        '400':
+          $ref: '#/components/responses/BadRequest'
+        '401':
+          $ref: '#/components/responses/Unauthorized'
+        '403':
+          $ref: '#/components/responses/Forbidden'
+        '404':
+          $ref: '#/components/responses/NotFound'
+        '405':
+          $ref: '#/components/responses/MethodNotAllowed'
+        '406':
+          $ref: '#/components/responses/NotAcceptable'
+        '409':
+          $ref: '#/components/responses/Conflict'
+        '422':
+          $ref: '#/components/responses/UnprocessableEntity'
+        '500':
+          $ref: '#/components/responses/InternalServerError'
+        '503':
+          $ref: '#/components/responses/ServiceUnavailable'
+        '5XX':
+          $ref: '#/components/responses/UnexpectedError'
+        default:
+          $ref: '#/components/responses/UnexpectedError'
+  '/vnfpkgm/v1/vnf_packages/{vnfPkgId}/artifacts/{artifactPath}':
+    get:
+      tags:
+        - "VNF packages"
+      summary: Fetch individual VNF package artifact
+      description: Fetch individual VNF package artifact
+      operationId: getVnfPkgArtifact
+      security:
+        - bearerAuth: []
+      responses:
+        '200':
+          description: OK
+          content:
+            application/octet-stream:
+              schema:
+                type: string
+                format: binary
+        '206':
+          description: Partial Content
+          headers:
+            Content-Range:
+              schema:
+                type: string
+          content:
+            application/octet-stream:
+              schema:
+                type: string
+                format: binary
+        '400':
+          $ref: '#/components/responses/BadRequest'
+        '401':
+          $ref: '#/components/responses/Unauthorized'
+        '403':
+          $ref: '#/components/responses/Forbidden'
+        '404':
+          $ref: '#/components/responses/NotFound'
+        '405':
+          $ref: '#/components/responses/MethodNotAllowed'
+        '406':
+          $ref: '#/components/responses/NotAcceptable'
+        '409':
+          $ref: '#/components/responses/Conflict'
+        '422':
+          $ref: '#/components/responses/UnprocessableEntity'
+        '500':
+          $ref: '#/components/responses/InternalServerError'
+        '503':
+          $ref: '#/components/responses/ServiceUnavailable'
+        '5XX':
+          $ref: '#/components/responses/UnexpectedError'
+        default:
+          $ref: '#/components/responses/UnexpectedError'
+  '/nslcm/v1/ns_instances':
+    get:
+      tags:
+        - "NS instances"
+      summary: Query information about multiple NS instances
+      description: Query information about multiple NS isntances
+      operationId: getNSinstances
+      security:
+        - bearerAuth: []
+      responses:
+        '200':
+          description: OK
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ArrayOfNsInstance'
+            application/yaml:
+              schema:
+                $ref: '#/components/schemas/ArrayOfNsInstance'
+        '400':
+          $ref: '#/components/responses/BadRequest'
+        '401':
+          $ref: '#/components/responses/Unauthorized'
+        '403':
+          $ref: '#/components/responses/Forbidden'
+        '404':
+          $ref: '#/components/responses/NotFound'
+        '405':
+          $ref: '#/components/responses/MethodNotAllowed'
+        '406':
+          $ref: '#/components/responses/NotAcceptable'
+        '409':
+          $ref: '#/components/responses/Conflict'
+        '422':
+          $ref: '#/components/responses/UnprocessableEntity'
+        '500':
+          $ref: '#/components/responses/InternalServerError'
+        '503':
+          $ref: '#/components/responses/ServiceUnavailable'
+        '5XX':
+          $ref: '#/components/responses/UnexpectedError'
+        default:
+          $ref: '#/components/responses/UnexpectedError'
+    post:
+      tags:
+        - "NS instances"
+      summary: Create a new NS instance resource
+      description: Create a new NS instance resource
+      operationId: addNSinstance
+      security:
+        - bearerAuth: []
+      requestBody:
+        $ref: '#/components/requestBodies/CreateNsRequest'
+      responses:
+        '201':
+          description: Created
+          headers:
+            Location:
+              schema:
+                type: string
+                format: uri
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/NsInstance'
+            application/yaml:
+              schema:
+                $ref: '#/components/schemas/NsInstance'
+        '400':
+          $ref: '#/components/responses/BadRequest'
+        '401':
+          $ref: '#/components/responses/Unauthorized'
+        '403':
+          $ref: '#/components/responses/Forbidden'
+        '404':
+          $ref: '#/components/responses/NotFound'
+        '405':
+          $ref: '#/components/responses/MethodNotAllowed'
+        '406':
+          $ref: '#/components/responses/NotAcceptable'
+        '409':
+          $ref: '#/components/responses/Conflict'
+        '422':
+          $ref: '#/components/responses/UnprocessableEntity'
+        '500':
+          $ref: '#/components/responses/InternalServerError'
+        '503':
+          $ref: '#/components/responses/ServiceUnavailable'
+        '5XX':
+          $ref: '#/components/responses/UnexpectedError'
+        default:
+          $ref: '#/components/responses/UnexpectedError'
+  '/nslcm/v1/ns_instances/{nsInstanceId}':
+    get:
+      tags:
+        - "NS instances"
+      summary: Read an individual NS instance resource
+      description: Read an individual NS instance resource
+      operationId: getNSinstance
+      security:
+        - bearerAuth: []
+      responses:
+        '200':
+          description: OK
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/NsInstance'
+            application/yaml:
+              schema:
+                $ref: '#/components/schemas/NsInstance'
+        '400':
+          $ref: '#/components/responses/BadRequest'
+        '401':
+          $ref: '#/components/responses/Unauthorized'
+        '403':
+          $ref: '#/components/responses/Forbidden'
+        '404':
+          $ref: '#/components/responses/NotFound'
+        '405':
+          $ref: '#/components/responses/MethodNotAllowed'
+        '406':
+          $ref: '#/components/responses/NotAcceptable'
+        '409':
+          $ref: '#/components/responses/Conflict'
+        '422':
+          $ref: '#/components/responses/UnprocessableEntity'
+        '500':
+          $ref: '#/components/responses/InternalServerError'
+        '503':
+          $ref: '#/components/responses/ServiceUnavailable'
+        '5XX':
+          $ref: '#/components/responses/UnexpectedError'
+        default:
+          $ref: '#/components/responses/UnexpectedError'
+    delete:
+      tags:
+        - "NS instances"
+      summary: Delete an individual NS instance resource
+      description: Delete an individual NS instance resource
+      operationId: deleteNSinstance
+      security:
+        - bearerAuth: []
+      responses:
+        '204':
+          description: No Content
+        '400':
+          $ref: '#/components/responses/BadRequest'
+        '401':
+          $ref: '#/components/responses/Unauthorized'
+        '403':
+          $ref: '#/components/responses/Forbidden'
+        '404':
+          $ref: '#/components/responses/NotFound'
+        '405':
+          $ref: '#/components/responses/MethodNotAllowed'
+        '406':
+          $ref: '#/components/responses/NotAcceptable'
+        '409':
+          $ref: '#/components/responses/Conflict'
+        '422':
+          $ref: '#/components/responses/UnprocessableEntity'
+        '500':
+          $ref: '#/components/responses/InternalServerError'
+        '503':
+          $ref: '#/components/responses/ServiceUnavailable'
+        '5XX':
+          $ref: '#/components/responses/UnexpectedError'
+        default:
+          $ref: '#/components/responses/UnexpectedError'
+  '/nslcm/v1/ns_instances/{nsInstanceId}/instantiate':
+    post:
+      tags:
+        - "NS instances"
+      summary: Instantiate a NS
+      description: |
+        Instantiate a NS. The precondition is that the NS instance must have
+        been created and must be in NOT_INSTANTIATED state. As a result of the
+        success of this operation, the NFVO creates a "NS Lifecycle Operation
+        Occurrence" resource for the request, and the NS instance state becomes
+        INSTANTIATED.
+      operationId: instantiateNSinstance
+      security:
+        - bearerAuth: []
+      requestBody:
+        $ref: '#/components/requestBodies/InstantiateNsRequest'
+      responses:
+        '202':
+          description: Accepted
+          headers:
+            Location:
+              description: |
+                It must point to the new "NS Lifecycle Operation Occurrence"
+                resource, i.e. an URI like ".../ns_lcm_op_occs/{nsLcmOpOccId}"
+              schema:
+                type: string
+                format: uri
+        '400':
+          $ref: '#/components/responses/BadRequest'
+        '401':
+          $ref: '#/components/responses/Unauthorized'
+        '403':
+          $ref: '#/components/responses/Forbidden'
+        '404':
+          $ref: '#/components/responses/NotFound'
+        '405':
+          $ref: '#/components/responses/MethodNotAllowed'
+        '406':
+          $ref: '#/components/responses/NotAcceptable'
+        '409':
+          $ref: '#/components/responses/Conflict'
+        '422':
+          $ref: '#/components/responses/UnprocessableEntity'
+        '500':
+          $ref: '#/components/responses/InternalServerError'
+        '503':
+          $ref: '#/components/responses/ServiceUnavailable'
+        '5XX':
+          $ref: '#/components/responses/UnexpectedError'
+        default:
+          $ref: '#/components/responses/UnexpectedError'
+  '/nslcm/v1/ns_instances/{nsInstanceId}/scale':
+    post:
+      tags:
+        - "NS instances"
+      summary: Scale a NS instance
+      description: |
+        Scale a NS instance. The precondition is that the NS instance must have
+        been created and must be in INSTANTIATED state. As a result of the
+        success of this operation, the NFVO creates a "NS Lifecycle Operation
+        Occurrence" resource for the request, and the NS instance state remains
+        INSTANTIATED.
+      operationId: scaleNSinstance
+      security:
+        - bearerAuth: []
+      requestBody:
+        $ref: '#/components/requestBodies/ScaleNsRequest'
+      responses:
+        '202':
+          description: Accepted
+          headers:
+            Location:
+              description: |
+                It must point to the new "NS Lifecycle Operation Occurrence"
+                resource, i.e. an URI like ".../ns_lcm_op_occs/{nsLcmOpOccId}"
+              schema:
+                type: string
+                format: uri
+        '400':
+          $ref: '#/components/responses/BadRequest'
+        '401':
+          $ref: '#/components/responses/Unauthorized'
+        '403':
+          $ref: '#/components/responses/Forbidden'
+        '404':
+          $ref: '#/components/responses/NotFound'
+        '405':
+          $ref: '#/components/responses/MethodNotAllowed'
+        '406':
+          $ref: '#/components/responses/NotAcceptable'
+        '409':
+          $ref: '#/components/responses/Conflict'
+        '422':
+          $ref: '#/components/responses/UnprocessableEntity'
+        '500':
+          $ref: '#/components/responses/InternalServerError'
+        '503':
+          $ref: '#/components/responses/ServiceUnavailable'
+        '5XX':
+          $ref: '#/components/responses/UnexpectedError'
+        default:
+          $ref: '#/components/responses/UnexpectedError'
+  '/nslcm/v1/ns_instances/{nsInstanceId}/update':
+    post:
+      tags:
+        - "NS instances"
+      summary: Update a NS instance
+      description: |
+        Update a NS instance. The precondition is that the NS instance must have
+        been created and must be in INSTANTIATED state. As a result of the
+        success of this operation, the NFVO creates a "NS Lifecycle Operation
+        Occurrence" resource for the request, and the NS instance state remains
+        INSTANTIATED.
+      operationId: updateNSinstance
+      security:
+        - bearerAuth: []
+      requestBody:
+        $ref: '#/components/requestBodies/UpdateNsRequest'
+      responses:
+        '202':
+          description: Accepted
+          headers:
+            Location:
+              description: |
+                It must point to the new "NS Lifecycle Operation Occurrence"
+                resource, i.e. an URI like ".../ns_lcm_op_occs/{nsLcmOpOccId}"
+              schema:
+                type: string
+                format: uri
+        '400':
+          $ref: '#/components/responses/BadRequest'
+        '401':
+          $ref: '#/components/responses/Unauthorized'
+        '403':
+          $ref: '#/components/responses/Forbidden'
+        '404':
+          $ref: '#/components/responses/NotFound'
+        '405':
+          $ref: '#/components/responses/MethodNotAllowed'
+        '406':
+          $ref: '#/components/responses/NotAcceptable'
+        '409':
+          $ref: '#/components/responses/Conflict'
+        '422':
+          $ref: '#/components/responses/UnprocessableEntity'
+        '500':
+          $ref: '#/components/responses/InternalServerError'
+        '503':
+          $ref: '#/components/responses/ServiceUnavailable'
+        '5XX':
+          $ref: '#/components/responses/UnexpectedError'
+        default:
+          $ref: '#/components/responses/UnexpectedError'
+  '/nslcm/v1/ns_instances/{nsInstanceId}/heal':
+    post:
+      tags:
+        - "NS instances"
+      summary: Heal a NS instance
+      description: |
+        Heal a NS instance. The precondition is that the NS instance must have
+        been created and must be in INSTANTIATED state. As a result of the
+        success of this operation, the NFVO creates a "NS Lifecycle Operation
+        Occurrence" resource for the request, and the NS instance state remains
+        INSTANTIATED.
+      operationId: healNSinstance
+      security:
+        - bearerAuth: []
+      requestBody:
+        $ref: '#/components/requestBodies/HealNsRequest'
+      responses:
+        '202':
+          description: Accepted
+          headers:
+            Location:
+              description: |
+                It must point to the new "NS Lifecycle Operation Occurrence"
+                resource, i.e. an URI like ".../ns_lcm_op_occs/{nsLcmOpOccId}"
+              schema:
+                type: string
+                format: uri
+        '400':
+          $ref: '#/components/responses/BadRequest'
+        '401':
+          $ref: '#/components/responses/Unauthorized'
+        '403':
+          $ref: '#/components/responses/Forbidden'
+        '404':
+          $ref: '#/components/responses/NotFound'
+        '405':
+          $ref: '#/components/responses/MethodNotAllowed'
+        '406':
+          $ref: '#/components/responses/NotAcceptable'
+        '409':
+          $ref: '#/components/responses/Conflict'
+        '422':
+          $ref: '#/components/responses/UnprocessableEntity'
+        '500':
+          $ref: '#/components/responses/InternalServerError'
+        '503':
+          $ref: '#/components/responses/ServiceUnavailable'
+        '5XX':
+          $ref: '#/components/responses/UnexpectedError'
+        default:
+          $ref: '#/components/responses/UnexpectedError'
+  '/nslcm/v1/ns_instances/{nsInstanceId}/terminate':
+    post:
+      tags:
+        - "NS instances"
+      summary: Terminate a NS instance
+      description: |
+        Terminate a NS instance. The precondition is that the NS instance must have
+        been created and must be in INSTANTIATED state. As a result of the
+        success of this operation, the NFVO creates a "NS Lifecycle Operation
+        Occurrence" resource for the request, and the NS instance state becomes
+        NOT_INSTANTIATED.
+      operationId: terminateNSinstance
+      security:
+        - bearerAuth: []
+      requestBody:
+        $ref: '#/components/requestBodies/TerminateNsRequest'
+      responses:
+        '202':
+          description: Accepted
+          headers:
+            Location:
+              description: |
+                It must point to the new "NS Lifecycle Operation Occurrence"
+                resource, i.e. an URI like ".../ns_lcm_op_occs/{nsLcmOpOccId}"
+              schema:
+                type: string
+                format: uri
+        '400':
+          $ref: '#/components/responses/BadRequest'
+        '401':
+          $ref: '#/components/responses/Unauthorized'
+        '403':
+          $ref: '#/components/responses/Forbidden'
+        '404':
+          $ref: '#/components/responses/NotFound'
+        '405':
+          $ref: '#/components/responses/MethodNotAllowed'
+        '406':
+          $ref: '#/components/responses/NotAcceptable'
+        '409':
+          $ref: '#/components/responses/Conflict'
+        '422':
+          $ref: '#/components/responses/UnprocessableEntity'
+        '500':
+          $ref: '#/components/responses/InternalServerError'
+        '503':
+          $ref: '#/components/responses/ServiceUnavailable'
+        '5XX':
+          $ref: '#/components/responses/UnexpectedError'
+        default:
+          $ref: '#/components/responses/UnexpectedError'
+externalDocs:
+  description: Find out more OSM
+  url: 'http://osm.etsi.org/wikipub'
+components:
+  responses:
+    BadRequest:
+      description: Bad request. The server cannot process the request due to a client error.
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ProblemDetails'
+    Unauthorized:
+      description: Authorization information is missing or invalid.
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ProblemDetails'
+    Forbidden:
+      description: Not enough permissions to do this operation.
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ProblemDetails'
+    NotFound:
+      description: The specified resource was not found.
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ProblemDetails'
+    MethodNotAllowed:
+      description: This method is not supported for the requested resource.
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ProblemDetails'
+    NotAcceptable:
+      description: The requested resource content cannot match the Accept headers sent in the request.
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ProblemDetails'
+    Conflict:
+      description: The operation cannot be executed currently, due to a conflict with the state of the resource.
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ProblemDetails'
+    UnprocessableEntity:
+      description: The request was well-formed but was unable to be followed due to semantic errors.
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ProblemDetails'
+    InternalServerError:
+      description: Internal server error.
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ProblemDetails'
+    ServiceUnavailable:
+      description: Service temporarily unavailable.
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ProblemDetails'
+    UnexpectedError:
+      description: Unexpected error.
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ProblemDetails'
+  schemas:
+    NsDescriptor:
+      type: string
+    NsPackage:
+      type: string
+      format: binary
+    KeyValuePairs:
+      type: object
+      additionalProperties:
+        type: string
+    CreateNsdInfoRequest:
+      type: object
+      properties:
+        userDefinedData:
+          $ref: '#/components/schemas/KeyValuePairs'
+    NsdOnboardingStateType:
+      type: string
+      enum: [CREATED, UPLAODING, PROCESSING, ONBOARDED]
+      description: |
+        NSD onboarding state:
+         * `CREATED` - The NSD information object is created.
+         * `UPLOADING` - The associated NSD content is being uploaded.
+         * `PROCESSING` - The associated NSD content is being processed, e.g. validation.
+         * `ONBOARDED` - The associated NSD content is on-boarded. 
+    NsdOperationalStateType:
+      type: string
+      enum: [ENABLED, DISABLED]
+      description: |
+        NSD operational state:
+         * `ENABLED` - The NSD is enabled.
+         * `DISABLED` - The NSD is disabled.
+    NsdUsageStateType:
+      type: string
+      enum: [IN_USE, NOT_IN_USE]
+      description: |
+        NSD usage state:
+         * `IN_USE` - The NSD is in use.
+         * `NOT_IN_USE` - The NSD is not in use.
+    NsdInfoModifications:
+      type: object
+      properties:
+        nsdOperationalState:
+          $ref: '#/components/schemas/NsdOperationalStateType'
+        userDefinedData:
+          $ref: '#/components/schemas/KeyValuePairs'
+    NsdInfo:
+      type: object
+      properties:
+        id:
+          description: |
+            Identifier of the onboarded individual NS descriptor
+            resource. This identifier is allocated by the NFVO.
+          type: string
+          format: uuid
+        nsdId:
+          description: |
+            This identifier, which is allocated by the NSD
+            designer, identifies the NSD in a globally unique
+            way. It is copied from the NSD content and shall be
+            present after the NSD content is on-boarded.
+          type: string
+          format: uuid
+        nsdName:
+          description: |
+            Name of the onboarded NSD. This information is
+            copied from the NSD content and shall be present
+            after the NSD content is on-boarded. 
+          type: string
+        nsdVersion:
+          description: |
+            Version of the on-boarded NSD. This information is
+            copied from the NSD content and shall be present
+            after the NSD content is on-boarded.
+          type: string
+        nsdDesigner:
+          description: |
+            Designer of the on-boarded NSD. This information is
+            copied from the NSD content and shall be present
+            after the NSD content is on-boarded.
+          type: string
+        nsdInvariantId:
+          description: |
+            This identifier, which is allocated by the NSD designer,
+            identifies an NSD in a version independent manner. This
+            information is copied from the NSD content and shall be
+            present after the NSD content is on-boarded. 
+          type: string
+          format: uuid
+        vnfPkgIds:
+          description: |
+            List of VNF package identifiers referenced by the on-boarded
+            NS descriptor resource.
+          type: array
+          items:
+            type: string
+            format: uuid
+        pnfdInfoIds:
+          description: |
+            List of PNFD identifiers referenced by the on-boarded NS
+            descriptor resource.
+          type: array
+          items:
+            type: string
+            format: uuid
+        nestedNsdInfoIds:
+          description: |
+            List of NSD identifiers referenced by the on-boarded NS
+            descriptor resource.
+          type: array
+          items:
+            type: string
+            format: uuid
+        nsdOnboardingState:
+          description: |
+            Onboarding state of the individual NS descriptor resource.
+          $ref: '#components/schemas/NsdOnboardingStateType'
+        onboardingFailureDetails:
+          description: |
+            Failure details of current onboarding procedure. It follows
+            the "ProblemDetails" structure. It shall be present when the
+            "nsdOnboardingState" attribute is CREATED and the uploading or
+            processing fails in NFVO.
+          $ref: '#/components/schemas/ProblemDetails'
+        nsdOperationalState:
+          description: |
+            Operational state of the individual NS descriptor resource. This
+            attribute can be modified with the PATCH method. If the value of
+            the nsdOnboardingState attribute is not equal to "ONBOARDED", the
+            value of the nsdOperationalState attribute shall be equal to
+            "DISABLED".
+          $ref: '#components/schemas/NsdOperationalStateType'
+        nsdUsagestate:
+          description: |
+            Usage state of the individual NS descriptor resource. If the value
+            of the nsdOnboardingState attribute is not equal to "ONBOARDED",
+            the value of the nsdUsageState attribute shall be equal to
+            "NOT_IN_USE".
+          $ref: '#components/schemas/NsdUsageStateType'
+        userDefinedData:
+          $ref: '#/components/schemas/KeyValuePairs'
+        _links:
+          description: |
+            Links to resources related to this resource
+          type: string
+        self:
+          description: |
+            URI of this resource
+          type: string
+          format: uri
+        nsd_content:
+          description: |
+            Link to the NSD content resource.
+          type: string
+          format: uri
+      required:
+        - id
+        - nsdOnboardingState
+        - nsdOperationalState
+        - nsdUsageState
+        - _links
+        - self
+        - nsd_content
+    ArrayOfNsdInfo:
+      type: array
+      items:
+        $ref: '#/components/schemas/NsdInfo'
+    ProblemDetails:
+      type: object
+      properties:
+        type:
+          type: string
+          format: uri
+        title:
+          type: string
+        status:
+          type: integer
+        detail:
+          type: string
+        instance:
+          type: string
+          format: uri
+      additionalProperties: true
+      required:
+        - status
+        - detail
+    VnfDescriptor:
+      type: string
+    VnfPackage:
+      type: string
+      format: binary
+    CreateVnfPkgInfoRequest:
+      type: object
+      properties:
+        userDefinedData:
+          $ref: '#/components/schemas/KeyValuePairs'
+    VnfPackageOnboardingStateType:
+      type: string
+      enum: [CREATED, UPLAODING, PROCESSING, ONBOARDED]
+      description: |
+        VNF Package onboarding state:
+         * `CREATED` - The VNF Package information object is created.
+         * `UPLOADING` - The VNF Package is being uploaded.
+         * `PROCESSING` - The VNF Package is being processed, e.g. validation.
+         * `ONBOARDED` - The VNF Package is successfully on-boarded.
+    VnfPackageOperationalStateType:
+      type: string
+      enum: [ENABLED, DISABLED]
+      description: |
+        VNF Package operational state:
+         * `ENABLED` - The VNF Package is enabled.
+         * `DISABLED` - The VNF Package is disabled.
+    VnfPackageUsageStateType:
+      type: string
+      enum: [IN_USE, NOT_IN_USE]
+      description: |
+        VNF Package usage state:
+         * `IN_USE` - The VNF Package is in use.
+         * `NOT_IN_USE` - The VNF Package is not in use.
+    #SoftwareImageFormatType:
+    #  type: string
+    #  enum: [AKI, AMI, ARI, BARE, DOCKER, OVA, OVF]
+    #  description: |
+    #    Software image format. Permitted values:
+    #     * `AKI`: a kernel image format
+    #     * `AMI`: a machine image format
+    #     * `ARI`: a ramdisk image format
+    #     * `BARE`: the image does not have a container or metadata envelope
+    #     * `DOCKER`: docker container format
+    #     * `OVA`: OVF package in a tarfile
+    #     * `OVF`: OVF container format
+    VnfPackageSoftwareImageInfo:
+      type: object
+      additionalProperties: true
+      #properties:
+        #id:
+        #  description: |
+        #    Identifier of the software image, unique in the scope of a VNFD.
+        #  type: string
+        #name:
+        #  description: |
+        #    Name of the software image.
+        #  type: string
+        #provider:
+        #  description: |
+        #    Provider of the software image.
+        #  type: string
+        #version:
+        #  description: |
+        #    Version of the software image.
+        #  type: string
+        #checksum:
+        #  description: |
+        #    Checksum of the software image file.
+        #  type: string
+        #containerFormat:
+        #  description: |
+        #    Container format indicates whether the software image is in a
+        #    file format that also contains metadata about the actual
+        #    software.
+        #  $ref: '#/components/schemas/SoftwareImageFormatType'
+        #diskFormat:
+        #  description: |
+        #    Disk format of a software image is the format of the underlying
+        #    disk image.
+        #  $ref: '#/components/schemas/DiskFormatType'
+        # ...
+    VnfPackageArtifactInfo:
+      type: object
+      additionalProperties: true
+    VnfPkgInfoModifications:
+      type: object
+      properties:
+        operationalState:
+          $ref: '#/components/schemas/VnfPackageOperationalStateType'
+        userDefinedData:
+          $ref: '#/components/schemas/KeyValuePairs'
+    VnfPkgInfo:
+      type: object
+      properties:
+        id:
+          description: |
+            Identifier of the VNF package. This identifier is allocated by the NFVO.
+          type: string
+          format: uuid
+        vnfdId:
+          description: |
+            This identifier, which is managed by the VNF provider, identifies
+            the VNF package and the VNFD in a globally unique way. It's
+            copied from the VNFD of the on-boarded VNF package. It shall be
+            present after the VNF package content has been on-boarded and
+            absent otherwise.
+          type: string
+          format: uuid
+        vnfProvider:
+          description: |
+            Deovider of the VNF pacakge and the VNFD. This information is
+            copied from the VNFD. It shall be present after the VNF package
+            content has been on-boarded and absent otherwise.
+          type: string
+        vnfProductName:
+          description: |
+            Name to identify the VNF product. Invariant for the VNF product
+            ligetime. This information is copied from the VNFD. It shall be
+            present after the VNF package content has been on-boarded and
+            absent otherwise.
+          type: string
+        vnfSoftwareVersion:
+          description: |
+            Software version of the VNF. This is changed when there is any
+            change to the software included in the VNF package. This
+            information is copied from the VNFD. It shall be present after the
+            VNF package content has been on-boarded and absent otherwise.
+          type: string
+        vnfdVersion:
+          description: |
+            The version of the VNFD. TSof information is copied from the VNFD.
+            It shall be present after the VNF package content has been
+            on-boarded and absent otherwise.
+          type: string
+        checksum:
+          description: |
+            Checksum of the on-boarded VNF package. It shall be present after
+            the VNF package content has been on-boarded and absent otherwise.
+          type: string
+        softwareImages:
+          description: |
+            Information about VNF package artifacts that are software images.
+            This attribute shall not be present before the VNF package content
+            is on-boarded. Otherwise, this attribute shall be present unless
+            it has been requested to be excluded per attribute selector.
+          type: array
+          items:
+            $ref: '#/components/schemas/VnfPackageSoftwareImageInfo'
+        additionalArtifacts:
+          description: |
+            Information about VNF package artifacts contained in the VNF
+            package that are not software images. This attribute shall not be
+            present before the VNF package content is on-boarded. Otherwise,
+            this attribute shall be present if the VNF package contains
+            additional artifacts.
+          type: array
+          items:
+            $ref: '#/components/schemas/VnfPackageArtifactInfo'
+        onboardingState:
+          description: |
+            On-boarding state of the VNF package.
+          $ref: '#components/schemas/VnfPackageOnboardingStateType'
+        operationalState:
+          description: |
+            Operational  state of the VNF package. If the value of the
+            onboardingState attribute is not equal to "ONBOARDED", the value
+            of the operationalState attribute shall be equal to "DISABLED".
+          $ref: '#components/schemas/VnfPackageOperationalStateType'
+        usageState:
+          description: |
+            Usage state of the VNF package. If the value of the
+            onboardingState attribute is not equal to "ONBOARDED", the value
+            of the usageState attribute shall be equal to "NOT_IN_USE".
+          $ref: '#components/schemas/VnfPackageUsageStateType'
+        userDefinedData:
+          description: |
+            User defined data for the VNF package
+          $ref: '#/components/schemas/KeyValuePairs'
+        _links:
+          description: |
+            Links to resources related to this resource
+          type: string
+        self:
+          description: |
+            URI of this resource
+          type: string
+          format: uri
+        vnfd:
+          description: |
+            Link to the VNFD resource. This link shall be present after the VNF
+            package content is on-boarded. 
+          type: string
+          format: uri
+        package_content:
+          description: |
+            Link to the "VNF package content" resource.
+          type: string
+          format: uri
+      required:
+        - id
+        - onboardingState
+        - operationalState
+        - usageState
+        - _links
+        - self
+        - package_content
+    ArrayOfVnfPkgInfo:
+      type: array
+      items:
+        $ref: '#/components/schemas/VnfPkgInfo'
+    UploadVnfPackageFromUriRequest:
+      type: object
+      properties:
+        addressInformation:
+          description: |
+            Address information of the VNF package content. The NFVO can use
+            this address to obtain the VNF package.
+          type: string
+          format: uri
+        userName:
+          description: |
+            User name to be used for authentication. Shall be present if user
+            name is needed but has not been provisioned out of band.
+          type: string
+        password:
+          description: |
+            Password to be used for authentication. Shall be present if password
+            is needed but has not been provisioned out of band.
+          type: string
+      required:
+        - addressInformation
+    CreateNsRequest:
+      type: object
+      properties:
+        nsdId:
+          description: |
+            Identifier of the NSD that defines the NS instance to be created.
+          type: string
+          format: uuid
+        nsName:
+          description: |
+            Human-readable name of the NS instance to be created.
+          type: string
+        nsDescription:
+          description: |
+            Human-readable description of the NS instance to be created.
+          type: string
+      required:
+        - nsdId
+        - nsName
+        - nsDescription
+    NsStateType:
+      type: string
+      enum: [NOT_INSTANTIATED, INSTANTIATED]
+      description: |
+        State of the NS instance. Permitted values:
+         * `NOT_INSTANTIATED`: The NS instance is terminated or not instantiated.
+         * `INSTANTIATED`: The NS instance is instantiated.
+    NsInstance:
+      type: object
+      properties:
+        id:
+          description: Identifier of the NS instance.
+          type: string
+          format: uuid
+        nsInstanceName:
+          description: Human readable name of the NS instance.
+          type: string
+        nsInstanceDescription:
+          description: Human readable description of the NS instance.
+          type: string
+        nsdId:
+          description: Identifier of the NSD on which the NS instance is based.
+          type: string
+          format: uuid
+        flavourId:
+          description: |
+            Identifier of the NS deployment flavour applied to the NS instance.
+            This attribute shall be present if the nsState attribute value is
+            INSTANTIATED.
+          type: string
+        vnfInstance:
+          description: |
+            Information on constituent VNF(s) of the NS instance. If the
+            "nsState" attribute is INSTANTIATED, at least either one
+            "vnfInstance" attribute or one "nestedNsInstanceId" attribute shall
+            be present.
+          type: array
+          items:
+            $ref: '#/components/schemas/VnfInstance'
+        pnfInfo:
+          description: |
+            Information on the PNF(s) that are part of the NS instance.
+          type: array
+          items:
+            $ref: '#/components/schemas/PnfInfo'
+        virtualLinkInfo:
+          description: |
+            Information on the VL(s) of the NS instance. This attribute shall
+            be present if the nsState attribute value is INSTANTIATED and if
+            the NS instance has specified connectivity.
+          type: array
+          items:
+            $ref: '#/components/schemas/NsVirtualLinkInfo'
+        vnffgInfo:
+          description: |
+            Information on the VNFFG(s) of the NS instance.
+          type: array
+          items:
+            $ref: '#/components/schemas/VnffgInfo'
+        sapInfo:
+          description: |
+            Information on the SAP(s) of the NS instance.
+          type: array
+          items:
+            $ref: '#/components/schemas/SapInfo'
+        nestedNsInstanceId:
+          description: |
+            Identifier of the nested NS(s) of the NS instance. If the "nsState"
+            attribute is INSTANTIATED, at least either one "vnfInstance"
+            attribute or one "nestedNsInstanceId" attribute shall be present.
+          type: array
+          items:
+            type: string
+            format: uuid
+        nsState:
+          description: |
+            The state of the NS instance.
+          $ref: '#components/schemas/NsStateType'
+        nsScaleStatus:
+          description: |
+            Status of each NS scaling aspect declared in the applicable DF,
+            how "big" the NS instance has been scaled w.r.t. that aspect. This
+            attribute shall be present if the nsState attribute value is
+            INSTANTIATED.
+          type: array
+          items:
+            $ref: '#/components/schemas/NsScaleInfo'
+        additionalAffinityOrAntiAffinityRule:
+          description: |
+            Information on the additional affinity or anti-affinity rule from
+            NS instantiation operation. Shall not conflict with rules already
+            specified in the NSD.
+          type: array
+          items:
+            $ref: '#/components/schemas/AffinityOrAntiAffinityRule'
+        _links:
+          description: |
+            Links to resources related to this resource
+          type: string
+        self:
+          description: |
+            URI of this resource
+          type: string
+          format: uri
+        nestedNsInstances:
+          description: |
+            Links to the nested NS instances of the present NS instance.
+          type: array
+          items:
+            type: string
+            format: uri
+        instantiate:
+          description: |
+            Link to the "instantiate" task resource, if the related operation
+            is possible based on the current status of this NS instance
+            resource (i.e. NS instance in NOT_INSTANTIATED state).
+          type: string
+          format: uri
+        terminate:
+          description: |
+            Link to the "terminate" task resource, if the related operation is
+            possible based on the current status of this NS instance resource
+            (i.e. NS instance is in INSTANTIATED state).
+          type: string
+          format: uri
+        update:
+          description: |
+            Link to the "update" task resource, if the related operation is
+            possible based on the current status of this NS instance resource
+            (i.e. NS instance is in INSTANTIATED state).
+          type: string
+          format: uri
+        scale:
+          description: |
+            Link to the "scale" task resource, if the related operation is
+            supported for this NS instance, and is possible based on the
+            current status of this NS instance resource (i.e. NS instance is in
+            INSTANTIATED state).
+          type: string
+          format: uri
+        heal:
+          description: |
+            Link to the "heal" task resource, if the related operation is
+            supported for this NS instance, and is possible based on the
+            current status of this NS instance resource (i.e. NS instance is in
+            INSTANTIATED state).
+          type: string
+          format: uri
+      required:
+        - id
+        - nsInstanceName
+        - nsInstanceDescription
+        - nsdId
+        - nsdInfoId
+        - nsState
+        - _links
+        - self
+    VnfInstance:
+      type: object
+      additionalProperties: true
+    PnfInfo:
+      type: object
+      additionalProperties: true
+    NsVirtualLinkInfo:
+      type: object
+      additionalProperties: true
+    VnffgInfo:
+      type: object
+      additionalProperties: true
+    SapInfo:
+      type: object
+      additionalProperties: true
+    NsScaleInfo:
+      type: object
+      additionalProperties: true
+    AffinityOrAntiAffinityRule:
+      type: object
+      additionalProperties: true
+    SapData:
+      type: object
+      additionalProperties: true
+    AddPnfData:
+      type: object
+      additionalProperties: true
+    VnfInstanceData:
+      type: object
+      additionalProperties: true
+    VnfLocationConstraint:
+      type: object
+      additionalProperties: true
+    ParamsForVnf:
+      type: object
+      additionalProperties: true
+    InstantiateNsRequest:
+      type: object
+      properties:
+        nsFlavourId:
+          description: Identifier of the NS deployment flavour to be instantiated.
+          type: string
+        sapData:
+          description: Create data concerning the SAPs of this NS.
+          type: array
+          items:
+            $ref: '#/components/schemas/SapData'
+        addpnfData:
+          description: Information on the PNF(s) that are part of this NS.
+          type: array
+          items:
+            $ref: '#/components/schemas/AddPnfData'
+        vnfInstanceData:
+          description: |
+            Specify an existing VNF instance to be used in the NS. If needed,
+            the VNF Profile to be used for this VNF instance is also provided.
+          type: array
+          items:
+            $ref: '#/components/schemas/VnfInstanceData'
+        nestedNsInstanceId:
+          description: |
+            Specify an existing NS instance to be used as a nested NS within the NS.
+          type: array
+          items:
+            type: string
+            format: uuid
+        localizationLanguage:
+          description: |
+            Defines the location constraints for the VNF to be instantiated as part of
+            the NS instantiation. An example can be a constraint for the VNF to be in a
+            specific geographic location.
+          type: array
+          items:
+            $ref: '#/components/schemas/VnfLocationConstraint'
+        additionalParamsForNs:
+          description: |
+            Allows the OSS/BSS to provide additional parameter(s) at the NS level
+            (as opposed to the VNF level, which is covered in additionalParamsForVnf).
+          $ref: '#/components/schemas/KeyValuePairs'
+        additionalParamsForVnf:
+          description: |
+            Allows the OSS/BSS to provide additional parameter(s) per VNF instance
+            (as opposed to the NS level, which is covered in additionalParamsForNs).
+            This is for VNFs that are to be created by the NFVO as part of the NS
+            instantiation and not for existing VNF that are referenced for reuse.
+          type: array
+          items:
+            $ref: '#/components/schemas/ParamsForVnf'
+        startTime:
+          description: |
+            Timestamp indicating the earliest time to instantiate the NS.
+            Cardinality "0" indicates the NS instantiation takes place immediately.
+          type: string
+          format: date-time
+        nsInstantiationLevelId:
+          description: |
+            Identifies one of the NS instantiation levels declared in the DF applicable
+            to this NS instance. If not present, the default NS instantiation level as
+            declared in the NSD shall be used.
+          type: string
+        additionalAffinityOrAntiAffiniityRule:
+          description: |
+            Specifies additional affinity or anti-affinity constraint for the VNF instances
+            to be instantiated as part of the NS instantiation. Shall not conflict with rules
+            already specified in the NSD.
+          type: array
+          items:
+            $ref: '#/components/schemas/AffinityOrAntiAffinityRule'
+      required:
+        - nsFlavourId
+    UpdateNsRequest:
+      type: object
+      properties:
+        updateType:
+          type: string
+          enum: [ ADD_VNF, REMOVE_VNF, INSTANTIATE_VNF, CHANGE_VNF_DF,
+                  OPERATE_VNF, MODIFY_VNF_INFORMATION, CHANGE_EXTERNAL_VNF_CONNECTIVITY,
+                  REMOVE_SAP, ADD_NESTED_NS, REMOVE_NESTED_NS, ASSOC_NEW_NSD_VERSION,
+                  MOVE_VNF, ADD_VNFFG, REMOVE_VNFFG, UPDATE_VNFFG, CHANGE_NS_DF, ADD_PNF,
+                  MODIFY_PNF, REMOVE_PNF ]
+          description: |
+            The type of update. It determines also which one of the following parameters
+            is present in the operation. Possible values include:
+             * `ADD_VNF`: Adding existing VNF instance(s)
+             * `REMOVE_VNF`: Removing VNF instance(s)
+             * `INSTANTIATE_VNF`: Instantiating new VNF(s)
+             * `CHANGE_VNF_DF`: Changing VNF DF
+             * `OPERATE_VNF`: Changing VNF state,
+             * `MODIFY_VNF_INFORMATION`: Modifying VNF information and/or the configurable
+             properties of VNF instance(s)
+             * `CHANGE_EXTERNAL_VNF_CONNECTIVITY`: Changing the external connectivity of VNF
+             instance(s)
+             * `ADD_SAP`: Adding SAP(s)
+             * `REMOVE_SAP`: Removing SAP(s)
+             * `ADD_NESTED_NS`: Adding existing NS instance(s) as nested NS(s)
+             * `REMOVE_NESTED_NS`: Removing existing nested NS instance(s)
+             * `ASSOC_NEW_NSD_VERSION`: Associating a new NSD version to the NS instance
+             * `MOVE_VNF`: Moving VNF instance(s) from one origin NS instance to another target NS
+             instance
+             * `ADD_VNFFG`: Adding VNFFG(s)
+             * `REMOVE_VNFFG`: Removing VNFFG(s)
+             * `UPDATE_VNFFG`: Updating VNFFG(s)
+             * `CHANGE_NS_DF`: Changing NS DF
+             * `ADD_PNF`: Adding PNF
+             * `MODIFY_PNF`: Modifying PNF
+             * `REMOVE_PNF`: Removing PNF
+      # Specific properties are required for each updateType. Pending to be added.
+      additionalProperties: true
+      required:
+        - updateType
+    ScaleNsRequest:
+      type: object
+      additionalProperties: true
+    HealNsData:
+      type: object
+      additionalProperties: true
+    HealVnfData:
+      type: object
+      additionalProperties: true
+    HealNsRequest:
+      type: object
+      properties:
+        healNsData:
+          description: |
+            Provides the information needed to heal an NS. Either the parameter healNsData
+            or the parameter healVnfData, but not both shall be provided.
+          $ref: '#/components/schemas/HealNsData'
+        healVnfData:
+          description: |
+            Provides the information needed to heal a VNF. Either the parameter healNsData
+            or the parameter healVnfData, but not both shall be provided.
+          type: array
+          items:
+            $ref: '#/components/schemas/HealVnfData'
+    TerminateNsRequest:
+      type: object
+      properties:
+        terminationTime:
+          description: |
+            Timestamp indicating the end time of the NS, i.e. the NS will be terminated
+            automatically at this timestamp. Cardinality "0" indicates the NS termination
+            takes place immediately.
+          type: string
+          format: date-time
+    ArrayOfNsInstance:
+      type: array
+      items:
+        $ref: '#/components/schemas/NsInstance'
+  requestBodies:
+    CreateNsdInfoRequest:
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/CreateNsdInfoRequest'
+        application/yaml:
+          schema:
+            $ref: '#/components/schemas/CreateNsdInfoRequest'
+    NsdInfoModifications:
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/NsdInfoModifications'
+        application/yaml:
+          schema:
+            $ref: '#/components/schemas/NsdInfoModifications'
+    NsdContent:
+      content:
+        text/plain:
+          schema:
+            $ref: '#/components/schemas/NsDescriptor'
+        application/zip:
+          schema:
+            $ref: '#/components/schemas/NsPackage'
+    CreateVnfPkgInfoRequest:
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/CreateVnfPkgInfoRequest'
+        application/yaml:
+          schema:
+            $ref: '#/components/schemas/CreateVnfPkgInfoRequest'
+    VnfPkgInfoModifications:
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/VnfPkgInfoModifications'
+        application/yaml:
+          schema:
+            $ref: '#/components/schemas/VnfPkgInfoModifications'
+    VnfPackage:
+      content:
+        application/zip:
+          schema:
+            $ref: '#/components/schemas/VnfPackage'
+    UploadVnfPackageFromUriRequest:
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/UploadVnfPackageFromUriRequest'
+        application/yaml:
+          schema:
+            $ref: '#/components/schemas/UploadVnfPackageFromUriRequest'
+    CreateNsRequest:
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/CreateNsRequest'
+        application/yaml:
+          schema:
+            $ref: '#/components/schemas/CreateNsRequest'
+    InstantiateNsRequest:
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/InstantiateNsRequest'
+        application/yaml:
+          schema:
+            $ref: '#/components/schemas/InstantiateNsRequest'
+    ScaleNsRequest:
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ScaleNsRequest'
+        application/yaml:
+          schema:
+            $ref: '#/components/schemas/ScaleNsRequest'
+    UpdateNsRequest:
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/UpdateNsRequest'
+        application/yaml:
+          schema:
+            $ref: '#/components/schemas/UpdateNsRequest'
+    HealNsRequest:
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/HealNsRequest'
+        application/yaml:
+          schema:
+            $ref: '#/components/schemas/HealNsRequest'
+    TerminateNsRequest:
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/TerminateNsRequest'
+        application/yaml:
+          schema:
+            $ref: '#/components/schemas/TerminateNsRequest'
+  securitySchemes:
+    bearerAuth:
+      type: http
+      scheme: bearer
+