Revert "Revert "Feature 10915: SOL003 STD Support for OSM"" 64/12064/1
authoralmagia <silvia.almagia@etsi.org>
Tue, 17 May 2022 12:11:58 +0000 (14:11 +0200)
committeralmagia <silvia.almagia@etsi.org>
Tue, 17 May 2022 12:11:58 +0000 (14:11 +0200)
This reverts commit 199b1b0913c839c3874694595393034283289c5e.

As requested by TSC Chair

Change-Id: I0f3b7c3d9dfdde805b6edcd7fb7cc83e40819cad

devops-stages/stage-archive.sh [changed mode: 0644->0755]
devops-stages/stage-build.sh [changed mode: 0644->0755]
devops-stages/stage-test.sh [changed mode: 0644->0755]
src/SOL003/APIVersion/APIVersion.yaml [new file with mode: 0644]
src/SOL003/VNFLifecycleManagement/VNFLifecycleManagement.yaml [new file with mode: 0644]
src/SOL003/VNFLifecycleManagement/definitions/SOL003VNFLifecycleManagement_def.yaml [new file with mode: 0644]
src/SOL003/components/SOL003_params.yaml [new file with mode: 0644]
src/SOL003/definitions/SOL003_def.yaml [new file with mode: 0644]
src/SOL003/responses/SOL003_resp.yaml [new file with mode: 0644]

old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
diff --git a/src/SOL003/APIVersion/APIVersion.yaml b/src/SOL003/APIVersion/APIVersion.yaml
new file mode 100644 (file)
index 0000000..2c64c9d
--- /dev/null
@@ -0,0 +1,12 @@
+openapi: 3.0.2
+
+info:
+  title: OSM VNFM NB API featuring ETSI NFV SOL003
+  description: >
+    This is Open Source MANO Northbound API featuring ETSI GS NFV-SOL 003 V3.3.1
+  version: "1.0.0"
+  contact:
+    email: OSM_TECH@list.etsi.org
+  license:
+    name: Apache 2.0
+    url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
diff --git a/src/SOL003/VNFLifecycleManagement/VNFLifecycleManagement.yaml b/src/SOL003/VNFLifecycleManagement/VNFLifecycleManagement.yaml
new file mode 100644 (file)
index 0000000..60bc5af
--- /dev/null
@@ -0,0 +1,480 @@
+openapi: 3.0.2
+
+info:
+  title: SOL003 - VNF Lifecycle Management interface
+  description: |
+    SOL003 - VNF Lifecycle Management interface
+  version: "1.0.0"
+  contact:
+    email: OSM_TECH@list.etsi.org
+  license:
+    name: Apache 2.0
+    url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
+
+tags:
+  - name: VNF Instances
+    description: Operations related to VNF instances
+
+servers:
+  - url: http://127.0.0.1/vnflcm/v1
+  - url: https://127.0.0.1/vnflcm/v1
+
+paths:
+  /vnf_instances:
+    parameters:
+      - $ref: ../components/SOL003_params.yaml#/components/parameters/Accept
+      - $ref: ../components/SOL003_params.yaml#/components/parameters/Authorization
+      - $ref: ../components/SOL003_params.yaml#/components/parameters/Version
+    get:
+      tags:
+        - VNF Instances
+      summary: Query information about multiple VNF instances
+      description: The GET method queries information about multiple VNF instances.
+      responses:
+        200:
+          $ref: '#/components/responses/VNFInstances.Get.200'
+        400:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/400'
+        401:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/401'
+        403:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/403'
+        404:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/404'
+        405:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/405'
+        406:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/406'
+        409:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/409'
+        422:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/422'
+        500:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/500'
+        503:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/503'
+        5XX:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/UnexpectedError'
+        default:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/UnexpectedError'
+    post:
+      tags:
+        - VNF Instances
+      summary: Create a new VNF instance resource
+      description: |
+        The POST method creates a new VNF instance resource based on a VNF package that is onboarded
+        and in "ENABLED" state.
+      requestBody:
+        $ref: './definitions/SOL003VNFLifecycleManagement_def.yaml#/definitions/CreateVnfRequest'
+      responses:
+        201:
+          $ref: '#/components/responses/VNFInstances.Post.201'
+        400:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/400'
+        401:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/401'
+        403:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/403'
+        404:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/404'
+        405:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/405'
+        406:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/406'
+        409:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/409'
+        422:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/422'
+        500:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/500'
+        503:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/503'
+        5XX:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/UnexpectedError'
+        default:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/UnexpectedError'
+
+  /vnf_instances/{vnfInstanceId}:
+    parameters:
+      - $ref: '#/components/parameters/VnfInstanceId'
+      - $ref: ../components/SOL003_params.yaml#/components/parameters/Authorization
+      - $ref: ../components/SOL003_params.yaml#/components/parameters/Version
+    get:
+      tags:
+        - VNF Instances
+      summary: Read an individual VNF instance resource
+      description: |
+        The GET method retrieves information about a VNF instance by reading an "Individual VNF instance" resource.
+      responses:
+        200:
+          $ref: '#/components/responses/IndividualVnfInstance.Get.200'
+        400:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/400'
+        401:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/401'
+        403:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/403'
+        404:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/404'
+        405:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/405'
+        406:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/406'
+        409:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/409'
+        422:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/422'
+        500:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/500'
+        503:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/503'
+        5XX:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/UnexpectedError'
+        default:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/UnexpectedError'
+    delete:
+      tags:
+        - VNF Instances
+      summary: Delete an individual VNF instance resource
+      description: This method deletes an "Individual VNF instance" resource.
+      responses:
+        204:
+          description: No Content
+        400:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/400'
+        401:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/401'
+        403:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/403'
+        404:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/404'
+        405:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/405'
+        406:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/406'
+        409:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/409'
+        422:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/422'
+        500:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/500'
+        503:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/503'
+        5XX:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/UnexpectedError'
+        default:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/UnexpectedError'
+
+  /vnf_instances/{vnfInstanceId}/instantiate:
+    parameters:
+      - $ref: '#/components/parameters/VnfInstanceId'
+    post:
+      tags:
+        - VNF Instances
+      summary: Instantiate a VNF
+      description: |
+        The POST method instantiates a VNF instance. The precondition is that the VNF instance
+        must have been created and must be in NOT_INSTANTIATED state.
+      parameters:
+        - $ref: ../components/SOL003_params.yaml#/components/parameters/Accept
+        - $ref: ../components/SOL003_params.yaml#/components/parameters/Authorization
+        - $ref: ../components/SOL003_params.yaml#/components/parameters/Version
+      requestBody:
+        $ref: './definitions/SOL003VNFLifecycleManagement_def.yaml#/definitions/InstantiateVnfRequest'
+      responses:
+        202:
+          $ref: '#/components/responses/InstantiateVnfInstance.Post.202'
+        400:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/400'
+        401:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/401'
+        403:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/403'
+        404:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/404'
+        405:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/405'
+        406:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/406'
+        409:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/409'
+        422:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/422'
+        500:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/500'
+        503:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/503'
+        5XX:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/UnexpectedError'
+        default:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/UnexpectedError'
+
+  /vnf_instances/{vnfInstanceId}/scale:
+    parameters:
+      - $ref: '#/components/parameters/VnfInstanceId'
+    post:
+      tags:
+        - VNF Instances
+      summary: Scale a VNF instance
+      description: |
+        The POST method requests to scale a VNF instance resource. The precondition is that the VNF instance
+        must have been created and must be in INSTANTIATED state.
+      parameters:
+        - $ref: ../components/SOL003_params.yaml#/components/parameters/Accept
+        - $ref: ../components/SOL003_params.yaml#/components/parameters/Authorization
+        - $ref: ../components/SOL003_params.yaml#/components/parameters/Version
+      requestBody:
+        $ref: './definitions/SOL003VNFLifecycleManagement_def.yaml#/definitions/ScaleVnfRequest'
+      responses:
+        202:
+          $ref: '#/components/responses/ScaleVnfInstance.Post.202'
+        400:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/400'
+        401:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/401'
+        403:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/403'
+        404:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/404'
+        405:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/405'
+        406:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/406'
+        409:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/409'
+        422:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/422'
+        500:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/500'
+        503:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/503'
+        5XX:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/UnexpectedError'
+        default:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/UnexpectedError'
+
+  /vnf_instances/{vnfInstanceId}/terminate:
+    parameters:
+      - $ref: '#/components/parameters/VnfInstanceId'
+    post:
+      tags:
+        - VNF Instances
+      summary: Terminate a VNF instance
+      description: |
+        The POST method requests to terminate a VNF instance. The precondition is that the VNF
+        instance must have been created and must be in INSTANTIATED state.
+      parameters:
+        - $ref: ../components/SOL003_params.yaml#/components/parameters/Accept
+        - $ref: ../components/SOL003_params.yaml#/components/parameters/Authorization
+        - $ref: ../components/SOL003_params.yaml#/components/parameters/Version
+      requestBody:
+        $ref: './definitions/SOL003VNFLifecycleManagement_def.yaml#/definitions/TerminateVnfRequest'
+      responses:
+        202:
+          $ref: '#/components/responses/TerminateVnfInstance.Post.202'
+        400:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/400'
+        401:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/401'
+        403:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/403'
+        404:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/404'
+        405:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/405'
+        406:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/406'
+        409:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/409'
+        422:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/422'
+        500:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/500'
+        503:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/503'
+        5XX:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/UnexpectedError'
+        default:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/UnexpectedError'
+
+  /vnf_lcm_op_occs:
+    get:
+      tags:
+        - VNF Instances
+      summary: Query information about multiple VNF LCM Operation Occurrences
+      description: Query information about multiple VNF LCM Operation Occurrences
+      responses:
+        200:
+          $ref: '#/components/responses/VnfLcmOpOccs.Get.200'
+        400:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/400'
+        401:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/401'
+        403:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/403'
+        404:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/404'
+        405:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/405'
+        406:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/406'
+        409:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/409'
+        422:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/422'
+        500:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/500'
+        503:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/503'
+        5XX:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/UnexpectedError'
+        default:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/UnexpectedError'
+
+  /vnf_lcm_op_occs/{vnfLcmOpOccId}:
+    parameters:
+      - $ref: '#/components/parameters/VnfLcmOpOccId'
+    get:
+      tags:
+        - VNF Instances
+      summary: Query information about an individual VNF LCM Operation Occurrence
+      description: Query information about an individual VNF LCM Operation Occurrence
+      responses:
+        200:
+          $ref: '#/components/responses/IndividualVnfLcmOpOcc.Get.200'
+        400:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/400'
+        401:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/401'
+        403:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/403'
+        404:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/404'
+        405:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/405'
+        406:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/406'
+        409:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/409'
+        422:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/422'
+        500:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/500'
+        503:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/503'
+        5XX:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/UnexpectedError'
+        default:
+          $ref: '../responses/SOL003_resp.yaml#/components/responses/UnexpectedError'
+
+components:
+  parameters:
+    VnfInstanceId:
+      name: vnfInstanceId
+      in: path
+      required: true
+      description: Identifier of the VNF instance
+      schema:
+        type: string
+    VnfLcmOpOccId:
+      name: vnfLcmOpOccId
+      in: path
+      required: true
+      description: |
+        Identifier of the VNF lifecycle management operation occurrence
+      schema:
+        type: string
+
+  responses:
+    VNFInstances.Get.200:
+      description: OK
+      content:
+        application/json:
+          schema:
+            $ref: './definitions/SOL003VNFLifecycleManagement_def.yaml#/definitions/ArrayOfVnfInstance'
+        application/yaml:
+          schema:
+            $ref: './definitions/SOL003VNFLifecycleManagement_def.yaml#/definitions/ArrayOfVnfInstance'
+    VNFInstances.Post.201:
+      description: Created
+      headers:
+        Location:
+          schema:
+            type: string
+            format: uri
+      content:
+        application/json:
+          schema:
+            $ref: './definitions/SOL003VNFLifecycleManagement_def.yaml#/definitions/ObjectId'
+        application/yaml:
+          schema:
+            $ref: './definitions/SOL003VNFLifecycleManagement_def.yaml#/definitions/ObjectId'
+    IndividualVnfInstance.Get.200:
+      description: OK
+      content:
+        application/json:
+          schema:
+            $ref: './definitions/SOL003VNFLifecycleManagement_def.yaml#/definitions/VnfInstance'
+        application/yaml:
+          schema:
+            $ref: './definitions/SOL003VNFLifecycleManagement_def.yaml#/definitions/VnfInstance'
+    InstantiateVnfInstance.Post.202:
+      description: Accepted
+      headers:
+        Location:
+          schema:
+            type: string
+            format: uri
+      content:
+        application/json:
+          schema:
+            $ref: './definitions/SOL003VNFLifecycleManagement_def.yaml#/definitions/ObjectId'
+        application/yaml:
+          schema:
+            $ref: './definitions/SOL003VNFLifecycleManagement_def.yaml#/definitions/ObjectId'
+    ScaleVnfInstance.Post.202:
+      description: Accepted
+      headers:
+        Location:
+          schema:
+            type: string
+            format: uri
+      content:
+        application/json:
+          schema:
+            $ref: './definitions/SOL003VNFLifecycleManagement_def.yaml#/definitions/ObjectId'
+        application/yaml:
+          schema:
+            $ref: './definitions/SOL003VNFLifecycleManagement_def.yaml#/definitions/ObjectId'
+    TerminateVnfInstance.Post.202:
+      description: Accepted
+      headers:
+        Location:
+          schema:
+            type: string
+            format: uri
+      content:
+        application/json:
+          schema:
+            $ref: './definitions/SOL003VNFLifecycleManagement_def.yaml#/definitions/ObjectId'
+        application/yaml:
+          schema:
+            $ref: './definitions/SOL003VNFLifecycleManagement_def.yaml#/definitions/ObjectId'
+    VnfLcmOpOccs.Get.200:
+      description: OK
+      content:
+        application/json:
+          schema:
+            $ref: './definitions/SOL003VNFLifecycleManagement_def.yaml#/definitions/ArrayOfVnfLcmOpOcc'
+        application/yaml:
+          schema:
+            $ref: './definitions/SOL003VNFLifecycleManagement_def.yaml#/definitions/ArrayOfVnfLcmOpOcc'
+    IndividualVnfLcmOpOcc.Get.200:
+      description: OK
+      content:
+        application/json:
+          schema:
+            $ref: './definitions/SOL003VNFLifecycleManagement_def.yaml#/definitions/VnfLcmOpOcc'
+        application/yaml:
+          schema:
+            $ref: './definitions/SOL003VNFLifecycleManagement_def.yaml#/definitions/VnfLcmOpOcc'
diff --git a/src/SOL003/VNFLifecycleManagement/definitions/SOL003VNFLifecycleManagement_def.yaml b/src/SOL003/VNFLifecycleManagement/definitions/SOL003VNFLifecycleManagement_def.yaml
new file mode 100644 (file)
index 0000000..33b6f52
--- /dev/null
@@ -0,0 +1,180 @@
+definitions:
+    ObjectId:
+      type: object
+      properties:
+        id:
+          type: string
+          format: uuid
+    VnfInstance:
+      description: VNF Instance Information
+      type: object
+      properties:
+        id:
+          description: Identifier of the VNF instance.
+          type: string
+          format: uuid
+        name:
+          description: Human readable name of the VNF instance.
+          type: string
+        description:
+          description: Human readable description of the VNF instance.
+          type: string
+      required:
+        - id
+        - name
+    ArrayOfVnfInstance:
+      type: array
+      items:
+        $ref: '#/definitions/VnfInstance'
+    CreateVnfRequest:
+      type: object
+      properties:
+        vnfdId:
+          description: Identifier of the VNFD that defines the VNF instance to be created.
+          type: string
+        vnfInstanceName:
+          description: Human-readable name of the VNF instance to be created.
+          type: string
+        vnfInstanceDescription:
+          type: string
+          nullable: true
+        vimAccountId:
+          description: >-
+            Identifier of the VIM Account where the VNF instance shall be
+            created.
+          type: string
+          format: uuid
+        additionalParams:
+          type: object
+          properties:
+            virtual-link-desc:
+              type: array
+              items:
+                type: object
+                properties:
+                  id:
+                    type: string
+                  mgmt-network:
+                    type: boolean
+            constituent-cpd-id:
+              type: string
+            virtual-link-profile-id:
+              type: string
+      required:
+        - vnfdId
+        - vnfInstanceName
+        - vimAccountId
+      additionalProperties: false
+    InstantiateVnfRequest:
+      type: object
+      properties:
+        vnfId:
+          description: Identifier of the VNFD
+          type: string
+        vnfName:
+          description: Human-readable name of the VNF instance
+          type: string
+        vnfDescription:
+          type: string
+          nullable: true
+        vimAccountId:
+          description: >-
+            Identifier of the VIM Account where the VNF instance shall be
+            created.
+          type: string
+          format: uuid
+      required:
+        - vnfId
+        - vnfName
+        - vimAccountId
+      additionalProperties: false
+    ScaleVnfRequest:
+      type: object
+      properties:
+        type:
+          description: >
+            Indicates the type of the scale operation requested.
+            Permitted values:
+            * SCALE_OUT: adding additional VNFC instances to the VNF to increase
+              capacity
+            * SCALE_IN: removing VNFC instances from the VNF in order to release
+              unused capacity.
+          type: string
+          enum:
+            - SCALE_OUT
+            - SCALE_IN
+        aspectId:
+          description: >
+            Identifier of the scaling aspect.
+          type: string
+        numberOfSteps:
+          description: >
+            Number of scaling steps to be executed as part of this Scale VNF
+            operation. It shall be a positive number and the default value
+            shall be 1.
+          type: integer
+          default: 1
+        additionalParams:
+          type: object
+          properties:
+            member-vnf-index:
+              type: string
+          required:
+            - member-vnf-index
+      required:
+        - type
+        - aspectId
+        - numberOfSteps
+      additionalProperties: false
+    TerminateVnfRequest:
+      type: object
+      properties:
+        terminationType:
+          type: string
+          enum:
+            - GRACEFUL
+            - FORCEFUL
+        gracefulTerminationTimeout:
+          type: integer
+      additionalProperties: false
+    VnfLcmOpOcc:
+      type: object
+      properties:
+        _id:
+          type: string
+          format: uuid
+        id:
+          type: string
+          format: uuid
+        lcmOperationType:
+          type: string
+        vnfInstanceId:
+          type: string
+          format: uuid
+        isAutomaticInvocation:
+          type: boolean
+        isCancelPending:
+          type: boolean
+        startTime:
+          type: number
+          format: float
+        statusEnteredTime:
+          type: number
+          format: float
+        operationState:
+          type: string
+        detailed-status:
+          type: string
+        _links:
+          type: object
+          properties:
+            self:
+              type: string
+              format: path
+            vnfInstance:
+              type: string
+              format: path
+    ArrayOfVnfLcmOpOcc:
+      type: array
+      items:
+        $ref: '#/definitions/VnfLcmOpOcc'
\ No newline at end of file
diff --git a/src/SOL003/components/SOL003_params.yaml b/src/SOL003/components/SOL003_params.yaml
new file mode 100644 (file)
index 0000000..a277a55
--- /dev/null
@@ -0,0 +1,117 @@
+components:
+  parameters:
+    Version:
+      name: Version
+      description: >
+        Version of the API requested to use when responding to this request.
+      in: header
+      required: true
+      schema:
+        type: string
+
+    Accept:
+      name: Accept
+      description: >
+        Content-Types that are acceptable for the response. Reference: IETF RFC 7231.
+      in: header
+      required: true
+      schema:
+        type: string
+
+    Authorization:
+      name: Authorization
+      description: >
+        The authorization token for the request. Reference: IETF RFC 7235.
+      in: header
+      required: false
+      schema:
+        type: string
+
+    ContentType:
+      name: Content-Type
+      description: |
+        The MIME type of the body of the request. Reference: IETF RFC 7231
+      in: header
+      required: true
+      schema:
+        type: string
+
+    filter:
+      name: filter
+      description: >
+        Attribute-based filtering expression according to clause 5.2 of ETSI
+        GS NFV-SOL 013. The VNFM shall support
+        receiving this parameter as part of the URI query string. The API
+        consumer may supply this parameter. All attribute names that appear
+        in the FmSubscription and in data types referenced from it shall be
+        supported by the NFV-MANO functional entity in the filter
+        expression.
+      in: query
+      required: false
+      schema:
+        type: string
+
+    all_fields:
+      name: all_fields
+      description: >
+        Include all complex attributes in the response. See clause
+        5.3 of ETSI GS NFV-SOL 013. The NFV-MANO functional entity
+        shall support this parameter.
+      in: query
+      required: false
+      schema:
+        type: string
+
+    fields:
+      name: fields
+      description: >
+        Complex attributes to be included into the response. See clause
+        5.3 of ETSI GS NFV-SOL 013 for details. The NFV-MANO functional
+        entity should support this parameter.
+      in: query
+      required: false
+      schema:
+        type: string
+
+    exclude_fields:
+      name: exclude_fields
+      description: >
+        Complex attributes to be excluded from the response. See clause
+        5.3 of ETSI GS NFV-SOL 013 for details. The NFV-MANO functional
+        entity should support this parameter.
+      in: query
+      required: false
+      schema:
+        type: string
+
+    exclude_default:
+      name: exclude_default
+      in: query
+      description: >-
+        Indicates to exclude the following complex attributes from the response. See clause 5.3 of ETSI GS NFV-SOL 013
+        for details. The VNFM shall support this parameter.
+        The following attributes shall be excluded from the VnfLcmOpOcc structure in the response
+        body if this parameter is provided, or none of the parameters "all_fields," "fields",
+        "exclude_fields", "exclude_default" are provided:
+        -      operationParams
+        -      error
+        -      resourceChanges
+        -      changedInfo
+        -      changedExtConnectivity
+        -      lcmCoordinations
+        -      modificationsTriggeredByVnfPkgChange
+        -      warnings
+      required: false
+      schema:
+        type: string
+
+    nextpage_opaque_marker:
+      name: nextpage_opaque_marker
+      description: >
+        Marker to obtain the next page of a paged response. Shall be supported by
+        the VNFM if the entity supports alternative 2 (paging)
+        according to clause 5.4.2.1 of ETSI GS NFV-SOL 013 for this resource.
+      in: query
+      required: false
+      schema:
+        type: string
diff --git a/src/SOL003/definitions/SOL003_def.yaml b/src/SOL003/definitions/SOL003_def.yaml
new file mode 100644 (file)
index 0000000..4078f7d
--- /dev/null
@@ -0,0 +1,20 @@
+definitions:\r
+  ProblemDetails:\r
+    type: object\r
+    properties:\r
+      type:\r
+        type: string\r
+        format: uri\r
+      title:\r
+        type: string\r
+      status:\r
+        type: integer\r
+      detail:\r
+        type: string\r
+      instance:\r
+        type: string\r
+        format: uri\r
+    additionalProperties: true\r
+    required:\r
+      - status\r
+      - detail
\ No newline at end of file
diff --git a/src/SOL003/responses/SOL003_resp.yaml b/src/SOL003/responses/SOL003_resp.yaml
new file mode 100644 (file)
index 0000000..c1a0013
--- /dev/null
@@ -0,0 +1,396 @@
+components:
+  responses:
+    204:
+      description: >
+        204 No Content
+      headers:
+        Content-Type:
+          description: >
+            The MIME type of the body of the response.
+          schema:
+            type: string
+            maximum: 1
+            minimum: 1
+        Content-Range:
+          description: >
+            The Content-Range response HTTP header indicates where in a full body message a partial message belongs.
+          schema:
+            type: string
+            maximum: 1
+            minimum: 1
+
+    206:
+      description: >
+        206 PARTIAL CONTENT
+      headers:
+        Content-Type:
+          description: >
+            The MIME type of the body of the response.
+          schema:
+            type: string
+            maximum: 1
+            minimum: 1
+        Content-Range:
+          description: >
+            The Content-Range response HTTP header indicates where in a full body message a partial message belongs.
+          schema:
+            type: string
+            maximum: 1
+            minimum: 1
+      content:
+        application/json:
+          schema:
+            $ref: "../definitions/SOL003_def.yaml#/definitions/ProblemDetails"
+
+    303:
+      description: >
+        303 See Other
+      headers:
+        Content-Type:
+          description: The MIME type of the body of the response.
+          schema:
+            type: string
+            maximum: 1
+            minimum: 1
+
+    400:
+      description: >
+        400 BAD REQUEST
+
+                400 code can be returned in the following specified cases, the specific cause has to be proper specified in the
+                "ProblemDetails" structure to be returned.
+
+                If the request is malformed or syntactically incorrect (e.g. if the request URI contains incorrect
+                query parameters or the payload body contains a syntactically incorrect data structure),
+                the API producer shall respond with this response code. The "ProblemDetails" structure shall be provided,
+                and should include in the "detail" attribute more information about the source of the problem.
+
+                If the response to a GET request which queries a container resource would be so big that the performance
+                of the API producer is adversely affected, and the API producer does not support paging for the affected resource,
+                it shall respond with this response code. The "ProblemDetails" structure shall be provided, and should include
+                in the "detail" attribute more information about the source of the problem.
+
+                If there is an application error related to the client's input that cannot be easily mapped to any other
+                HTTP response code ("catch all error"), the API producer shall respond with this response code.
+                The "ProblemDetails" structure shall be provided, and shall include in the "detail" attribute more information
+                about the source of the problem.
+
+                If the request contains a malformed access token, the API producer should respond with this response.
+                The details of the error shall be returned in the WWW Authenticate HTTP header, as defined in IETF RFC 6750
+                and IETF RFC 7235. The ProblemDetails structure may be provided.
+
+                The use of this HTTP error response code described above is applicable to the use of the OAuth 2.0
+                for the authorization of API requests and notifications, as defined in clauses 4.5.3.3 and 4.5.3.4.
+      headers:
+        Content-Type:
+          description: The MIME type of the body of the response.
+          schema:
+            type: string
+            maximum: 1
+            minimum: 1
+      content:
+        application/json:
+          schema:
+            $ref: "../definitions/SOL003_def.yaml#/definitions/ProblemDetails"
+
+    401:
+      description: >
+        401 UNAUTHORIZED
+
+        If the request contains no access token even though one is required, or if the request contains an authorization
+        token that is invalid (e.g. expired or revoked), the API producer should respond with this response.
+        The details of the error shall be returned in the WWW-Authenticate HTTP header, as defined in IETF RFC 6750
+        and IETF RFC 7235. The ProblemDetails structure may be provided.
+      headers:
+        Content-Type:
+          description: The MIME type of the body of the response.
+          schema:
+            type: string
+            maximum: 1
+            minimum: 1
+      content:
+        application/json:
+          schema:
+            $ref: "../definitions/SOL003_def.yaml#/definitions/ProblemDetails"
+
+    403:
+      description: >
+        403 FORBIDDEN
+
+        If the API consumer is not allowed to perform a particular request to a particular resource,
+        the API producer shall respond with this response code. The "ProblemDetails" structure shall be provided.
+        It should include in the "detail" attribute information about the source of the problem,
+        and may indicate how to solve it.
+      headers:
+        Content-Type:
+          description: The MIME type of the body of the response.
+          schema:
+            type: string
+            maximum: 1
+            minimum: 1
+      content:
+        application/json:
+          schema:
+            $ref: "../definitions/SOL003_def.yaml#/definitions/ProblemDetails"
+
+    404:
+      description: >
+        404 NOT FOUND
+
+        If the API producer did not find a current representation for the resource addressed by the URI passed
+        in the request or is not willing to disclose that one exists, it shall respond with this response code.
+        The "ProblemDetails" structure may be provided, including in the "detail" attribute information about
+        the source of the problem, e.g. a wrong resource URI variable.
+
+        This response code is not appropriate in case the resource addressed by the URI is a container resource
+        which is designed to contain child resources, but does not contain any child resource at the time
+        the request is received. For a GET request to an existing empty container resource, a typical response
+        contains a 200 OK response code and a payload body with an empty array.
+      headers:
+        Content-Type:
+          description: The MIME type of the body of the response.
+          schema:
+            type: string
+            maximum: 1
+            minimum: 1
+      content:
+        application/json:
+          schema:
+            $ref: "../definitions/SOL003_def.yaml#/definitions/ProblemDetails"
+
+    405:
+      description: >
+        405 METHOD NOT ALLOWED
+
+        If a particular HTTP method is not supported for a particular resource, the API producer shall respond
+        with this response code. The "ProblemDetails" structure may be omitted.
+      headers:
+        Content-Type:
+          description: The MIME type of the body of the response.
+          schema:
+            type: string
+            maximum: 1
+            minimum: 1
+      content:
+        application/json:
+          schema:
+            $ref: "../definitions/SOL003_def.yaml#/definitions/ProblemDetails"
+
+    406:
+      description: >
+        406 NOT ACCEPTABLE
+
+        If the "Accept" HTTP header does not contain at least one name of a content type
+        that is acceptable to the API producer, the API producer shall respond with this
+        response code. The "ProblemDetails" structure may be omitted.
+      headers:
+        Content-Type:
+          description: The MIME type of the body of the response.
+          schema:
+            type: string
+            maximum: 1
+            minimum: 1
+      content:
+        application/json:
+          schema:
+            $ref: "../definitions/SOL003_def.yaml#/definitions/ProblemDetails"
+
+    409:
+      description: >
+        409 CONFLICT
+      headers:
+        Content-Type:
+          description: The MIME type of the body of the response.
+          schema:
+            type: string
+            maximum: 1
+            minimum: 1
+      content:
+        application/json:
+          schema:
+            $ref: "../definitions/SOL003_def.yaml#/definitions/ProblemDetails"
+
+    412:
+      description: >
+        412 PRECONDITION FAILED
+
+        Error: A precondition given in an HTTP request header is not fulfilled.
+        Typically, this is due to an ETag mismatch, indicating that the resource was modified by another entity.
+        The response body should contain a ProblemDetails structure, in which the "detail" attribute should convey
+        more information about the error.
+      headers:
+        Content-Type:
+          description: The MIME type of the body of the response.
+          schema:
+            type: string
+            maximum: 1
+            minimum: 1
+      content:
+        application/json:
+          schema:
+            $ref: "../definitions/SOL003_def.yaml#/definitions/ProblemDetails"
+
+    413:
+      description: >
+        413 PAYLOAD TOO LARGE
+
+        If the payload body of a request is larger than the amount of data the API producer is willing or able to process,
+        it shall respond with this response code, following the provisions in IETF RFC 7231 for the use
+        of the "Retry-After" HTTP header and for closing the connection. The "ProblemDetails" structure may be omitted.
+      headers:
+        Content-Type:
+          description: The MIME type of the body of the response.
+          schema:
+            type: string
+            maximum: 1
+            minimum: 1
+      content:
+        application/json:
+          schema:
+            $ref: "../definitions/SOL003_def.yaml#/definitions/ProblemDetails"
+
+    414:
+      description: >
+        414 URI TOO LONG
+
+        If the request URI of a request is longer than the API producer is willing or able to process,
+        it shall respond with this response code. This condition can e.g. be caused by passing long queries
+        in the request URI of a GET request. The "ProblemDetails" structure may be omitted.
+      headers:
+        Content-Type:
+          description: The MIME type of the body of the response.
+          schema:
+            type: string
+            maximum: 1
+            minimum: 1
+      content:
+        application/json:
+          schema:
+            $ref: "../definitions/SOL003_def.yaml#/definitions/ProblemDetails"
+
+    416:
+      description: >
+        416 Range Not Satisfiable
+      headers:
+        Content-Type:
+          description: The MIME type of the body of the response.
+          schema:
+            type: string
+            maximum: 1
+            minimum: 1
+      content:
+        application/json:
+          schema:
+            $ref: "../definitions/SOL003_def.yaml#/definitions/ProblemDetails"
+
+    422:
+      description: >
+        422 UNPROCESSABLE ENTITY
+
+        If the payload body of a request contains syntactically correct data (e.g. well-formed JSON) but the data
+        cannot be processed (e.g. because it fails validation against a schema), the API producer shall respond
+        with this response code. The "ProblemDetails" structure shall be provided, and should include in the "detail"
+        attribute more information about the source of the problem.
+
+        This error response code is only applicable for methods that have a request body.
+      headers:
+        Content-Type:
+          description: The MIME type of the body of the response.
+          schema:
+            type: string
+            maximum: 1
+            minimum: 1
+      content:
+        application/json:
+          schema:
+            $ref: "../definitions/SOL003_def.yaml#/definitions/ProblemDetails"
+
+    429:
+      description: >
+        429 TOO MANY REQUESTS
+
+        If the API consumer has sent too many requests in a defined period of time and the API producer is able
+        to detect that condition ("rate limiting"), the API producer shall respond with this response code,
+        following the provisions in IETF RFC 6585 [17] for the use of the "Retry-After" HTTP header.
+        The "ProblemDetails" structure shall be provided and shall include in the "detail" attribute more information
+        about the source of the problem.
+
+        The period of time and allowed number of requests are configured within the API producer by means
+        outside the scope of the present document.
+      headers:
+        Content-Type:
+          description: The MIME type of the body of the response.
+          schema:
+            type: string
+            maximum: 1
+            minimum: 1
+      content:
+        application/json:
+          schema:
+            $ref: "../definitions/SOL003_def.yaml#/definitions/ProblemDetails"
+
+    500:
+      description: >
+        500 INTERNAL SERVER ERROR
+
+        If there is an application error not related to the client's input that cannot be easily mapped to any other
+        HTTP response code ("catch all error"), the API producer shall respond with this response code.
+        The "ProblemDetails" structure shall be provided, and shall include in the "detail" attribute more information
+        about the source of the problem.
+      headers:
+        Content-Type:
+          description: The MIME type of the body of the response.
+          schema:
+            type: string
+            maximum: 1
+            minimum: 1
+      content:
+        application/json:
+          schema:
+            $ref: "../definitions/SOL003_def.yaml#/definitions/ProblemDetails"
+
+    503:
+      description: >
+        503 SERVICE UNAVAILABLE
+
+        If the API producer encounters an internal overload situation of itself or of a system it relies on,
+        it should respond with this response code, following the provisions in IETF RFC 7231 for the use of
+        the "Retry-After" HTTP header and for the alternative to refuse the connection. The "ProblemDetails"
+        structure may be omitted.
+      headers:
+        Content-Type:
+          description: The MIME type of the body of the response.
+          schema:
+            type: string
+            maximum: 1
+            minimum: 1
+      content:
+        application/json:
+          schema:
+            $ref: "../definitions/SOL003_def.yaml#/definitions/ProblemDetails"
+
+    504:
+      description: >
+        504 GATEWAY TIMEOUT
+
+        If the API producer encounters a timeout while waiting for a response from an upstream server
+        (i.e. a server that the API producer communicates with when fulfilling a request), it should respond
+        with this response code.
+      headers:
+        Content-Type:
+          description: The MIME type of the body of the response.
+          schema:
+            type: string
+            maximum: 1
+            minimum: 1
+      content:
+        application/json:
+          schema:
+            $ref: "../definitions/SOL003_def.yaml#/definitions/ProblemDetails"
+
+    UnexpectedError:
+      description: Unexpected error.
+      content:
+        application/json:
+          schema:
+            $ref: "../definitions/SOL003_def.yaml#/definitions/ProblemDetails"