Merge "Allow Module Re-Sync"
[cps.git] / cps-ncmp-rest / docs / openapi / components.yaml
1 #  ============LICENSE_START=======================================================
2 #  Copyright (C) 2021-2022 Nordix Foundation
3 #  Modifications Copyright (C) 2021 Pantheon.tech
4 #  Modifications Copyright (C) 2022 Bell Canada
5 #  ================================================================================
6 #  Licensed under the Apache License, Version 2.0 (the "License");
7 #  you may not use this file except in compliance with the License.
8 #  You may obtain a copy of the License at
9 #
10 #        http://www.apache.org/licenses/LICENSE-2.0
11 #
12 #  Unless required by applicable law or agreed to in writing, software
13 #  distributed under the License is distributed on an "AS IS" BASIS,
14 #  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 #  See the License for the specific language governing permissions and
16 #  limitations under the License.
17 #
18 #  SPDX-License-Identifier: Apache-2.0
19 #  ============LICENSE_END=========================================================
20
21 components:
22   schemas:
23     # Common Schemas
24     ErrorMessage:
25       type: object
26       title: Error
27       properties:
28         status:
29           type: string
30         message:
31           type: string
32         details:
33           type: string
34     # DMI Server Exception Schema
35     DmiErrorMessage:
36       title: DMI Error Message
37       type: object
38       properties:
39         message:
40           type: string
41           example: "Bad Gateway Error Message NCMP"
42         dmi-response:
43           type: object
44           properties:
45             http-code:
46               type: integer
47               example: 400
48             body:
49               type: string
50               example: Bad Request
51     # Request Schemas
52     RestDmiPluginRegistration:
53       type: object
54       properties:
55         dmiPlugin:
56           type: string
57           example: my-dmi-plugin
58           default: ""
59         dmiDataPlugin:
60           type: string
61           example: my-dmi-data-plugin
62           default: ""
63         dmiModelPlugin:
64           type: string
65           example: my-dmi-model-plugin
66           default: ""
67         createdCmHandles:
68           type: array
69           items:
70             $ref: '#/components/schemas/RestInputCmHandle'
71         updatedCmHandles:
72           type: array
73           items:
74             $ref: '#/components/schemas/RestInputCmHandle'
75             example:
76               cmHandle: my-cm-handle
77               cmHandleProperties:
78                 add-my-property: add-property
79                 update-my-property: updated-property
80                 delete-my-property: '~'
81               publicCmHandleProperties:
82                 add-my-property: add-property
83                 update-my-property: updated-property
84                 delete-my-property: '~'
85         removedCmHandles:
86           type: array
87           items:
88             type: string
89           example: [my-cm-handle1, my-cm-handle2, my-cm-handle3]
90     DmiPluginRegistrationErrorResponse:
91       type: object
92       properties:
93         failedCreatedCmHandles:
94           type: array
95           items:
96             $ref: '#/components/schemas/CmHandlerRegistrationErrorResponse'
97         failedUpdatedCmHandles:
98           type: array
99           items:
100             $ref: '#/components/schemas/CmHandlerRegistrationErrorResponse'
101         failedRemovedCmHandles:
102           type: array
103           items:
104             $ref: '#/components/schemas/CmHandlerRegistrationErrorResponse'
105     CmHandlerRegistrationErrorResponse:
106       type: object
107       properties:
108         cmHandle:
109           type: string
110           example: my-cm-handle
111         errorCode:
112           type: string
113           example: '00'
114         errorText:
115           type: string
116           example: 'Unknown error. <error-details>'
117
118     RestInputCmHandle:
119       required:
120         - cmHandle
121       type: object
122       properties:
123         cmHandle:
124           type: string
125           example: my-cm-handle
126         cmHandleProperties:
127             $ref: '#/components/schemas/RestCmHandleProperties'
128         publicCmHandleProperties:
129             $ref: '#/components/schemas/RestCmHandleProperties'
130     RestCmHandleProperties:
131         type: object
132         additionalProperties:
133             type: string
134             example: my-property
135
136     #Response Schemas
137     RestModuleReference:
138       type: object
139       title: Module reference details
140       properties:
141         moduleName:
142           type: string
143           example: my-module-name
144         revision:
145           type: string
146           example: my-module-revision
147
148     RestModuleDefinition:
149       type: object
150       title: Module definitions
151       properties:
152         moduleName:
153           type: string
154           example: my-module-name
155         revision:
156           type: string
157           example: 2020-09-15
158         content:
159           type: string
160           example: |
161             module stores {
162               yang-version 1.1;
163               namespace "org:onap:ccsdk:sample";
164               prefix book-store;
165               revision "2020-09-15" {
166                 description
167                 "Sample Model";
168               }
169             }
170
171
172     CmHandleQueryParameters:
173       type: object
174       title: Cm Handle query parameters for executing cm handle search
175       properties:
176         cmHandleQueryParameters:
177           type: array
178           items:
179             type: object
180             $ref: '#/components/schemas/ConditionProperties'
181         conditions:
182           deprecated: true
183           type: array
184           items:
185             type: object
186             $ref: '#/components/schemas/OldConditionProperties'
187           description: not necessary, it is just for backward compatibility
188       example:
189         cmHandleQueryParameters:
190           - conditionName: hasAllModules
191             conditionParameters:
192               - { "moduleName": "my-module-1" }
193               - { "moduleName": "my-module-2" }
194               - { "moduleName": "my-module-3" }
195           - conditionName: hasAllProperties
196             conditionParameters:
197               - { "Color": "yellow" }
198               - { "Shape": "circle" }
199               - { "Size": "small" }
200     ConditionProperties:
201       properties:
202         conditionName:
203           type: string
204         conditionParameters:
205           type: array
206           items:
207             type: object
208             additionalProperties:
209               type: string
210     OldConditionProperties:
211       deprecated: true
212       properties:
213         name:
214           type: string
215         conditionParameters:
216           type: array
217           items:
218             type: object
219             $ref: '#/components/schemas/ModuleNameAsJsonObject'
220     ModuleNameAsJsonObject:
221       properties:
222         moduleName:
223           type: string
224           example: my-module
225
226     RestOutputCmHandle:
227       type: object
228       title: CM handle Details
229       properties:
230         cmHandle:
231           type: string
232           example: my-cm-handle1
233         publicCmHandleProperties:
234           $ref: '#/components/schemas/CmHandlePublicProperties'
235         state:
236           $ref: '#/components/schemas/CmHandleCompositeState'
237     CmHandlePublicProperties:
238       type: array
239       items:
240         type: object
241         additionalProperties:
242           type: string
243           example: Book Type
244     CmHandleCompositeState:
245       type: object
246       properties:
247         cmHandleState:
248           type: string
249           example: ADVISED
250         lockReason:
251           $ref: '#/components/schemas/lock-reason'
252         lastUpdateTime:
253           type: string
254           example: 2022-12-31T20:30:40.000+0000
255         dataSyncEnabled:
256           type: boolean
257           example: false
258         dataSyncState:
259           $ref: '#/components/schemas/dataStores'
260
261     lock-reason:
262       type: object
263       properties:
264         reason:
265           type: string
266           example: LOCKED_OTHER
267         details:
268           type: string
269           example: locked due to module sync
270
271     dataStores:
272       type: object
273       properties:
274         operational:
275           $ref: '#/components/schemas/sync-state'
276         running:
277           $ref: '#/components/schemas/sync-state'
278
279     sync-state:
280       type: object
281       properties:
282         state:
283           type: string
284           example: NONE_REQUESTED
285         lastSyncTime:
286           type: string
287           example: 2022-12-31T20:30:40.000+0000
288
289     RestOutputCmHandlePublicProperties:
290       type: object
291       properties:
292         publicCmHandleProperties:
293           $ref: '#/components/schemas/CmHandlePublicProperties'
294
295     RestOutputCmHandleCompositeState:
296       type: object
297       properties:
298         state:
299           $ref: '#/components/schemas/CmHandleCompositeState'
300
301   examples:
302     dataSampleRequest:
303         summary: Sample request
304         description: Sample request body
305         value:
306           test:bookstore:
307             bookstore-name: Chapters
308             categories:
309               - code: '01'
310                 name: SciFi
311                 books:
312                 - authors:
313                     - Iain M. Banks
314                     - Ursula K. Le Guin
315               - code: '02'
316                 name: kids
317                 books:
318                 - authors:
319                     - Philip Pullman
320
321     dataSamplePatchRequest:
322       summary: Sample patch request
323       description: Sample patch request body
324       value:
325         ietf-restconf:yang-patch:
326           patch-id: patch-1
327           edit:
328             - edit-id: edit1
329               operation: merge
330               target: /
331               value:
332                 test:bookstore:
333                   bookstore-name: Chapters
334                   categories:
335                     - code: '01'
336                       name: Science
337                       books:
338                         - authors:
339                             - Author1
340                             - Author2
341                     - code: '02'
342                       name: Arts
343                       books:
344                         - authors:
345                             - Author3
346             - edit-id: edit2
347               operation: merge
348               target: /
349               value:
350                 test:bookstore:
351                   bookstore-name: Novels
352                   categories:
353                     - code: '03'
354                       name: History
355                       books:
356                         - authors:
357                             - Iain M. Banks
358                             - Ursula K. Le Guin
359                     - code: '04'
360                       name: Fiction
361                       books:
362                         - authors:
363                             - Philip Pullman
364
365     dataSampleResponse:
366         summary: Sample response
367         description: Sample response for selecting 'sample 1'.
368         value:
369           bookstore:
370             categories:
371               - code: '01'
372                 books:
373                   - authors:
374                       - Iain M. Banks
375                       - Ursula K. Le Guin
376                 name: SciFi
377               - code: '02'
378                 books:
379                   - authors:
380                       - Philip Pullman
381                 name: kids
382
383   parameters:
384     cmHandleInPath:
385       name: cm-handle
386       in: path
387       description: The identifier for a network function, network element, subnetwork or any other cm object by managed Network CM Proxy
388       required: true
389       schema:
390         type: string
391         example: my-cm-handle
392     xpathInQuery:
393       name: xpath
394       in: query
395       description: xpath
396       required: false
397       schema:
398         type: string
399         default: /
400     requiredXpathInQuery:
401       name: xpath
402       in: query
403       description: xpath
404       required: true
405       schema:
406         type: string
407     includeDescendantsOptionInQuery:
408       name: include-descendants
409       in: query
410       description: include-descendants
411       required: false
412       schema:
413         type: boolean
414         default: false
415     cpsPathInQuery:
416       name: cps-path
417       in: query
418       description: cps-path
419       required: false
420       schema:
421         type: string
422         default: /
423     resourceIdentifierInQuery:
424       name: resourceIdentifier
425       in: query
426       description: The format of resource identifier depend on the associated DMI Plugin implementation. For ONAP DMI Plugin it will be RESTConf paths but it can really be anything.
427       required: true
428       allowReserved: true
429       schema:
430         type: string
431       examples:
432         sample 1:
433           value:
434             resourceIdentifier: \shops\bookstore
435         sample 2:
436           value:
437             resourceIdentifier: \shops\bookstore\categories[@code=1]
438         sample 3:
439           value:
440             resourceIdentifier: parent=shops,child=bookstore
441     optionsParamInQuery:
442       name: options
443       in: query
444       description: options parameter in query, it is mandatory to wrap key(s)=value(s) in parenthesis'()'. The format of options parameter depend on the associated DMI Plugin implementation.
445       required: false
446       schema:
447         type: string
448       allowReserved: true
449       examples:
450         sample 1:
451           value:
452             options: (depth=3)
453         sample 2:
454           value:
455             options: (fields=book)
456         sample 3:
457           value:
458             options: (depth=2,fields=book/authors)
459     topicParamInQuery:
460       name: topic
461       in: query
462       description: topic parameter in query.
463       required: false
464       schema:
465         type: string
466       allowReserved: true
467       examples:
468         sample 1:
469           value:
470             topic: my-topic-name
471     contentParamInHeader:
472       name: Content-Type
473       in: header
474       required: false
475       description: Content parameter for request, if content parameter is null, default value is application/json.
476       schema:
477         type: string
478         default: application/json
479         example: application/yang-data+json
480
481   responses:
482     NotFound:
483       description: The specified resource was not found
484       content:
485         application/json:
486           schema:
487             $ref: '#/components/schemas/ErrorMessage'
488           example:
489             status: 400
490             message: Not found error message
491             details: Not found error details
492     Unauthorized:
493       description: Unauthorized
494       content:
495         application/json:
496           schema:
497             $ref: '#/components/schemas/ErrorMessage'
498           example:
499             status: 401
500             message: Unauthorized error message
501             details: Unauthorized error details
502     Forbidden:
503       description: Forbidden
504       content:
505         application/json:
506           schema:
507             $ref: '#/components/schemas/ErrorMessage'
508           example:
509            status: 403
510            message: Forbidden error message
511            details: Forbidden error details
512     BadRequest:
513       description: Bad Request
514       content:
515         application/json:
516           schema:
517             $ref: '#/components/schemas/ErrorMessage'
518           example:
519            status: 400 BAD_REQUEST
520            message: Bad request error message
521            details: Bad request error details
522     Conflict:
523       description: Conflict
524       content:
525         application/json:
526           schema:
527             $ref: '#/components/schemas/ErrorMessage'
528           example:
529            status: 409 CONFLICT
530            message: Conflict error message
531            details: Conflict error details
532     NotImplemented:
533       description: The given path has not been implemented
534       content:
535         application/json:
536           schema:
537             $ref: '#/components/schemas/ErrorMessage'
538           example:
539            status: 501
540            message: Not implemented error message
541            details: Not implemented error details
542     Ok:
543       description: OK
544       content:
545         application/json:
546           schema:
547             type: object
548     Created:
549       description: Created
550       content: {}
551     NoContent:
552       description: No Content
553       content: {}
554     InternalServerError:
555       description: Internal Server Error
556       content:
557         application/json:
558           schema:
559             $ref: "#/components/schemas/ErrorMessage"
560           example:
561             status: 500
562             message: Internal Server Error
563             details: Internal Server Error occurred
564     BadGateway:
565       description: Bad Gateway
566       content:
567         application/json:
568           schema:
569             $ref: "#/components/schemas/DmiErrorMessage"
570           example:
571             message: "Bad Gateway Error Message NCMP"
572             dmi-response:
573               http-code: 400
574               body: "Bad Request"