First commit with API for NS packages and Apache2 license file
[osm/SOL005.git] / osm-openapi.yaml
1 openapi: 3.0.0
2 servers:
3   - description: OSM NB API
4     url: https://osm.etsi.org/nbapi/v1.0.0
5 info:
6   description: |
7     This is Open Source MANO Northbound API featuring ETSI NFV SOL005.
8     For more information on OSM, you can visit
9     [http://osm.etsi.org](http://osm.etsi.org) or connect to IRCs
10     [Freenode, #etsi-osm](http://webchat.freenode.net?channels=etsi-osm) or on
11     [OSM IRC, #tech](https://osm.etsi.org:8080/kiwi)
12   version: "1.0.0"
13   title: OSM NB API featuring ETSI NFV SOL005
14   contact:
15     email: OSM_TECH@list.etsi.org
16   license:
17     name: Apache 2.0
18     url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
19 tags:
20   - name: 'VNF packages'
21     description: Management operations of VNF descriptors and packages
22   - name: 'NS packages'
23     description: Management operations of NS descriptors and packages
24   - name: 'NS instances'
25     description: Management operations of NS instances
26 paths:
27   /nsd/v1/ns_descriptors:
28     get:
29       tags:
30         - "NS packages"
31       summary: Query information about multiple NS descriptor resources
32       description: Query information about multiple NS descriptor resources
33       operationId: getNSDs
34       security:
35         - bearerAuth: []
36       responses:
37         '200':
38           description: OK
39           content:
40             application/json:
41               schema:
42                 $ref: '#/components/schemas/ArrayOfNsdInfo'
43             application/yaml:
44               schema:
45                 $ref: '#/components/schemas/ArrayOfNsdInfo'
46         '400':
47           $ref: '#/components/responses/BadRequest'
48         '401':
49           $ref: '#/components/responses/Unauthorized'
50         '403':
51           $ref: '#/components/responses/Forbidden'
52         '404':
53           $ref: '#/components/responses/NotFound'
54         '405':
55           $ref: '#/components/responses/MethodNotAllowed'
56         '406':
57           $ref: '#/components/responses/NotAcceptable'
58         '409':
59           $ref: '#/components/responses/Conflict'
60         '422':
61           $ref: '#/components/responses/UnprocessableEntity'
62         '500':
63           $ref: '#/components/responses/InternalServerError'
64         '503':
65           $ref: '#/components/responses/ServiceUnavailable'
66         '5XX':
67           $ref: '#/components/responses/UnexpectedError'
68         default:
69           $ref: '#/components/responses/UnexpectedError'
70     post:
71       tags:
72         - "NS packages"
73       summary: Create a new NS descriptor resource
74       description: Create a new NS descriptor resource
75       operationId: addNSD
76       security:
77         - bearerAuth: []
78       requestBody:
79         $ref: '#/components/requestBodies/CreateNsdInfoRequest'
80       responses:
81         '201':
82           description: Created
83           content:
84             application/json:
85               schema:
86                 $ref: '#/components/schemas/NsdInfo'
87             application/yaml:
88               schema:
89                 $ref: '#/components/schemas/NsdInfo'
90         '400':
91           $ref: '#/components/responses/BadRequest'
92         '401':
93           $ref: '#/components/responses/Unauthorized'
94         '403':
95           $ref: '#/components/responses/Forbidden'
96         '404':
97           $ref: '#/components/responses/NotFound'
98         '405':
99           $ref: '#/components/responses/MethodNotAllowed'
100         '406':
101           $ref: '#/components/responses/NotAcceptable'
102         '409':
103           $ref: '#/components/responses/Conflict'
104         '422':
105           $ref: '#/components/responses/UnprocessableEntity'
106         '500':
107           $ref: '#/components/responses/InternalServerError'
108         '503':
109           $ref: '#/components/responses/ServiceUnavailable'
110         '5XX':
111           $ref: '#/components/responses/UnexpectedError'
112         default:
113           $ref: '#/components/responses/UnexpectedError'
114   '/nsd/v1/ns_descriptors/{nsdInfoId}':
115     get:
116       tags:
117         - "NS packages"
118       summary: Read information about an individual NS descriptor resource
119       description: Read information about an individual NS descriptor resource
120       operationId: getNSD
121       security:
122         - bearerAuth: []
123       responses:
124         '200':
125           description: OK
126           content:
127             application/json:
128               schema:
129                 $ref: '#/components/schemas/NsdInfo'
130             application/yaml:
131               schema:
132                 $ref: '#/components/schemas/NsdInfo'
133         '400':
134           $ref: '#/components/responses/BadRequest'
135         '401':
136           $ref: '#/components/responses/Unauthorized'
137         '403':
138           $ref: '#/components/responses/Forbidden'
139         '404':
140           $ref: '#/components/responses/NotFound'
141         '405':
142           $ref: '#/components/responses/MethodNotAllowed'
143         '406':
144           $ref: '#/components/responses/NotAcceptable'
145         '409':
146           $ref: '#/components/responses/Conflict'
147         '422':
148           $ref: '#/components/responses/UnprocessableEntity'
149         '500':
150           $ref: '#/components/responses/InternalServerError'
151         '503':
152           $ref: '#/components/responses/ServiceUnavailable'
153         '5XX':
154           $ref: '#/components/responses/UnexpectedError'
155         default:
156           $ref: '#/components/responses/UnexpectedError'
157     delete:
158       tags:
159         - "NS packages"
160       summary: Delete an individual NS descriptor resource
161       description: Delete an individual NS descriptor resource
162       operationId: deleteNSD
163       security:
164         - bearerAuth: []
165       responses:
166         '204':
167           description: No Content
168         '400':
169           $ref: '#/components/responses/BadRequest'
170         '401':
171           $ref: '#/components/responses/Unauthorized'
172         '403':
173           $ref: '#/components/responses/Forbidden'
174         '404':
175           $ref: '#/components/responses/NotFound'
176         '405':
177           $ref: '#/components/responses/MethodNotAllowed'
178         '406':
179           $ref: '#/components/responses/NotAcceptable'
180         '409':
181           $ref: '#/components/responses/Conflict'
182         '422':
183           $ref: '#/components/responses/UnprocessableEntity'
184         '500':
185           $ref: '#/components/responses/InternalServerError'
186         '503':
187           $ref: '#/components/responses/ServiceUnavailable'
188         '5XX':
189           $ref: '#/components/responses/UnexpectedError'
190         default:
191           $ref: '#/components/responses/UnexpectedError'
192     patch:
193       tags:
194         - "NS packages"
195       summary: Modify the operational state and/or the user defined data of an  individual NS descriptor resource
196       description: Modify the operational state and/or the user defined data of an  individual NS descriptor resource
197       operationId: updateNSD
198       security:
199         - bearerAuth: []
200       requestBody:
201         $ref: '#/components/requestBodies/NsdInfoModifications'
202       responses:
203         '200':
204           description: OK
205           content:
206             application/json:
207               schema:
208                 $ref: '#/components/schemas/NsdInfoModifications'
209             application/yaml:
210               schema:
211                 $ref: '#/components/schemas/NsdInfoModifications'
212         '400':
213           $ref: '#/components/responses/BadRequest'
214         '401':
215           $ref: '#/components/responses/Unauthorized'
216         '403':
217           $ref: '#/components/responses/Forbidden'
218         '404':
219           $ref: '#/components/responses/NotFound'
220         '405':
221           $ref: '#/components/responses/MethodNotAllowed'
222         '406':
223           $ref: '#/components/responses/NotAcceptable'
224         '409':
225           $ref: '#/components/responses/Conflict'
226         '422':
227           $ref: '#/components/responses/UnprocessableEntity'
228         '500':
229           $ref: '#/components/responses/InternalServerError'
230         '503':
231           $ref: '#/components/responses/ServiceUnavailable'
232         '5XX':
233           $ref: '#/components/responses/UnexpectedError'
234         default:
235           $ref: '#/components/responses/UnexpectedError'
236   '/nsd/v1/ns_descriptors/{nsdInfoId}/nsd_content':
237     get:
238       tags:
239         - "NS packages"
240       summary: Fetch the content of a NSD
241       description: Fetch the content of a NSD
242       operationId: getNSDcontent
243       security:
244         - bearerAuth: []
245       responses:
246         '200':
247           description: OK
248           $ref: '#/components/requestBodies/NsdContent'
249         '206':
250           description: Partial Content
251           headers:
252             Content-Range:
253               schema:
254                 type: string
255           $ref: '#/components/requestBodies/NsdContent'
256         '400':
257           $ref: '#/components/responses/BadRequest'
258         '401':
259           $ref: '#/components/responses/Unauthorized'
260         '403':
261           $ref: '#/components/responses/Forbidden'
262         '404':
263           $ref: '#/components/responses/NotFound'
264         '405':
265           $ref: '#/components/responses/MethodNotAllowed'
266         '406':
267           $ref: '#/components/responses/NotAcceptable'
268         '409':
269           $ref: '#/components/responses/Conflict'
270         '422':
271           $ref: '#/components/responses/UnprocessableEntity'
272         '500':
273           $ref: '#/components/responses/InternalServerError'
274         '503':
275           $ref: '#/components/responses/ServiceUnavailable'
276         '5XX':
277           $ref: '#/components/responses/UnexpectedError'
278         default:
279           $ref: '#/components/responses/UnexpectedError'
280     put:
281       tags:
282         - "NS packages"
283       summary: Upload the content of a NSD
284       description: Upload the content of a NSD
285       operationId: updateNSDcontent
286       security:
287         - bearerAuth: []
288       requestBody:
289         $ref: '#/components/requestBodies/NsdContent'
290       responses:
291         '202':
292           description: Accepted
293         '204':
294           description: No Content
295         '400':
296           $ref: '#/components/responses/BadRequest'
297         '401':
298           $ref: '#/components/responses/Unauthorized'
299         '403':
300           $ref: '#/components/responses/Forbidden'
301         '404':
302           $ref: '#/components/responses/NotFound'
303         '405':
304           $ref: '#/components/responses/MethodNotAllowed'
305         '406':
306           $ref: '#/components/responses/NotAcceptable'
307         '409':
308           $ref: '#/components/responses/Conflict'
309         '422':
310           $ref: '#/components/responses/UnprocessableEntity'
311         '500':
312           $ref: '#/components/responses/InternalServerError'
313         '503':
314           $ref: '#/components/responses/ServiceUnavailable'
315         '5XX':
316           $ref: '#/components/responses/UnexpectedError'
317         default:
318           $ref: '#/components/responses/UnexpectedError'
319 externalDocs:
320   description: Find out more OSM
321   url: 'http://osm.etsi.org/wikipub'
322 components:
323   responses:
324     BadRequest:
325       description: Bad request. The server cannot process the request due to a client error.
326       content:
327         application/json:
328           schema:
329             $ref: '#/components/schemas/ProblemDetails'
330     Unauthorized:
331       description: Authorization information is missing or invalid.
332       content:
333         application/json:
334           schema:
335             $ref: '#/components/schemas/ProblemDetails'
336     Forbidden:
337       description: Not enough permissions to do this operation.
338       content:
339         application/json:
340           schema:
341             $ref: '#/components/schemas/ProblemDetails'
342     NotFound:
343       description: The specified resource was not found.
344       content:
345         application/json:
346           schema:
347             $ref: '#/components/schemas/ProblemDetails'
348     MethodNotAllowed:
349       description: This method is not supported for the requested resource.
350       content:
351         application/json:
352           schema:
353             $ref: '#/components/schemas/ProblemDetails'
354     NotAcceptable:
355       description: The requested resource content cannot match the Accept headers sent in the request.
356       content:
357         application/json:
358           schema:
359             $ref: '#/components/schemas/ProblemDetails'
360     Conflict:
361       description: The operation cannot be executed currently, due to a conflict with the state of the resource.
362       content:
363         application/json:
364           schema:
365             $ref: '#/components/schemas/ProblemDetails'
366     UnprocessableEntity:
367       description: The request was well-formed but was unable to be followed due to semantic errors.
368       content:
369         application/json:
370           schema:
371             $ref: '#/components/schemas/ProblemDetails'
372     InternalServerError:
373       description: Internal server error.
374       content:
375         application/json:
376           schema:
377             $ref: '#/components/schemas/ProblemDetails'
378     ServiceUnavailable:
379       description: Service temporarily unavailable.
380       content:
381         application/json:
382           schema:
383             $ref: '#/components/schemas/ProblemDetails'
384     UnexpectedError:
385       description: Unexpected error.
386       content:
387         application/json:
388           schema:
389             $ref: '#/components/schemas/ProblemDetails'
390   schemas:
391     NsDescriptor:
392       type: string
393     NsPackage:
394       type: string
395       format: binary
396     userDefinedData:
397       type: object
398       additionalProperties:
399         type: string
400     CreateNsdInfoRequest:
401       type: object
402       properties:
403         userDefinedData:
404           $ref: '#/components/schemas/userDefinedData'
405     NsdOnboardingStateType:
406       type: string
407       enum: [CREATED, UPLAODING, PROCESSING, ONBOARDED]
408       description: |
409         NSD onboarding state:
410          * `CREATED` - The NSD information object is created.
411          * `UPLOADING` - The associated NSD content is being uploaded.
412          * `PROCESSING` - The associated NSD content is being processed, e.g. validation.
413          * `ONBOARDED` - The associated NSD content is on-boarded. 
414     NsdOperationalStateType:
415       type: string
416       enum: [ENABLED, DISABLED]
417       description: |
418         NSD operational state:
419          * `ENABLED` - The NSD is enabled.
420          * `ENABLED` - The NSD is disabled.
421     NsdUsageStateType:
422       type: string
423       enum: [IN_USE, NOT_IN_USE]
424       description: |
425         NSD operational state:
426          * `IN_USE` - The NSD is in use.
427          * `NOT_IN_USE` - The NSD is not in use.
428     NsdInfoModifications:
429       type: object
430       properties:
431         nsdOperationalState:
432           $ref: '#/components/schemas/NsdOperationalStateType'
433         userDefinedData:
434           $ref: '#/components/schemas/userDefinedData'
435     NsdInfo:
436       type: object
437       properties:
438         id:
439           description: |
440            Identifier of the onboarded individual NS descriptor
441            resource. This identifier is allocated by the NFVO. 
442           type: string
443           format: uuid
444         nsdId:
445           description: |
446             This identifier, which is allocated by the NSD
447             designer, identifies the NSD in a globally unique
448             way. It is copied from the NSD content and shall be
449             present after the NSD content is on-boarded.
450           type: string
451           format: uuid
452         nsdName:
453           description: |
454             Name of the onboarded NSD. This information is
455             copied from the NSD content and shall be present
456             after the NSD content is on-boarded. 
457           type: string
458         nsdVersion:
459           description: |
460             Version of the on-boarded NSD. This information is
461             copied from the NSD content and shall be present
462             after the NSD content is on-boarded.
463           type: string
464         nsdDesigner:
465           description: |
466             Designer of the on-boarded NSD. This information is
467             copied from the NSD content and shall be present
468             after the NSD content is on-boarded.
469           type: string
470         nsdInvariantId:
471           description: |
472             This identifier, which is allocated by the NSD designer,
473             identifies an NSD in a version independent manner. This
474             information is copied from the NSD content and shall be
475             present after the NSD content is on-boarded. 
476           type: string
477         vnfPkgIds:
478           description: |
479             List of VNF package identifiers referenced by the on-boarded
480             NS descriptor resource.
481           type: array
482           items:
483             type: string
484             format: uuid
485         pnfdInfoIds:
486           description: |
487             List of PNFD identifiers referenced by the on-boarded NS
488             descriptor resource.
489           type: array
490           items:
491             type: string
492             format: uuid
493         nestedNsdInfoIds:
494           description: |
495             List of NSD identifiers referenced by the on-boarded NS
496             descriptor resource.
497           type: array
498           items:
499             type: string
500             format: uuid
501         nsdOnboardingState:
502           $ref: '#components/schemas/NsdOnboardingStateType'
503         onboardingFailureDetails:
504           $ref: '#/components/schemas/ProblemDetails'
505         nsdOperationalState:
506           $ref: '#components/schemas/NsdOperationalStateType'
507         nsdUsagestate:
508           $ref: '#components/schemas/NsdUsageStateType'
509         userDefinedData:
510           $ref: '#/components/schemas/userDefinedData'
511         self:
512           type: string
513           format: uri
514         nsd_content:
515           type: string
516           format: uri
517       required:
518         - id
519     ArrayOfNsdInfo:
520       type: array
521       items:
522         $ref: '#/components/schemas/NsdInfo'
523     # Problem details as described in RFC 7807.
524     # Optional fields "type" and "instance", as described in RFC 7807 are not used here.
525     ProblemDetails:
526       type: object
527       properties:
528         type:
529           type: string
530           format: uri
531         title:
532           type: string
533         status:
534           type: integer
535         detail:
536           type: string
537         instance:
538           type: string
539           format: uri
540       additionalProperties: true
541       required:
542         - status
543         - detail
544   requestBodies:
545     CreateNsdInfoRequest:
546       content:
547         application/json:
548           schema:
549             $ref: '#/components/schemas/CreateNsdInfoRequest'
550         application/yaml:
551           schema:
552             $ref: '#/components/schemas/CreateNsdInfoRequest'
553     NsdInfoModifications:
554       content:
555         application/json:
556           schema:
557             $ref: '#/components/schemas/NsdInfoModifications'
558         application/yaml:
559           schema:
560             $ref: '#/components/schemas/NsdInfoModifications'
561     NsdContent:
562       content:
563         text/plain:
564           schema:
565             $ref: '#/components/schemas/NsDescriptor'
566         application/zip:
567           schema:
568             $ref: '#/components/schemas/NsPackage'
569   securitySchemes:
570     bearerAuth:
571       type: http
572       scheme: bearer
573