Query CmHandles using CPS path
[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
189     ConditionProperties:
190       properties:
191         conditionName:
192           type: string
193         conditionParameters:
194           type: array
195           items:
196             type: object
197             additionalProperties:
198               type: string
199     OldConditionProperties:
200       deprecated: true
201       properties:
202         name:
203           type: string
204         conditionParameters:
205           type: array
206           items:
207             type: object
208             $ref: '#/components/schemas/ModuleNameAsJsonObject'
209     ModuleNameAsJsonObject:
210       properties:
211         moduleName:
212           type: string
213           example: my-module
214
215     RestOutputCmHandle:
216       type: object
217       title: CM handle Details
218       properties:
219         cmHandle:
220           type: string
221           example: my-cm-handle1
222         publicCmHandleProperties:
223           $ref: '#/components/schemas/CmHandlePublicProperties'
224         state:
225           $ref: '#/components/schemas/CmHandleCompositeState'
226     CmHandlePublicProperties:
227       type: array
228       items:
229         type: object
230         additionalProperties:
231           type: string
232           example: Book Type
233     CmHandleCompositeState:
234       type: object
235       properties:
236         cmHandleState:
237           type: string
238           example: ADVISED
239         lockReason:
240           $ref: '#/components/schemas/lock-reason'
241         lastUpdateTime:
242           type: string
243           example: 2022-12-31T20:30:40.000+0000
244         dataSyncEnabled:
245           type: boolean
246           example: false
247         dataSyncState:
248           $ref: '#/components/schemas/dataStores'
249
250     lock-reason:
251       type: object
252       properties:
253         reason:
254           type: string
255           example: LOCKED_MISBEHAVING
256         details:
257           type: string
258           example: locked due to failure in module sync
259
260     dataStores:
261       type: object
262       properties:
263         operational:
264           $ref: '#/components/schemas/sync-state'
265         running:
266           $ref: '#/components/schemas/sync-state'
267
268     sync-state:
269       type: object
270       properties:
271         syncState:
272           type: string
273           example: NONE_REQUESTED
274         lastSyncTime:
275           type: string
276           example: 2022-12-31T20:30:40.000+0000
277
278     RestOutputCmHandlePublicProperties:
279       type: object
280       properties:
281         publicCmHandleProperties:
282           $ref: '#/components/schemas/CmHandlePublicProperties'
283
284     RestOutputCmHandleCompositeState:
285       type: object
286       properties:
287         state:
288           $ref: '#/components/schemas/CmHandleCompositeState'
289
290   examples:
291     dataSampleRequest:
292         summary: Sample request
293         description: Sample request body
294         value:
295           test:bookstore:
296             bookstore-name: Chapters
297             categories:
298               - code: '01'
299                 name: SciFi
300                 books:
301                 - authors:
302                     - Iain M. Banks
303                     - Ursula K. Le Guin
304               - code: '02'
305                 name: kids
306                 books:
307                 - authors:
308                     - Philip Pullman
309
310     dataSamplePatchRequest:
311       summary: Sample patch request
312       description: Sample patch request body
313       value:
314         ietf-restconf:yang-patch:
315           patch-id: patch-1
316           edit:
317             - edit-id: edit1
318               operation: merge
319               target: /
320               value:
321                 test:bookstore:
322                   bookstore-name: Chapters
323                   categories:
324                     - code: '01'
325                       name: Science
326                       books:
327                         - authors:
328                             - Author1
329                             - Author2
330                     - code: '02'
331                       name: Arts
332                       books:
333                         - authors:
334                             - Author3
335             - edit-id: edit2
336               operation: merge
337               target: /
338               value:
339                 test:bookstore:
340                   bookstore-name: Novels
341                   categories:
342                     - code: '03'
343                       name: History
344                       books:
345                         - authors:
346                             - Iain M. Banks
347                             - Ursula K. Le Guin
348                     - code: '04'
349                       name: Fiction
350                       books:
351                         - authors:
352                             - Philip Pullman
353
354     dataSampleResponse:
355         summary: Sample response
356         description: Sample response for selecting 'sample 1'.
357         value:
358           bookstore:
359             categories:
360               - code: '01'
361                 books:
362                   - authors:
363                       - Iain M. Banks
364                       - Ursula K. Le Guin
365                 name: SciFi
366               - code: '02'
367                 books:
368                   - authors:
369                       - Philip Pullman
370                 name: kids
371
372     allCmHandleQueryParameters:
373       value:
374         cmHandleQueryParameters:
375           - conditionName: hasAllModules
376             conditionParameters:
377               - { "moduleName": "my-module-1" }
378               - { "moduleName": "my-module-2" }
379               - { "moduleName": "my-module-3" }
380           - conditionName: hasAllProperties
381             conditionParameters:
382               - { "Color": "yellow" }
383               - { "Shape": "circle" }
384               - { "Size": "small" }
385           - conditionName: cmHandleWithCpsPath
386             conditionParameters:
387               - { "cpsPath": "//state[@cm-handle-state='ADVISED']" }
388     pubPropCmHandleQueryParameters:
389       value:
390         cmHandleQueryParameters:
391           - conditionName: hasAllProperties
392             conditionParameters:
393               - { "Color": "yellow" }
394               - { "Shape": "circle" }
395               - { "Size": "small" }
396     modulesCmHandleQueryParameters:
397       value:
398         cmHandleQueryParameters:
399           - conditionName: hasAllModules
400             conditionParameters:
401               - { "moduleName": "my-module-1" }
402               - { "moduleName": "my-module-2" }
403               - { "moduleName": "my-module-3" }
404     cpsPathCmHandleStateQueryParameters:
405       value:
406         cmHandleQueryParameters:
407           - conditionName: cmHandleWithCpsPath
408             conditionParameters:
409               - { "cpsPath": "//state[@cm-handle-state='LOCKED']" }
410     cpsPathCmHandleDataSyncQueryParameters:
411       value:
412         cmHandleQueryParameters:
413           - conditionName: cmHandleWithCpsPath
414             conditionParameters:
415               - { "cpsPath": "//state[@data-sync-enabled='true']" }
416
417   parameters:
418     cmHandleInPath:
419       name: cm-handle
420       in: path
421       description: The identifier for a network function, network element, subnetwork or any other cm object by managed Network CM Proxy
422       required: true
423       schema:
424         type: string
425         example: my-cm-handle
426     xpathInQuery:
427       name: xpath
428       in: query
429       description: xpath
430       required: false
431       schema:
432         type: string
433         default: /
434     requiredXpathInQuery:
435       name: xpath
436       in: query
437       description: xpath
438       required: true
439       schema:
440         type: string
441     includeDescendantsOptionInQuery:
442       name: include-descendants
443       in: query
444       description: include-descendants
445       required: false
446       schema:
447         type: boolean
448         default: false
449     cpsPathInQuery:
450       name: cps-path
451       in: query
452       description: cps-path
453       required: false
454       schema:
455         type: string
456         default: /
457     resourceIdentifierInQuery:
458       name: resourceIdentifier
459       in: query
460       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.
461       required: true
462       allowReserved: true
463       schema:
464         type: string
465       examples:
466         sample 1:
467           value:
468             resourceIdentifier: \shops\bookstore
469         sample 2:
470           value:
471             resourceIdentifier: \shops\bookstore\categories[@code=1]
472         sample 3:
473           value:
474             resourceIdentifier: parent=shops,child=bookstore
475     optionsParamInQuery:
476       name: options
477       in: query
478       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.
479       required: false
480       schema:
481         type: string
482       allowReserved: true
483       examples:
484         sample 1:
485           value:
486             options: (depth=3)
487         sample 2:
488           value:
489             options: (fields=book)
490         sample 3:
491           value:
492             options: (depth=2,fields=book/authors)
493     topicParamInQuery:
494       name: topic
495       in: query
496       description: topic parameter in query.
497       required: false
498       schema:
499         type: string
500       allowReserved: true
501       examples:
502         sample 1:
503           value:
504             topic: my-topic-name
505     contentParamInHeader:
506       name: Content-Type
507       in: header
508       required: false
509       description: Content parameter for request, if content parameter is null, default value is application/json.
510       schema:
511         type: string
512         default: application/json
513         example: application/yang-data+json
514
515   responses:
516     NotFound:
517       description: The specified resource was not found
518       content:
519         application/json:
520           schema:
521             $ref: '#/components/schemas/ErrorMessage'
522           example:
523             status: 400
524             message: Not found error message
525             details: Not found error details
526     Unauthorized:
527       description: Unauthorized
528       content:
529         application/json:
530           schema:
531             $ref: '#/components/schemas/ErrorMessage'
532           example:
533             status: 401
534             message: Unauthorized error message
535             details: Unauthorized error details
536     Forbidden:
537       description: Forbidden
538       content:
539         application/json:
540           schema:
541             $ref: '#/components/schemas/ErrorMessage'
542           example:
543            status: 403
544            message: Forbidden error message
545            details: Forbidden error details
546     BadRequest:
547       description: Bad Request
548       content:
549         application/json:
550           schema:
551             $ref: '#/components/schemas/ErrorMessage'
552           example:
553            status: 400 BAD_REQUEST
554            message: Bad request error message
555            details: Bad request error details
556     Conflict:
557       description: Conflict
558       content:
559         application/json:
560           schema:
561             $ref: '#/components/schemas/ErrorMessage'
562           example:
563            status: 409 CONFLICT
564            message: Conflict error message
565            details: Conflict error details
566     NotImplemented:
567       description: The given path has not been implemented
568       content:
569         application/json:
570           schema:
571             $ref: '#/components/schemas/ErrorMessage'
572           example:
573            status: 501
574            message: Not implemented error message
575            details: Not implemented error details
576     Ok:
577       description: OK
578       content:
579         application/json:
580           schema:
581             type: object
582     Created:
583       description: Created
584       content: {}
585     NoContent:
586       description: No Content
587       content: {}
588     InternalServerError:
589       description: Internal Server Error
590       content:
591         application/json:
592           schema:
593             $ref: "#/components/schemas/ErrorMessage"
594           example:
595             status: 500
596             message: Internal Server Error
597             details: Internal Server Error occurred
598     BadGateway:
599       description: Bad Gateway
600       content:
601         application/json:
602           schema:
603             $ref: "#/components/schemas/DmiErrorMessage"
604           example:
605             message: "Bad Gateway Error Message NCMP"
606             dmi-response:
607               http-code: 400
608               body: "Bad Request"