+openapi: 3.0.0
+servers:
+ - description: OSM NB API
+ url: https://osm.etsi.org/nbapi/v1.0.0
+info:
+ description: |
+ This is Open Source MANO Northbound API featuring ETSI NFV SOL005.
+ For more information on OSM, you can visit
+ [http://osm.etsi.org](http://osm.etsi.org) or connect to IRCs
+ [Freenode, #etsi-osm](http://webchat.freenode.net?channels=etsi-osm) or on
+ [OSM IRC, #tech](https://osm.etsi.org:8080/kiwi)
+ version: "1.0.0"
+ title: OSM NB API featuring ETSI NFV SOL005
+ 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 packages'
+ description: Management operations of VNF descriptors and packages
+ - name: 'NS packages'
+ description: Management operations of NS descriptors and packages
+ - name: 'NS instances'
+ description: Management operations of NS instances
+paths:
+ /nsd/v1/ns_descriptors:
+ get:
+ tags:
+ - "NS packages"
+ summary: Query information about multiple NS descriptor resources
+ description: Query information about multiple NS descriptor resources
+ operationId: getNSDs
+ security:
+ - bearerAuth: []
+ responses:
+ '200':
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ArrayOfNsdInfo'
+ application/yaml:
+ schema:
+ $ref: '#/components/schemas/ArrayOfNsdInfo'
+ '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 packages"
+ summary: Create a new NS descriptor resource
+ description: Create a new NS descriptor resource
+ operationId: addNSD
+ security:
+ - bearerAuth: []
+ requestBody:
+ $ref: '#/components/requestBodies/CreateNsdInfoRequest'
+ responses:
+ '201':
+ description: Created
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/NsdInfo'
+ application/yaml:
+ schema:
+ $ref: '#/components/schemas/NsdInfo'
+ '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'
+ '/nsd/v1/ns_descriptors/{nsdInfoId}':
+ get:
+ tags:
+ - "NS packages"
+ summary: Read information about an individual NS descriptor resource
+ description: Read information about an individual NS descriptor resource
+ operationId: getNSD
+ security:
+ - bearerAuth: []
+ responses:
+ '200':
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/NsdInfo'
+ application/yaml:
+ schema:
+ $ref: '#/components/schemas/NsdInfo'
+ '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 packages"
+ summary: Delete an individual NS descriptor resource
+ description: Delete an individual NS descriptor resource
+ operationId: deleteNSD
+ 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:
+ - "NS packages"
+ summary: Modify the operational state and/or the user defined data of an individual NS descriptor resource
+ description: Modify the operational state and/or the user defined data of an individual NS descriptor resource
+ operationId: updateNSD
+ security:
+ - bearerAuth: []
+ requestBody:
+ $ref: '#/components/requestBodies/NsdInfoModifications'
+ responses:
+ '200':
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/NsdInfoModifications'
+ application/yaml:
+ schema:
+ $ref: '#/components/schemas/NsdInfoModifications'
+ '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'
+ '/nsd/v1/ns_descriptors/{nsdInfoId}/nsd_content':
+ get:
+ tags:
+ - "NS packages"
+ summary: Fetch the content of a NSD
+ description: Fetch the content of a NSD
+ operationId: getNSDcontent
+ security:
+ - bearerAuth: []
+ responses:
+ '200':
+ description: OK
+ $ref: '#/components/requestBodies/NsdContent'
+ '206':
+ description: Partial Content
+ headers:
+ Content-Range:
+ schema:
+ type: string
+ $ref: '#/components/requestBodies/NsdContent'
+ '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:
+ - "NS packages"
+ summary: Upload the content of a NSD
+ description: Upload the content of a NSD
+ operationId: updateNSDcontent
+ security:
+ - bearerAuth: []
+ requestBody:
+ $ref: '#/components/requestBodies/NsdContent'
+ 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'
+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
+