@itentialopensource/adapter-paragon_dcs 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/.eslintignore +6 -0
  2. package/.eslintrc.js +18 -0
  3. package/.gitlab/.gitkeep +0 -0
  4. package/.gitlab/issue_templates/.gitkeep +0 -0
  5. package/.gitlab/issue_templates/Default.md +17 -0
  6. package/.gitlab/issue_templates/bugReportTemplate.md +76 -0
  7. package/.gitlab/issue_templates/featureRequestTemplate.md +14 -0
  8. package/.jshintrc +0 -0
  9. package/AUTH.md +39 -0
  10. package/BROKER.md +199 -0
  11. package/CALLS.md +204 -0
  12. package/CHANGELOG.md +9 -0
  13. package/CODE_OF_CONDUCT.md +43 -0
  14. package/CONTRIBUTING.md +172 -0
  15. package/ENHANCE.md +69 -0
  16. package/LICENSE +201 -0
  17. package/PROPERTIES.md +641 -0
  18. package/README.md +337 -0
  19. package/SUMMARY.md +9 -0
  20. package/SYSTEMINFO.md +11 -0
  21. package/TROUBLESHOOT.md +47 -0
  22. package/adapter.js +1255 -0
  23. package/adapterBase.js +1787 -0
  24. package/entities/.generic/action.json +214 -0
  25. package/entities/.generic/schema.json +28 -0
  26. package/entities/.system/action.json +50 -0
  27. package/entities/.system/mockdatafiles/getToken-default.json +3 -0
  28. package/entities/.system/mockdatafiles/healthcheck-default.json +3 -0
  29. package/entities/.system/schema.json +19 -0
  30. package/entities/.system/schemaTokenReq.json +53 -0
  31. package/entities/.system/schemaTokenResp.json +53 -0
  32. package/entities/ConnectivityService/action.json +104 -0
  33. package/entities/ConnectivityService/schema.json +23 -0
  34. package/error.json +190 -0
  35. package/package.json +88 -0
  36. package/pronghorn.json +1402 -0
  37. package/propertiesDecorators.json +14 -0
  38. package/propertiesSchema.json +1248 -0
  39. package/refs?service=git-upload-pack +0 -0
  40. package/report/adapterInfo.json +10 -0
  41. package/report/creationReport.json +235 -0
  42. package/report/paragon-dcs.json +947 -0
  43. package/sampleProperties.json +195 -0
  44. package/test/integration/adapterTestBasicGet.js +83 -0
  45. package/test/integration/adapterTestConnectivity.js +93 -0
  46. package/test/integration/adapterTestIntegration.js +627 -0
  47. package/test/unit/adapterBaseTestUnit.js +949 -0
  48. package/test/unit/adapterTestUnit.js +1456 -0
  49. package/utils/adapterInfo.js +206 -0
  50. package/utils/addAuth.js +94 -0
  51. package/utils/artifactize.js +146 -0
  52. package/utils/basicGet.js +50 -0
  53. package/utils/checkMigrate.js +63 -0
  54. package/utils/entitiesToDB.js +178 -0
  55. package/utils/findPath.js +74 -0
  56. package/utils/methodDocumentor.js +225 -0
  57. package/utils/modify.js +154 -0
  58. package/utils/packModificationScript.js +35 -0
  59. package/utils/patches2bundledDeps.js +90 -0
  60. package/utils/pre-commit.sh +32 -0
  61. package/utils/removeHooks.js +20 -0
  62. package/utils/setup.js +33 -0
  63. package/utils/tbScript.js +246 -0
  64. package/utils/tbUtils.js +490 -0
  65. package/utils/testRunner.js +298 -0
  66. package/utils/troubleshootingAdapter.js +195 -0
  67. package/workflows/README.md +3 -0
@@ -0,0 +1,947 @@
1
+ {
2
+ "openapi": "3.0.0",
3
+ "info": {
4
+ "title": "naas/ems/dcs/proto/v1/dcs.proto",
5
+ "description": "\n\n# Copyright\n\nJuniper Networks, Inc. \n1133 Innovation Way Sunnyvale, California 94089 USA \n408-745-2000 \nwww.juniper.net\n\nCopyright © 2021, Juniper Networks, Inc. All rights reserved.\n\nJuniper Networks, the Juniper Networks logo, Juniper, and Junos are registered trademarks of Juniper Networks, Inc. and/or its affiliates in the United States and other countries. All other trademarks may be property of their respective owners.\nJuniper Networks assumes no responsibility for any inaccuracies in this document. Juniper Networks reserves the right to change, modify, transfer, or otherwise revise this publication without notice.\n\n\nThe information in this document is current as of the date on the title page.\n\nYEAR 2000 NOTICE\n\nJuniper Networks hardware and software products are Year 2000 compliant. Junos OS has no known time-related limitations through the year 2038. However, the NTP application is known to have some difficulty in the year 2036.\n\nEND USER LICENSE AGREEMENT\n\nThe Juniper Networks product that is the subject of this technical documentation consists of (or is intended for use with) Juniper Networks software. Use of such software is subject to the terms and conditions of the End User License Agreement (“EULA”) posted at http://www.juniper.net/support/eula.html. By downloading, installing or using such software, you agree to the terms and conditions of that EULA.\n\n\n",
6
+ "x-logo": {
7
+ "url": "data:image/png;base64,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LjpkpSRZXmaaLZyd41jclXnUvUPR+SxhGJ33Tb0WAREQAREQAREQAc8EOPGnOLh9p9NJLjL4gDSA0fWY7qKJEAXBiI7Bx9Lf0UHgNsZDB0QhLcP0aOjAYoIzDrCokUArLi6D44FCcTjrZHRcqXo5mICE4WAi+lsEREAEREAEREAEREAEREAEJhmB0DvTTzKAulwREAEREAEREAEREAEREAERiHYCEobRfgfVfxEQAREQAREQAREQAREQARHwSEDC0CNA7S4CIiACIiACIiACIiACIiAC0U5AwjDa76D6LwIiIAIiIAIiIAIiIAIiIAIeCUgYegSo3UVABERABERABERABERABEQg2glIGEb7HVT/RUAEREAEREAEREAEREAERMAjAQlDjwC1uwiIgAiIgAiIgAiIgAiIgAhEOwEJw2i/g+q/CIiACIiACIiACIiACIiACHgkIGHoEaB2FwEREAEREAEREAEREAEREIFoJyBhGO13UP0XAREQAREQAREQAREQAREQAY8EJAw9AtTuIiACIiACIiACIiACIiACIhDtBCQMo/0Oqv8iIAIiIAIiIAIiIAIiIAIi4JGAhKFHgNpdBERABERABERABERABERABKKdgIRhtN9B9V8EREAEREAEREAEREAEREAEPBKQMPQIULuLgAiIgAiIgAiIgAiIgAiIQLQTkDCM9juo/ouACIiACIiACIiACIiACIiARwIShh4BancREAEREAEREAEREAEREAERiHYCEobRfgfVfxEQAREQAREQAREQAREQARHwSEDC0CNA7S4CIiACIiACIiACIiACIiAC0U5AwjDa76D6LwIiIAIiIAIiIAIiIAIiIAIeCUgYegSo3UVABERABERABERABERABEQg2glIGEb7HVT/RUAEREAEREAEREAEREAERMAjAQlDjwC1uwiIgAiIgAiIgAiIgAiIgAhEOwEJw2i/g+q/CIiACIiACIiACIiACIiACHgkIGHoEaB2FwEREAEREAEREAEREAEREIFoJyBhGO13UP0XAREQAREQAREQAREQAREQAY8EJAw9AtTuIiACIiACIiACIiACIiACIhDtBCQMo/0Oqv8iIAIiIAIiIAIiIAIiIAIi4JGAhKFHgNpdBERABERABERABERABERABKKdgIRhtN9B9V8EREAEREAEREAEREAEREAEPBKQMPQIULuLgAiIgAiIgAiIgAiIgAiIQLQTkDCM9juo/ouACIiACIiACIiACIiACIiARwIShh4BancREAEREAEREAEREAEREAERiHYCEobRfgfVfxEQAREQAREQAREQAREQARHwSEDC0CNA7S4CIiACIiACIiACIiACIiAC0U5AwjDa76D6LwIiIAIiIAIiIAIiIAIiIAIeCUgYegSo3UVABERABERABERABERABEQg2glIGEb7HVT/RUAEREAEREAEREAEREAERMAjAQlDjwC1uwiIgAiIgAiIgAiIgAiIgAhEOwEJw2i/g+q/CIiACIiACIiACIiACIiACHgkIGHoEaB2FwEREAEREAEREAEREAEREIFoJyBhGO13UP0XAREQAREQAREQAREQAREQAY8EJAw9AtTuIiACIiACIiACIiACIiACIhDtBCQMo/0Oqv8iIAIiIAIiIAIiIAIiIAIi4JGAhKFHgNpdBERABERABERABERABERABKKdgIRhtN9B9V8EREAEREAEREAEREAEREAEPBKQMPQIULuLgAiIgAiIgAiIgAiIgAiIQLQTkDCM9juo/ouACIiACIiACIiACIiACIiARwIShh4BancREAEREAEREAEREAEREAERiHYCEobRfgfVfxEQAREQAREQAREQAREQARHwSEDC0CNA7S4CIiACIiACIiACIiACIiAC0U5AwjDa76D6LwIiIAIiIAIiIAIiIAIiIAIeCUgYegSo3UVABERABERABERABERABEQg2glIGEb7HVT/RUAEREAEREAEREAEREAERMAjAQlDjwC1uwiIgAiIgAiIgAiIgAiIgAhEOwEJw2i/g+q/CIiACIiACIiACIiACIiACHgkIGHoEaB2FwEREAEREAEREAEREAEREIFoJyBhGO13UP0XAREQAREQAREQAREQAREQAY8EJAw9AtTuIiACIiACIiACIiACIiACIhDtBCQMo/0Oqv8iIAIiIAIiIAIiIAIiIAIi4JGAhKFHgNpdBERABERABERABERABERABKKdwP8HruDiCulJkm0AAAAASUVORK5CYII="
8
+ },
9
+ "version": ""
10
+ },
11
+ "paths": {
12
+ "/dcs/v1/disconnect-device": {
13
+ "post": {
14
+ "responses": {
15
+ "200": {
16
+ "description": "A successful response.",
17
+ "content": {
18
+ "application/json": {
19
+ "schema": {
20
+ "$ref": "#/components/schemas/typesDisconnectDeviceResponse"
21
+ }
22
+ }
23
+ }
24
+ },
25
+ "default": {
26
+ "description": "An unexpected error response",
27
+ "content": {
28
+ "application/json": {
29
+ "schema": {
30
+ "$ref": "#/components/schemas/gatewayruntimeError"
31
+ }
32
+ }
33
+ }
34
+ }
35
+ },
36
+ "requestBody": {
37
+ "content": {
38
+ "application/json": {
39
+ "schema": {
40
+ "$ref": "#/components/schemas/v1DisconnectDeviceRequest"
41
+ }
42
+ }
43
+ },
44
+ "required": true
45
+ },
46
+ "tags": [
47
+ "ConnectivityService"
48
+ ],
49
+ "description": "RPC used to terminate device connection.",
50
+ "summary": "DisconnectDevice",
51
+ "operationId": "ConnectivityService_DisconnectDevice"
52
+ }
53
+ },
54
+ "/dcs/v1/execute-op": {
55
+ "post": {
56
+ "responses": {
57
+ "200": {
58
+ "description": "A successful response.",
59
+ "content": {
60
+ "application/json": {
61
+ "schema": {
62
+ "$ref": "#/components/schemas/typesOpResponse"
63
+ }
64
+ }
65
+ }
66
+ },
67
+ "default": {
68
+ "description": "An unexpected error response",
69
+ "content": {
70
+ "application/json": {
71
+ "schema": {
72
+ "$ref": "#/components/schemas/gatewayruntimeError"
73
+ }
74
+ }
75
+ }
76
+ }
77
+ },
78
+ "requestBody": {
79
+ "content": {
80
+ "application/json": {
81
+ "schema": {
82
+ "$ref": "#/components/schemas/v1OpRequest"
83
+ }
84
+ }
85
+ },
86
+ "required": true
87
+ },
88
+ "tags": [
89
+ "ConnectivityService"
90
+ ],
91
+ "description": "RPC used to perform operations on device like reboot device or request\nfile put. Takes input as list of commands and returns the result",
92
+ "summary": "Op",
93
+ "operationId": "ConnectivityService_Op"
94
+ }
95
+ },
96
+ "/dcs/v1/connect-device": {
97
+ "post": {
98
+ "responses": {
99
+ "200": {
100
+ "description": "A successful response.",
101
+ "content": {
102
+ "application/json": {
103
+ "schema": {
104
+ "$ref": "#/components/schemas/typesConnectDeviceResponse"
105
+ }
106
+ }
107
+ }
108
+ },
109
+ "default": {
110
+ "description": "An unexpected error response",
111
+ "content": {
112
+ "application/json": {
113
+ "schema": {
114
+ "$ref": "#/components/schemas/gatewayruntimeError"
115
+ }
116
+ }
117
+ }
118
+ }
119
+ },
120
+ "requestBody": {
121
+ "content": {
122
+ "application/json": {
123
+ "schema": {
124
+ "$ref": "#/components/schemas/v1ConnectDeviceRequest"
125
+ }
126
+ }
127
+ },
128
+ "required": true
129
+ },
130
+ "tags": [
131
+ "ConnectivityService"
132
+ ],
133
+ "description": "RPC for initiating device connection. The device must be reachable.",
134
+ "summary": "ConnectDevice",
135
+ "operationId": "ConnectivityService_ConnectDevice"
136
+ }
137
+ },
138
+ "/dcs/v1/execute-get": {
139
+ "post": {
140
+ "responses": {
141
+ "200": {
142
+ "description": "A successful response.",
143
+ "content": {
144
+ "application/json": {
145
+ "schema": {
146
+ "$ref": "#/components/schemas/typesGetResponse"
147
+ }
148
+ }
149
+ }
150
+ },
151
+ "default": {
152
+ "description": "An unexpected error response",
153
+ "content": {
154
+ "application/json": {
155
+ "schema": {
156
+ "$ref": "#/components/schemas/gatewayruntimeError"
157
+ }
158
+ }
159
+ }
160
+ }
161
+ },
162
+ "requestBody": {
163
+ "content": {
164
+ "application/json": {
165
+ "schema": {
166
+ "$ref": "#/components/schemas/dcsv1GetRequest"
167
+ }
168
+ }
169
+ },
170
+ "required": true
171
+ },
172
+ "tags": [
173
+ "ConnectivityService"
174
+ ],
175
+ "description": "RPC used to retrieve snapshot of the data from device. Takes input\nas list of command that needs to be executed sequentially.",
176
+ "summary": "Get",
177
+ "operationId": "ConnectivityService_Get"
178
+ }
179
+ },
180
+ "/dcs/v1/execute-set": {
181
+ "post": {
182
+ "responses": {
183
+ "200": {
184
+ "description": "A successful response.",
185
+ "content": {
186
+ "application/json": {
187
+ "schema": {
188
+ "$ref": "#/components/schemas/typesSetResponse"
189
+ }
190
+ }
191
+ }
192
+ },
193
+ "default": {
194
+ "description": "An unexpected error response",
195
+ "content": {
196
+ "application/json": {
197
+ "schema": {
198
+ "$ref": "#/components/schemas/gatewayruntimeError"
199
+ }
200
+ }
201
+ }
202
+ }
203
+ },
204
+ "requestBody": {
205
+ "content": {
206
+ "application/json": {
207
+ "schema": {
208
+ "$ref": "#/components/schemas/dcsv1SetRequest"
209
+ }
210
+ }
211
+ },
212
+ "required": true
213
+ },
214
+ "tags": [
215
+ "ConnectivityService"
216
+ ],
217
+ "description": "RPC used to modify the configuration on the device. Takes input\nas set of configuration commands along with to commit or validate\nor confirmed commit the commands.",
218
+ "summary": "Set",
219
+ "operationId": "ConnectivityService_Set"
220
+ }
221
+ }
222
+ },
223
+ "components": {
224
+ "schemas": {
225
+ "typesDeviceConnectionStatus": {
226
+ "type": "object",
227
+ "properties": {
228
+ "timeStamp": {
229
+ "title": "timestamp of device connection up/down",
230
+ "type": "string",
231
+ "format": "int64"
232
+ },
233
+ "endPoint": {
234
+ "type": "string",
235
+ "title": "endpoint of dcs"
236
+ },
237
+ "deviceId": {
238
+ "type": "string",
239
+ "title": "device id"
240
+ },
241
+ "connectionStatus": {
242
+ "$ref": "#/components/schemas/typesConnectionStatus"
243
+ }
244
+ },
245
+ "description": "DeviceConnectionStatus contains connection id and device status."
246
+ },
247
+ "typesErrorCode": {
248
+ "default": "NoError",
249
+ "enum": [
250
+ "NoError",
251
+ "ConnectionError",
252
+ "SetCommandFailed",
253
+ "RequestTimedOut",
254
+ "CommitFailed",
255
+ "ConfigLockFailed",
256
+ "EphemeralOpenFailed",
257
+ "EphemeralCloseFailed"
258
+ ],
259
+ "type": "string",
260
+ "description": "- NoError: returns default no error to the caller\n - ConnectionError: ConnectionError if there is connection lost to device\n - SetCommandFailed: SetCommandFailed returned when the first from list of edit command fails\n - RequestTimedOut: RequestTimedOut returned execution of get, set or op rpc times out\n - CommitFailed: CommitFailed returned when configuration to device fail\n - ConfigLockFailed: ConfigLockFailed returned when lock to device fail\n - EphemeralOpenFailed: EphemeralOpenFailed returns when opening ephemeral database fails.\n - EphemeralCloseFailed: EphemeralCloseFailed return when closing ephemeral database fails.",
261
+ "title": "ErrorCode represents type of the error got while executing command.\nErrorCode possible values"
262
+ },
263
+ "gatewayruntimeError": {
264
+ "type": "object",
265
+ "properties": {
266
+ "message": {
267
+ "type": "string"
268
+ },
269
+ "code": {
270
+ "type": "integer",
271
+ "format": "int32"
272
+ },
273
+ "details": {
274
+ "items": {
275
+ "$ref": "#/components/schemas/protobufAny"
276
+ },
277
+ "type": "array"
278
+ },
279
+ "error": {
280
+ "type": "string"
281
+ }
282
+ }
283
+ },
284
+ "typesUserInputCommand": {
285
+ "type": "object",
286
+ "properties": {
287
+ "regexp": {
288
+ "type": "string",
289
+ "title": "regular expressions matches the output of device commands"
290
+ },
291
+ "command": {
292
+ "type": "string",
293
+ "title": "commands includes list of actual command and user input"
294
+ }
295
+ }
296
+ },
297
+ "v1GetDeviceConnectionDetailsResponse": {
298
+ "type": "object",
299
+ "properties": {
300
+ "connection_data": {
301
+ "$ref": "#/components/schemas/typesConnData"
302
+ }
303
+ }
304
+ },
305
+ "typesChassisType": {
306
+ "default": "STANDALONE",
307
+ "enum": [
308
+ "STANDALONE",
309
+ "VIRTUAL_CHASSIS",
310
+ "CHASSIS_CLUSTER"
311
+ ],
312
+ "type": "string"
313
+ },
314
+ "v1OpRequest": {
315
+ "type": "object",
316
+ "properties": {
317
+ "telemetry": {
318
+ "type": "boolean",
319
+ "description": "To know whether the request is from application or from HB for metric collection.\nbased on this parameter netconf session is reused. This parameter is applicable only for netconf.\nAlso dedicated netconf sessions of device will be used apart from application requests.",
320
+ "format": "boolean"
321
+ },
322
+ "device_info": {
323
+ "$ref": "#/components/schemas/typesDeviceInfo"
324
+ },
325
+ "command": {
326
+ "items": {
327
+ "type": "string"
328
+ },
329
+ "type": "array",
330
+ "title": "Holds the list of commands that needs to be executed"
331
+ },
332
+ "timeout": {
333
+ "title": "User specified request timeout",
334
+ "type": "integer",
335
+ "format": "int32"
336
+ },
337
+ "user_input_cmd": {
338
+ "items": {
339
+ "$ref": "#/components/schemas/typesUserInputCommand"
340
+ },
341
+ "type": "array",
342
+ "title": "list of cli commands that required user inputs to execute commands\nContains commands and regex. Commands contains actual device commands and user inputs\nRegular expressions to match expected console output for the command\nfor example cisco device reboot: Proceed with reload? [confirm]"
343
+ }
344
+ }
345
+ },
346
+ "typesProtocol": {
347
+ "default": "UNKNOWN_PROTOCOL",
348
+ "enum": [
349
+ "UNKNOWN_PROTOCOL",
350
+ "SSH",
351
+ "HTTP"
352
+ ],
353
+ "type": "string",
354
+ "description": "Protocol to use to communicate with device.\n\n - SSH: SSH Protocol\n - HTTP: HTTP Protocol"
355
+ },
356
+ "typesCommandResult": {
357
+ "type": "object",
358
+ "properties": {
359
+ "command": {
360
+ "type": "string",
361
+ "title": "command got executed on the device"
362
+ },
363
+ "result": {
364
+ "type": "string",
365
+ "title": "return the rpc-reply from netconf level or error message inserted by services"
366
+ }
367
+ },
368
+ "title": "Command Result Pair"
369
+ },
370
+ "typesCommitInfo": {
371
+ "type": "object",
372
+ "properties": {
373
+ "comment": {
374
+ "type": "string",
375
+ "description": "Junos allows user to add comment to each commit.\nThis comment will be pushed to device along with commit command or confirm. It is only used for SET command."
376
+ },
377
+ "synchronize": {
378
+ "type": "boolean",
379
+ "description": "Virtual chassis (VC) having multiple RE to commit configuration in both master and backup.",
380
+ "format": "boolean"
381
+ },
382
+ "auto_confirmed_commit_timeout": {
383
+ "type": "integer",
384
+ "description": "Specify the time in seconds to commit the confirmed configuration, so that DCS will first push configuration\nwith confirm commit timeout greater than this field and then send commit after the\ntime period of auto_confirmed_commit_timeout value.",
385
+ "format": "int32"
386
+ },
387
+ "commit_check": {
388
+ "type": "boolean",
389
+ "description": "Junos allows user to do commit check the configuration to validate. It is only used for SET command.",
390
+ "format": "boolean"
391
+ }
392
+ }
393
+ },
394
+ "typesConnData": {
395
+ "type": "object",
396
+ "properties": {
397
+ "time_stamp": {
398
+ "type": "string",
399
+ "description": "time stamp when the connection is UP.",
400
+ "format": "int64"
401
+ },
402
+ "endpoint": {
403
+ "type": "string",
404
+ "title": "endpoint where connection resides"
405
+ },
406
+ "connection_id": {
407
+ "type": "string",
408
+ "title": "connection id for eg: for juniper device <device_uuid>.JUNOS"
409
+ }
410
+ }
411
+ },
412
+ "typesDeviceInfo": {
413
+ "type": "object",
414
+ "properties": {
415
+ "subSystem": {
416
+ "$ref": "#/components/schemas/typesSubSystem"
417
+ },
418
+ "networkOS": {
419
+ "type": "string",
420
+ "title": "junos, evo, ios etc"
421
+ },
422
+ "vendor": {
423
+ "type": "string",
424
+ "title": "Juniper, Cisco etc"
425
+ },
426
+ "UUID": {
427
+ "type": "string",
428
+ "title": "Device UUID"
429
+ },
430
+ "family": {
431
+ "type": "string",
432
+ "title": "Device Family string"
433
+ },
434
+ "component": {
435
+ "type": "string",
436
+ "title": "default(junos) or node0/node1 in case of chasis cluster"
437
+ },
438
+ "auth": {
439
+ "$ref": "#/components/schemas/typesAuthInfo"
440
+ },
441
+ "routingEngines": {
442
+ "items": {
443
+ "type": "string"
444
+ },
445
+ "type": "array",
446
+ "title": "Routing Engines"
447
+ },
448
+ "lastConfigSyncedTimeStamp": {
449
+ "type": "string",
450
+ "title": "last configured timestamp"
451
+ },
452
+ "members": {
453
+ "items": {
454
+ "$ref": "#/components/schemas/typesMember"
455
+ },
456
+ "type": "array",
457
+ "title": "VC or ChassisCluster members"
458
+ },
459
+ "chassisType": {
460
+ "$ref": "#/components/schemas/typesChassisType"
461
+ },
462
+ "protocol": {
463
+ "$ref": "#/components/schemas/typesProtocol"
464
+ },
465
+ "hardwareModel": {
466
+ "type": "string",
467
+ "title": "HardwareModel e.g. ex2300, ex3400 etc"
468
+ },
469
+ "OSVersion": {
470
+ "type": "string",
471
+ "title": "Component OS Version"
472
+ },
473
+ "Name": {
474
+ "type": "string",
475
+ "title": "Device Name"
476
+ }
477
+ },
478
+ "description": "DeviceInfo is the object in which the device details for command are passed from clients to deviceplugins."
479
+ },
480
+ "v1GetConnectionsType": {
481
+ "default": "ALL",
482
+ "enum": [
483
+ "ALL",
484
+ "PARTICULAR"
485
+ ],
486
+ "type": "string",
487
+ "title": "- ALL: returns list off connections held by all DCS pods\n - PARTICULAR: returns list of connection held by that particular DCS pod"
488
+ },
489
+ "typesManagementInfo": {
490
+ "type": "object",
491
+ "properties": {
492
+ "retry": {
493
+ "type": "integer",
494
+ "description": "Number of time to retry in case connection to device not established.",
495
+ "format": "int32"
496
+ },
497
+ "vendor": {
498
+ "type": "string",
499
+ "title": "vendor input for example: juniper, cisco"
500
+ },
501
+ "device_uuid": {
502
+ "type": "string",
503
+ "title": "Unique Id of the device to retrieve connection from DCS cache"
504
+ },
505
+ "ip": {
506
+ "type": "string"
507
+ },
508
+ "retry_interval": {
509
+ "type": "integer",
510
+ "description": "time interval in seconds to retry.",
511
+ "format": "int32"
512
+ },
513
+ "host_name": {
514
+ "type": "string"
515
+ },
516
+ "auth_info": {
517
+ "$ref": "#/components/schemas/typesAuthInfo"
518
+ },
519
+ "port": {
520
+ "title": "Management port of the component; \nif not given, connection will use the default port for the protocol",
521
+ "type": "integer",
522
+ "format": "int32"
523
+ }
524
+ },
525
+ "description": "ManagementInfo contains the information necessary to dail out device connection."
526
+ },
527
+ "typesStreamGetResponse": {
528
+ "type": "object",
529
+ "properties": {
530
+ "chunk_data": {
531
+ "title": "get device response in chunk",
532
+ "type": "string",
533
+ "format": "byte"
534
+ },
535
+ "error_code": {
536
+ "$ref": "#/components/schemas/typesErrorCode"
537
+ },
538
+ "error": {
539
+ "type": "string",
540
+ "title": "description of failure reason"
541
+ }
542
+ },
543
+ "description": "StreamGetResponse sends data in chunks."
544
+ },
545
+ "typesGetResponse": {
546
+ "type": "object",
547
+ "properties": {
548
+ "error_code": {
549
+ "$ref": "#/components/schemas/typesErrorCode"
550
+ },
551
+ "result": {
552
+ "items": {
553
+ "$ref": "#/components/schemas/typesCommandResult"
554
+ },
555
+ "type": "array",
556
+ "title": "execute commands Result"
557
+ },
558
+ "error": {
559
+ "type": "string",
560
+ "title": "description of failure reason"
561
+ }
562
+ },
563
+ "title": "Get Command Response"
564
+ },
565
+ "v1DisconnectDeviceRequest": {
566
+ "type": "object",
567
+ "properties": {
568
+ "device_uuid": {
569
+ "type": "string",
570
+ "title": "Unique Id of the device to retrieve connection from DCS cache"
571
+ }
572
+ }
573
+ },
574
+ "v1GetDeviceConnectionsResponse": {
575
+ "type": "object",
576
+ "properties": {
577
+ "pod_connections": {
578
+ "items": {
579
+ "$ref": "#/components/schemas/v1PodConnections"
580
+ },
581
+ "type": "array",
582
+ "description": "returns list of device connections held by each DCS pod having UUIDs."
583
+ }
584
+ }
585
+ },
586
+ "typesCloseStreamingCmdResponse": {
587
+ "type": "object",
588
+ "properties": {
589
+ "status": {
590
+ "$ref": "#/components/schemas/typesStatus"
591
+ },
592
+ "error": {
593
+ "type": "string",
594
+ "title": "Give more details if the request to close streaming connection fails"
595
+ }
596
+ },
597
+ "description": "close long running device command eg: closing syslog channel over netconf."
598
+ },
599
+ "v1PodConnections": {
600
+ "type": "object",
601
+ "properties": {
602
+ "connection_data": {
603
+ "items": {
604
+ "$ref": "#/components/schemas/typesConnData"
605
+ },
606
+ "type": "array"
607
+ },
608
+ "pod_ip": {
609
+ "type": "string",
610
+ "title": "DCS point IP"
611
+ }
612
+ }
613
+ },
614
+ "dcsv1GetRequest": {
615
+ "type": "object",
616
+ "properties": {
617
+ "device_info": {
618
+ "$ref": "#/components/schemas/typesDeviceInfo"
619
+ },
620
+ "command": {
621
+ "items": {
622
+ "type": "string"
623
+ },
624
+ "type": "array",
625
+ "title": "Holds the list of commands that needs to be executed"
626
+ },
627
+ "timeout": {
628
+ "title": "User specified request timeout",
629
+ "type": "integer",
630
+ "format": "int32"
631
+ },
632
+ "user_input_cmd": {
633
+ "items": {
634
+ "$ref": "#/components/schemas/typesUserInputCommand"
635
+ },
636
+ "type": "array",
637
+ "title": "list of cli commands that required user inputs to execute commands\nContains commands and regex. Commands contains actual device commands and user inputs\nRegular expressions to match expected console output for the command\nfor example cisco device reboot: Proceed with reload? [confirm]"
638
+ }
639
+ }
640
+ },
641
+ "typesOpenStreamingCmdResponse": {
642
+ "type": "object",
643
+ "properties": {
644
+ "status": {
645
+ "$ref": "#/components/schemas/typesStatus"
646
+ },
647
+ "error": {
648
+ "type": "string",
649
+ "title": "Give more details if the request to open streaming connection fails"
650
+ },
651
+ "error_code": {
652
+ "$ref": "#/components/schemas/typesErrorCode"
653
+ },
654
+ "command_id": {
655
+ "type": "string",
656
+ "title": "Unique id that is used to close the long running command"
657
+ }
658
+ },
659
+ "title": "open long running device command over netconf eg: syslog"
660
+ },
661
+ "typesEphemeralInfo": {
662
+ "type": "object",
663
+ "properties": {
664
+ "ephemeral_open_cmd": {
665
+ "type": "string",
666
+ "description": "Junos devices allow user to open ephemeral database and push the configuration.\ncommand to open ephemeral database."
667
+ },
668
+ "ephemeral_close_cmd": {
669
+ "type": "string",
670
+ "description": "command to close ephemeral database after pushing configuration to device."
671
+ }
672
+ }
673
+ },
674
+ "typesCommandControl": {
675
+ "type": "object",
676
+ "properties": {
677
+ "chunks": {
678
+ "title": "chunks of device config to be pushed to device",
679
+ "type": "string",
680
+ "format": "byte"
681
+ },
682
+ "start": {
683
+ "type": "boolean",
684
+ "description": "start of the command.",
685
+ "format": "boolean"
686
+ },
687
+ "end": {
688
+ "type": "boolean",
689
+ "description": "end of the command.",
690
+ "format": "boolean"
691
+ }
692
+ }
693
+ },
694
+ "dcsv1SetRequest": {
695
+ "type": "object",
696
+ "properties": {
697
+ "commit_info": {
698
+ "$ref": "#/components/schemas/typesCommitInfo"
699
+ },
700
+ "device_info": {
701
+ "$ref": "#/components/schemas/typesDeviceInfo"
702
+ },
703
+ "command": {
704
+ "items": {
705
+ "type": "string"
706
+ },
707
+ "type": "array",
708
+ "title": "Holds the list of commands that needs to be executed"
709
+ },
710
+ "ephemeral_info": {
711
+ "$ref": "#/components/schemas/typesEphemeralInfo"
712
+ },
713
+ "timeout": {
714
+ "title": "User specified request timeout",
715
+ "type": "integer",
716
+ "format": "int32"
717
+ }
718
+ }
719
+ },
720
+ "typesConnectDeviceResponse": {
721
+ "type": "object",
722
+ "properties": {
723
+ "status": {
724
+ "$ref": "#/components/schemas/typesStatus"
725
+ },
726
+ "error": {
727
+ "type": "string",
728
+ "title": "detail message of the connection status"
729
+ }
730
+ },
731
+ "title": "Connect device response"
732
+ },
733
+ "runtimeStreamError": {
734
+ "type": "object",
735
+ "properties": {
736
+ "message": {
737
+ "type": "string"
738
+ },
739
+ "grpcCode": {
740
+ "type": "integer",
741
+ "format": "int32"
742
+ },
743
+ "httpStatus": {
744
+ "type": "string"
745
+ },
746
+ "details": {
747
+ "items": {
748
+ "$ref": "#/components/schemas/protobufAny"
749
+ },
750
+ "type": "array"
751
+ },
752
+ "httpCode": {
753
+ "type": "integer",
754
+ "format": "int32"
755
+ }
756
+ }
757
+ },
758
+ "typesOpResponse": {
759
+ "type": "object",
760
+ "properties": {
761
+ "error_code": {
762
+ "$ref": "#/components/schemas/typesErrorCode"
763
+ },
764
+ "result": {
765
+ "items": {
766
+ "$ref": "#/components/schemas/typesCommandResult"
767
+ },
768
+ "type": "array",
769
+ "title": "execute commands Result"
770
+ },
771
+ "error": {
772
+ "type": "string",
773
+ "title": "description of failure reason"
774
+ }
775
+ },
776
+ "title": "Operational Command Response"
777
+ },
778
+ "protobufAny": {
779
+ "type": "object",
780
+ "properties": {
781
+ "typeUrl": {
782
+ "type": "string",
783
+ "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics."
784
+ },
785
+ "value": {
786
+ "type": "string",
787
+ "description": "Must be a valid serialized protocol buffer of the above specified type.",
788
+ "format": "byte"
789
+ }
790
+ },
791
+ "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := &pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": <string>,\n \"lastName\": <string>\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }"
792
+ },
793
+ "typesConnectionStatus": {
794
+ "default": "UNKNOWN_CONNECTION_STATUS",
795
+ "enum": [
796
+ "UNKNOWN_CONNECTION_STATUS",
797
+ "UP",
798
+ "DOWN"
799
+ ],
800
+ "type": "string",
801
+ "description": "ConnectionStatus use to publish device connection status UP/DOWN.\n\n - UP: device connection status UP\n - DOWN: device connection status down"
802
+ },
803
+ "typesStatus": {
804
+ "default": "UNKNOWN_STATUS",
805
+ "enum": [
806
+ "UNKNOWN_STATUS",
807
+ "SUCCESS",
808
+ "FAILURE"
809
+ ],
810
+ "type": "string",
811
+ "title": "Status of Request"
812
+ },
813
+ "typesStreamSetResponse": {
814
+ "type": "object",
815
+ "properties": {
816
+ "status": {
817
+ "$ref": "#/components/schemas/typesStatus"
818
+ },
819
+ "error_code": {
820
+ "$ref": "#/components/schemas/typesErrorCode"
821
+ },
822
+ "error": {
823
+ "type": "string",
824
+ "title": "description of failure reason"
825
+ }
826
+ },
827
+ "description": "StreamSetResponse contains the result of executing huge configuration on device."
828
+ },
829
+ "typesSubSystem": {
830
+ "default": "UNKNOWN_SUBSYSTEM",
831
+ "enum": [
832
+ "UNKNOWN_SUBSYSTEM",
833
+ "Netconf",
834
+ "Cli"
835
+ ],
836
+ "type": "string",
837
+ "description": "SubSystem to use to communicate with device, applicable for SSH protocol.\n\n - Netconf: Netconf subsystem\n - Cli: Cli subsystem"
838
+ },
839
+ "typesAuthInfo": {
840
+ "type": "object",
841
+ "properties": {
842
+ "password": {
843
+ "type": "string",
844
+ "title": "password to ssh to device"
845
+ },
846
+ "user": {
847
+ "type": "string",
848
+ "description": "user name to ssh to device."
849
+ },
850
+ "ssh_key": {
851
+ "type": "string",
852
+ "description": "ssh public key of the device."
853
+ }
854
+ },
855
+ "description": "AuthInfo username and password to connect to device."
856
+ },
857
+ "v1Callback": {
858
+ "type": "object",
859
+ "properties": {
860
+ "endpoint": {
861
+ "type": "string",
862
+ "title": "endpoint that needs to be invoked to send callback messages"
863
+ },
864
+ "uri": {
865
+ "type": "string",
866
+ "title": "send uri to consume messages from device"
867
+ }
868
+ }
869
+ },
870
+ "typesSetResponse": {
871
+ "type": "object",
872
+ "properties": {
873
+ "status": {
874
+ "$ref": "#/components/schemas/typesStatus"
875
+ },
876
+ "index": {
877
+ "title": "index of the command that failed to execute",
878
+ "type": "integer",
879
+ "format": "int32"
880
+ },
881
+ "error_code": {
882
+ "$ref": "#/components/schemas/typesErrorCode"
883
+ },
884
+ "error": {
885
+ "type": "string",
886
+ "title": "description of failure reason"
887
+ }
888
+ },
889
+ "description": "SetResponse contains the result of executing configuration commands on device."
890
+ },
891
+ "v1ConnectDeviceRequest": {
892
+ "type": "object",
893
+ "properties": {
894
+ "edge_uuid": {
895
+ "type": "string",
896
+ "title": "edge uuid if the connection to device via edge"
897
+ },
898
+ "least_used": {
899
+ "type": "boolean",
900
+ "description": "flag used to identify least used DCS pod.\nIf it sets true which means already least used pod computation is done\nand invoking particular pod instead of dcs service.",
901
+ "format": "boolean"
902
+ },
903
+ "management_info": {
904
+ "$ref": "#/components/schemas/typesManagementInfo"
905
+ }
906
+ }
907
+ },
908
+ "typesMember": {
909
+ "type": "object",
910
+ "properties": {
911
+ "loginConnectionState": {
912
+ "$ref": "#/components/schemas/typesConnectionStatus"
913
+ },
914
+ "serialNumber": {
915
+ "type": "string",
916
+ "title": "serial number of the FPC"
917
+ },
918
+ "role": {
919
+ "type": "string",
920
+ "title": "FPC role"
921
+ },
922
+ "id": {
923
+ "type": "string",
924
+ "title": "FPC Id"
925
+ },
926
+ "Name": {
927
+ "type": "string",
928
+ "title": "name of the component, eg JUNOS/Node[id=0]"
929
+ }
930
+ }
931
+ },
932
+ "typesDisconnectDeviceResponse": {
933
+ "type": "object",
934
+ "properties": {
935
+ "status": {
936
+ "$ref": "#/components/schemas/typesStatus"
937
+ },
938
+ "error": {
939
+ "type": "string",
940
+ "title": "error message of the connection"
941
+ }
942
+ },
943
+ "title": "Disconnect device response"
944
+ }
945
+ }
946
+ }
947
+ }