@xen-orchestra/rest-api 0.14.0 → 0.15.0
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.
- package/dist/helpers/error.helper.mjs +10 -0
- package/dist/hosts/host.controller.mjs +24 -4
- package/dist/hosts/host.service.mjs +6 -7
- package/dist/hosts/host.type.mjs +1 -0
- package/dist/index.mjs +4 -0
- package/dist/middlewares/generic-error-handler.middleware.mjs +5 -1
- package/dist/open-api/common/response.common.mjs +4 -0
- package/dist/open-api/oa-examples/host.oa-example.mjs +30 -0
- package/dist/open-api/oa-examples/pool.oa-example.mjs +30 -0
- package/dist/open-api/oa-examples/task.oa-example.mjs +46 -0
- package/dist/open-api/routes/routes.js +153 -6
- package/dist/pools/pool.controller.mjs +16 -1
- package/dist/pools/pool.service.mjs +18 -8
- package/dist/tasks/task.controller.mjs +121 -0
- package/dist/xoa/xoa.service.mjs +14 -4
- package/open-api/spec/swagger.json +871 -114
- package/package.json +5 -4
- package/tsconfig.json +1 -0
- package/tsoa.json +12 -0
|
@@ -5184,6 +5184,379 @@
|
|
|
5184
5184
|
"type": "object",
|
|
5185
5185
|
"additionalProperties": false
|
|
5186
5186
|
},
|
|
5187
|
+
"Record_string.unknown_": {
|
|
5188
|
+
"properties": {},
|
|
5189
|
+
"type": "object",
|
|
5190
|
+
"description": "Construct a type with a set of properties K of type T"
|
|
5191
|
+
},
|
|
5192
|
+
"Branded_task_": {
|
|
5193
|
+
"allOf": [
|
|
5194
|
+
{
|
|
5195
|
+
"type": "string"
|
|
5196
|
+
},
|
|
5197
|
+
{
|
|
5198
|
+
"properties": {
|
|
5199
|
+
"undefined": {
|
|
5200
|
+
"type": "string",
|
|
5201
|
+
"enum": [
|
|
5202
|
+
"task"
|
|
5203
|
+
],
|
|
5204
|
+
"nullable": false
|
|
5205
|
+
}
|
|
5206
|
+
},
|
|
5207
|
+
"required": [
|
|
5208
|
+
null
|
|
5209
|
+
],
|
|
5210
|
+
"type": "object"
|
|
5211
|
+
}
|
|
5212
|
+
]
|
|
5213
|
+
},
|
|
5214
|
+
"XoTask": {
|
|
5215
|
+
"properties": {
|
|
5216
|
+
"warning": {
|
|
5217
|
+
"items": {
|
|
5218
|
+
"properties": {
|
|
5219
|
+
"message": {
|
|
5220
|
+
"type": "string"
|
|
5221
|
+
},
|
|
5222
|
+
"data": {}
|
|
5223
|
+
},
|
|
5224
|
+
"required": [
|
|
5225
|
+
"message",
|
|
5226
|
+
"data"
|
|
5227
|
+
],
|
|
5228
|
+
"type": "object"
|
|
5229
|
+
},
|
|
5230
|
+
"type": "array"
|
|
5231
|
+
},
|
|
5232
|
+
"updatedAt": {
|
|
5233
|
+
"type": "number",
|
|
5234
|
+
"format": "double"
|
|
5235
|
+
},
|
|
5236
|
+
"tasks": {
|
|
5237
|
+
"items": {
|
|
5238
|
+
"$ref": "#/components/schemas/XoTask"
|
|
5239
|
+
},
|
|
5240
|
+
"type": "array"
|
|
5241
|
+
},
|
|
5242
|
+
"status": {
|
|
5243
|
+
"type": "string",
|
|
5244
|
+
"enum": [
|
|
5245
|
+
"failure",
|
|
5246
|
+
"interrupted",
|
|
5247
|
+
"pending",
|
|
5248
|
+
"success"
|
|
5249
|
+
]
|
|
5250
|
+
},
|
|
5251
|
+
"start": {
|
|
5252
|
+
"type": "number",
|
|
5253
|
+
"format": "double"
|
|
5254
|
+
},
|
|
5255
|
+
"result": {
|
|
5256
|
+
"$ref": "#/components/schemas/Record_string.unknown_"
|
|
5257
|
+
},
|
|
5258
|
+
"properties": {
|
|
5259
|
+
"properties": {
|
|
5260
|
+
"userId": {
|
|
5261
|
+
"type": "string"
|
|
5262
|
+
},
|
|
5263
|
+
"type": {
|
|
5264
|
+
"type": "string"
|
|
5265
|
+
},
|
|
5266
|
+
"params": {
|
|
5267
|
+
"$ref": "#/components/schemas/Record_string.unknown_"
|
|
5268
|
+
},
|
|
5269
|
+
"objectId": {
|
|
5270
|
+
"type": "string"
|
|
5271
|
+
},
|
|
5272
|
+
"name": {
|
|
5273
|
+
"type": "string"
|
|
5274
|
+
},
|
|
5275
|
+
"method": {
|
|
5276
|
+
"type": "string"
|
|
5277
|
+
}
|
|
5278
|
+
},
|
|
5279
|
+
"additionalProperties": {},
|
|
5280
|
+
"type": "object"
|
|
5281
|
+
},
|
|
5282
|
+
"infos": {
|
|
5283
|
+
"items": {
|
|
5284
|
+
"properties": {
|
|
5285
|
+
"message": {
|
|
5286
|
+
"type": "string"
|
|
5287
|
+
},
|
|
5288
|
+
"data": {}
|
|
5289
|
+
},
|
|
5290
|
+
"required": [
|
|
5291
|
+
"message",
|
|
5292
|
+
"data"
|
|
5293
|
+
],
|
|
5294
|
+
"type": "object"
|
|
5295
|
+
},
|
|
5296
|
+
"type": "array"
|
|
5297
|
+
},
|
|
5298
|
+
"id": {
|
|
5299
|
+
"$ref": "#/components/schemas/Branded_task_"
|
|
5300
|
+
},
|
|
5301
|
+
"end": {
|
|
5302
|
+
"type": "number",
|
|
5303
|
+
"format": "double"
|
|
5304
|
+
},
|
|
5305
|
+
"abortionRequestedAt": {
|
|
5306
|
+
"type": "number",
|
|
5307
|
+
"format": "double"
|
|
5308
|
+
}
|
|
5309
|
+
},
|
|
5310
|
+
"required": [
|
|
5311
|
+
"status",
|
|
5312
|
+
"start",
|
|
5313
|
+
"result",
|
|
5314
|
+
"properties",
|
|
5315
|
+
"id"
|
|
5316
|
+
],
|
|
5317
|
+
"type": "object"
|
|
5318
|
+
},
|
|
5319
|
+
"Partial_Unbrand_XoTask__": {
|
|
5320
|
+
"properties": {
|
|
5321
|
+
"abortionRequestedAt": {
|
|
5322
|
+
"type": "number",
|
|
5323
|
+
"format": "double"
|
|
5324
|
+
},
|
|
5325
|
+
"end": {
|
|
5326
|
+
"type": "number",
|
|
5327
|
+
"format": "double"
|
|
5328
|
+
},
|
|
5329
|
+
"id": {
|
|
5330
|
+
"type": "string"
|
|
5331
|
+
},
|
|
5332
|
+
"infos": {
|
|
5333
|
+
"items": {
|
|
5334
|
+
"properties": {
|
|
5335
|
+
"message": {
|
|
5336
|
+
"type": "string"
|
|
5337
|
+
},
|
|
5338
|
+
"data": {}
|
|
5339
|
+
},
|
|
5340
|
+
"required": [
|
|
5341
|
+
"message",
|
|
5342
|
+
"data"
|
|
5343
|
+
],
|
|
5344
|
+
"type": "object"
|
|
5345
|
+
},
|
|
5346
|
+
"type": "array"
|
|
5347
|
+
},
|
|
5348
|
+
"properties": {
|
|
5349
|
+
"properties": {
|
|
5350
|
+
"userId": {
|
|
5351
|
+
"type": "string"
|
|
5352
|
+
},
|
|
5353
|
+
"type": {
|
|
5354
|
+
"type": "string"
|
|
5355
|
+
},
|
|
5356
|
+
"params": {
|
|
5357
|
+
"$ref": "#/components/schemas/Record_string.unknown_"
|
|
5358
|
+
},
|
|
5359
|
+
"objectId": {
|
|
5360
|
+
"type": "string"
|
|
5361
|
+
},
|
|
5362
|
+
"name": {
|
|
5363
|
+
"type": "string"
|
|
5364
|
+
},
|
|
5365
|
+
"method": {
|
|
5366
|
+
"type": "string"
|
|
5367
|
+
}
|
|
5368
|
+
},
|
|
5369
|
+
"additionalProperties": {},
|
|
5370
|
+
"type": "object"
|
|
5371
|
+
},
|
|
5372
|
+
"result": {
|
|
5373
|
+
"$ref": "#/components/schemas/Record_string.unknown_"
|
|
5374
|
+
},
|
|
5375
|
+
"start": {
|
|
5376
|
+
"type": "number",
|
|
5377
|
+
"format": "double"
|
|
5378
|
+
},
|
|
5379
|
+
"status": {
|
|
5380
|
+
"type": "string",
|
|
5381
|
+
"enum": [
|
|
5382
|
+
"failure",
|
|
5383
|
+
"interrupted",
|
|
5384
|
+
"pending",
|
|
5385
|
+
"success"
|
|
5386
|
+
]
|
|
5387
|
+
},
|
|
5388
|
+
"tasks": {
|
|
5389
|
+
"items": {
|
|
5390
|
+
"$ref": "#/components/schemas/XoTask"
|
|
5391
|
+
},
|
|
5392
|
+
"type": "array"
|
|
5393
|
+
},
|
|
5394
|
+
"updatedAt": {
|
|
5395
|
+
"type": "number",
|
|
5396
|
+
"format": "double"
|
|
5397
|
+
},
|
|
5398
|
+
"warning": {
|
|
5399
|
+
"items": {
|
|
5400
|
+
"properties": {
|
|
5401
|
+
"message": {
|
|
5402
|
+
"type": "string"
|
|
5403
|
+
},
|
|
5404
|
+
"data": {}
|
|
5405
|
+
},
|
|
5406
|
+
"required": [
|
|
5407
|
+
"message",
|
|
5408
|
+
"data"
|
|
5409
|
+
],
|
|
5410
|
+
"type": "object"
|
|
5411
|
+
},
|
|
5412
|
+
"type": "array"
|
|
5413
|
+
}
|
|
5414
|
+
},
|
|
5415
|
+
"type": "object",
|
|
5416
|
+
"description": "Make all properties in T optional"
|
|
5417
|
+
},
|
|
5418
|
+
"WithHref_Partial_Unbrand_XoTask___": {
|
|
5419
|
+
"allOf": [
|
|
5420
|
+
{
|
|
5421
|
+
"$ref": "#/components/schemas/Partial_Unbrand_XoTask__"
|
|
5422
|
+
},
|
|
5423
|
+
{
|
|
5424
|
+
"properties": {
|
|
5425
|
+
"href": {
|
|
5426
|
+
"type": "string"
|
|
5427
|
+
}
|
|
5428
|
+
},
|
|
5429
|
+
"required": [
|
|
5430
|
+
"href"
|
|
5431
|
+
],
|
|
5432
|
+
"type": "object"
|
|
5433
|
+
}
|
|
5434
|
+
]
|
|
5435
|
+
},
|
|
5436
|
+
"SendObjects_Partial_Unbrand_XoTask___": {
|
|
5437
|
+
"anyOf": [
|
|
5438
|
+
{
|
|
5439
|
+
"items": {
|
|
5440
|
+
"type": "string"
|
|
5441
|
+
},
|
|
5442
|
+
"type": "array"
|
|
5443
|
+
},
|
|
5444
|
+
{
|
|
5445
|
+
"items": {
|
|
5446
|
+
"$ref": "#/components/schemas/WithHref_Partial_Unbrand_XoTask___"
|
|
5447
|
+
},
|
|
5448
|
+
"type": "array"
|
|
5449
|
+
},
|
|
5450
|
+
{
|
|
5451
|
+
"$ref": "#/components/schemas/NdjsonStream"
|
|
5452
|
+
}
|
|
5453
|
+
]
|
|
5454
|
+
},
|
|
5455
|
+
"Unbrand_XoTask_": {
|
|
5456
|
+
"properties": {
|
|
5457
|
+
"abortionRequestedAt": {
|
|
5458
|
+
"type": "number",
|
|
5459
|
+
"format": "double"
|
|
5460
|
+
},
|
|
5461
|
+
"end": {
|
|
5462
|
+
"type": "number",
|
|
5463
|
+
"format": "double"
|
|
5464
|
+
},
|
|
5465
|
+
"id": {
|
|
5466
|
+
"type": "string"
|
|
5467
|
+
},
|
|
5468
|
+
"infos": {
|
|
5469
|
+
"items": {
|
|
5470
|
+
"properties": {
|
|
5471
|
+
"message": {
|
|
5472
|
+
"type": "string"
|
|
5473
|
+
},
|
|
5474
|
+
"data": {}
|
|
5475
|
+
},
|
|
5476
|
+
"required": [
|
|
5477
|
+
"message",
|
|
5478
|
+
"data"
|
|
5479
|
+
],
|
|
5480
|
+
"type": "object"
|
|
5481
|
+
},
|
|
5482
|
+
"type": "array"
|
|
5483
|
+
},
|
|
5484
|
+
"properties": {
|
|
5485
|
+
"properties": {
|
|
5486
|
+
"userId": {
|
|
5487
|
+
"type": "string"
|
|
5488
|
+
},
|
|
5489
|
+
"type": {
|
|
5490
|
+
"type": "string"
|
|
5491
|
+
},
|
|
5492
|
+
"params": {
|
|
5493
|
+
"$ref": "#/components/schemas/Record_string.unknown_"
|
|
5494
|
+
},
|
|
5495
|
+
"objectId": {
|
|
5496
|
+
"type": "string"
|
|
5497
|
+
},
|
|
5498
|
+
"name": {
|
|
5499
|
+
"type": "string"
|
|
5500
|
+
},
|
|
5501
|
+
"method": {
|
|
5502
|
+
"type": "string"
|
|
5503
|
+
}
|
|
5504
|
+
},
|
|
5505
|
+
"additionalProperties": {},
|
|
5506
|
+
"type": "object"
|
|
5507
|
+
},
|
|
5508
|
+
"result": {
|
|
5509
|
+
"$ref": "#/components/schemas/Record_string.unknown_"
|
|
5510
|
+
},
|
|
5511
|
+
"start": {
|
|
5512
|
+
"type": "number",
|
|
5513
|
+
"format": "double"
|
|
5514
|
+
},
|
|
5515
|
+
"status": {
|
|
5516
|
+
"type": "string",
|
|
5517
|
+
"enum": [
|
|
5518
|
+
"failure",
|
|
5519
|
+
"interrupted",
|
|
5520
|
+
"pending",
|
|
5521
|
+
"success"
|
|
5522
|
+
]
|
|
5523
|
+
},
|
|
5524
|
+
"tasks": {
|
|
5525
|
+
"items": {
|
|
5526
|
+
"$ref": "#/components/schemas/XoTask"
|
|
5527
|
+
},
|
|
5528
|
+
"type": "array"
|
|
5529
|
+
},
|
|
5530
|
+
"updatedAt": {
|
|
5531
|
+
"type": "number",
|
|
5532
|
+
"format": "double"
|
|
5533
|
+
},
|
|
5534
|
+
"warning": {
|
|
5535
|
+
"items": {
|
|
5536
|
+
"properties": {
|
|
5537
|
+
"message": {
|
|
5538
|
+
"type": "string"
|
|
5539
|
+
},
|
|
5540
|
+
"data": {}
|
|
5541
|
+
},
|
|
5542
|
+
"required": [
|
|
5543
|
+
"message",
|
|
5544
|
+
"data"
|
|
5545
|
+
],
|
|
5546
|
+
"type": "object"
|
|
5547
|
+
},
|
|
5548
|
+
"type": "array"
|
|
5549
|
+
}
|
|
5550
|
+
},
|
|
5551
|
+
"required": [
|
|
5552
|
+
"id",
|
|
5553
|
+
"properties",
|
|
5554
|
+
"result",
|
|
5555
|
+
"start",
|
|
5556
|
+
"status"
|
|
5557
|
+
],
|
|
5558
|
+
"type": "object"
|
|
5559
|
+
},
|
|
5187
5560
|
"Record_string.STORAGE_OPERATIONS_": {
|
|
5188
5561
|
"properties": {},
|
|
5189
5562
|
"type": "object",
|
|
@@ -5624,11 +5997,6 @@
|
|
|
5624
5997
|
],
|
|
5625
5998
|
"type": "object"
|
|
5626
5999
|
},
|
|
5627
|
-
"Record_string.unknown_": {
|
|
5628
|
-
"properties": {},
|
|
5629
|
-
"type": "object",
|
|
5630
|
-
"description": "Construct a type with a set of properties K of type T"
|
|
5631
|
-
},
|
|
5632
6000
|
"Partial_Unbrand_XoServer__": {
|
|
5633
6001
|
"properties": {
|
|
5634
6002
|
"allowUnauthorized": {
|
|
@@ -6840,17 +7208,20 @@
|
|
|
6840
7208
|
{
|
|
6841
7209
|
"properties": {
|
|
6842
7210
|
"missingPatches": {
|
|
6843
|
-
"
|
|
6844
|
-
|
|
6845
|
-
{
|
|
7211
|
+
"anyOf": [
|
|
7212
|
+
{
|
|
7213
|
+
"items": {
|
|
6846
7214
|
"$ref": "#/components/schemas/XcpPatches"
|
|
6847
7215
|
},
|
|
6848
|
-
|
|
7216
|
+
"type": "array"
|
|
7217
|
+
},
|
|
7218
|
+
{
|
|
7219
|
+
"items": {
|
|
6849
7220
|
"$ref": "#/components/schemas/XsPatches"
|
|
6850
|
-
}
|
|
6851
|
-
|
|
6852
|
-
|
|
6853
|
-
|
|
7221
|
+
},
|
|
7222
|
+
"type": "array"
|
|
7223
|
+
}
|
|
7224
|
+
]
|
|
6854
7225
|
},
|
|
6855
7226
|
"hasAuthorization": {
|
|
6856
7227
|
"type": "boolean",
|
|
@@ -9258,7 +9629,7 @@
|
|
|
9258
9629
|
},
|
|
9259
9630
|
"info": {
|
|
9260
9631
|
"title": "@xen-orchestra/rest-api",
|
|
9261
|
-
"version": "0.
|
|
9632
|
+
"version": "0.15.0",
|
|
9262
9633
|
"description": "REST API to manage your XOA",
|
|
9263
9634
|
"license": {
|
|
9264
9635
|
"name": "AGPL-3.0-or-later"
|
|
@@ -14420,33 +14791,300 @@
|
|
|
14420
14791
|
}
|
|
14421
14792
|
}
|
|
14422
14793
|
}
|
|
14423
|
-
}
|
|
14794
|
+
}
|
|
14795
|
+
}
|
|
14796
|
+
},
|
|
14797
|
+
"/users/{id}": {
|
|
14798
|
+
"get": {
|
|
14799
|
+
"operationId": "GetUser",
|
|
14800
|
+
"responses": {
|
|
14801
|
+
"200": {
|
|
14802
|
+
"description": "Ok",
|
|
14803
|
+
"content": {
|
|
14804
|
+
"application/json": {
|
|
14805
|
+
"schema": {
|
|
14806
|
+
"$ref": "#/components/schemas/Unbrand_XoUser_"
|
|
14807
|
+
},
|
|
14808
|
+
"examples": {
|
|
14809
|
+
"Example 1": {
|
|
14810
|
+
"value": {
|
|
14811
|
+
"email": "admin@admin.net",
|
|
14812
|
+
"permission": "admin",
|
|
14813
|
+
"pw_hash": "***obfuscated***",
|
|
14814
|
+
"groups": [
|
|
14815
|
+
"7d98fee4-3357-41a7-ac3f-9124212badb7",
|
|
14816
|
+
"7981ba62-c395-4546-bfa4-d1261653a77f"
|
|
14817
|
+
],
|
|
14818
|
+
"name": "admin@admin.net",
|
|
14819
|
+
"preferences": {},
|
|
14820
|
+
"id": "722d17b9-699b-49d2-8193-be1ac573d3de"
|
|
14821
|
+
}
|
|
14822
|
+
}
|
|
14823
|
+
}
|
|
14824
|
+
}
|
|
14825
|
+
}
|
|
14826
|
+
},
|
|
14827
|
+
"401": {
|
|
14828
|
+
"description": "Authentication required"
|
|
14829
|
+
},
|
|
14830
|
+
"404": {
|
|
14831
|
+
"description": "Resource not found"
|
|
14832
|
+
}
|
|
14833
|
+
},
|
|
14834
|
+
"tags": [
|
|
14835
|
+
"users"
|
|
14836
|
+
],
|
|
14837
|
+
"security": [
|
|
14838
|
+
{
|
|
14839
|
+
"*": []
|
|
14840
|
+
}
|
|
14841
|
+
],
|
|
14842
|
+
"parameters": [
|
|
14843
|
+
{
|
|
14844
|
+
"in": "path",
|
|
14845
|
+
"name": "id",
|
|
14846
|
+
"required": true,
|
|
14847
|
+
"schema": {
|
|
14848
|
+
"type": "string"
|
|
14849
|
+
},
|
|
14850
|
+
"example": "722d17b9-699b-49d2-8193-be1ac573d3de"
|
|
14851
|
+
}
|
|
14852
|
+
]
|
|
14853
|
+
},
|
|
14854
|
+
"patch": {
|
|
14855
|
+
"operationId": "UpdateUser",
|
|
14856
|
+
"responses": {
|
|
14857
|
+
"204": {
|
|
14858
|
+
"description": "No content"
|
|
14859
|
+
},
|
|
14860
|
+
"401": {
|
|
14861
|
+
"description": "Authentication required"
|
|
14862
|
+
},
|
|
14863
|
+
"403": {
|
|
14864
|
+
"description": "Forbidden"
|
|
14865
|
+
},
|
|
14866
|
+
"404": {
|
|
14867
|
+
"description": "Resource not found"
|
|
14868
|
+
},
|
|
14869
|
+
"409": {
|
|
14870
|
+
"description": "Resource already exists"
|
|
14871
|
+
}
|
|
14872
|
+
},
|
|
14873
|
+
"tags": [
|
|
14874
|
+
"users"
|
|
14875
|
+
],
|
|
14876
|
+
"security": [
|
|
14877
|
+
{
|
|
14878
|
+
"*": []
|
|
14879
|
+
}
|
|
14880
|
+
],
|
|
14881
|
+
"parameters": [
|
|
14882
|
+
{
|
|
14883
|
+
"in": "path",
|
|
14884
|
+
"name": "id",
|
|
14885
|
+
"required": true,
|
|
14886
|
+
"schema": {
|
|
14887
|
+
"type": "string"
|
|
14888
|
+
},
|
|
14889
|
+
"example": "722d17b9-699b-49d2-8193-be1ac573d3de"
|
|
14890
|
+
}
|
|
14891
|
+
],
|
|
14892
|
+
"requestBody": {
|
|
14893
|
+
"required": true,
|
|
14894
|
+
"content": {
|
|
14895
|
+
"application/json": {
|
|
14896
|
+
"schema": {
|
|
14897
|
+
"$ref": "#/components/schemas/UpdateUserRequestBody"
|
|
14898
|
+
},
|
|
14899
|
+
"example": {
|
|
14900
|
+
"name": "updated user name",
|
|
14901
|
+
"password": "newP4ssword",
|
|
14902
|
+
"permission": "admin",
|
|
14903
|
+
"preferences": {}
|
|
14904
|
+
}
|
|
14905
|
+
}
|
|
14906
|
+
}
|
|
14907
|
+
}
|
|
14908
|
+
},
|
|
14909
|
+
"delete": {
|
|
14910
|
+
"operationId": "DeleteUser",
|
|
14911
|
+
"responses": {
|
|
14912
|
+
"204": {
|
|
14913
|
+
"description": "No content"
|
|
14914
|
+
},
|
|
14915
|
+
"401": {
|
|
14916
|
+
"description": "Authentication required"
|
|
14917
|
+
},
|
|
14918
|
+
"404": {
|
|
14919
|
+
"description": "Resource not found"
|
|
14920
|
+
}
|
|
14921
|
+
},
|
|
14922
|
+
"tags": [
|
|
14923
|
+
"users"
|
|
14924
|
+
],
|
|
14925
|
+
"security": [
|
|
14926
|
+
{
|
|
14927
|
+
"*": []
|
|
14928
|
+
}
|
|
14929
|
+
],
|
|
14930
|
+
"parameters": [
|
|
14931
|
+
{
|
|
14932
|
+
"in": "path",
|
|
14933
|
+
"name": "id",
|
|
14934
|
+
"required": true,
|
|
14935
|
+
"schema": {
|
|
14936
|
+
"type": "string"
|
|
14937
|
+
},
|
|
14938
|
+
"example": "722d17b9-699b-49d2-8193-be1ac573d3de"
|
|
14939
|
+
}
|
|
14940
|
+
]
|
|
14941
|
+
}
|
|
14942
|
+
},
|
|
14943
|
+
"/tasks": {
|
|
14944
|
+
"get": {
|
|
14945
|
+
"operationId": "GetTasks",
|
|
14946
|
+
"responses": {
|
|
14947
|
+
"200": {
|
|
14948
|
+
"description": "Ok",
|
|
14949
|
+
"content": {
|
|
14950
|
+
"application/json": {
|
|
14951
|
+
"schema": {
|
|
14952
|
+
"$ref": "#/components/schemas/SendObjects_Partial_Unbrand_XoTask___"
|
|
14953
|
+
},
|
|
14954
|
+
"examples": {
|
|
14955
|
+
"Example 1": {
|
|
14956
|
+
"value": [
|
|
14957
|
+
"/rest/v0/tasks/0mdd1basu",
|
|
14958
|
+
"/rest/v0/tasks/0mdd1t24g"
|
|
14959
|
+
]
|
|
14960
|
+
},
|
|
14961
|
+
"Example 2": {
|
|
14962
|
+
"value": [
|
|
14963
|
+
{
|
|
14964
|
+
"status": "failure",
|
|
14965
|
+
"id": "0mdd1basu",
|
|
14966
|
+
"properties": {
|
|
14967
|
+
"method": "xoa.licenses.getSelf",
|
|
14968
|
+
"params": {},
|
|
14969
|
+
"name": "API call: xoa.licenses.getSelf",
|
|
14970
|
+
"userId": "e531b8c9-3876-4ed9-8fd2-0476d5f825c9",
|
|
14971
|
+
"type": "api.call"
|
|
14972
|
+
},
|
|
14973
|
+
"href": "/rest/v0/tasks/0mdd1basu"
|
|
14974
|
+
},
|
|
14975
|
+
{
|
|
14976
|
+
"status": "failure",
|
|
14977
|
+
"id": "0mdd1t24g",
|
|
14978
|
+
"properties": {
|
|
14979
|
+
"method": "xoa.licenses.getSelf",
|
|
14980
|
+
"params": {},
|
|
14981
|
+
"name": "API call: xoa.licenses.getSelf",
|
|
14982
|
+
"userId": "e531b8c9-3876-4ed9-8fd2-0476d5f825c9",
|
|
14983
|
+
"type": "api.call"
|
|
14984
|
+
},
|
|
14985
|
+
"href": "/rest/v0/tasks/0mdd1t24g"
|
|
14986
|
+
}
|
|
14987
|
+
]
|
|
14988
|
+
}
|
|
14989
|
+
}
|
|
14990
|
+
}
|
|
14991
|
+
}
|
|
14992
|
+
},
|
|
14993
|
+
"400": {
|
|
14994
|
+
"description": "Bad request"
|
|
14995
|
+
},
|
|
14996
|
+
"401": {
|
|
14997
|
+
"description": "Authentication required"
|
|
14998
|
+
}
|
|
14999
|
+
},
|
|
15000
|
+
"description": "\nIf watch is true, ndjson must also be true",
|
|
15001
|
+
"tags": [
|
|
15002
|
+
"tasks"
|
|
15003
|
+
],
|
|
15004
|
+
"security": [
|
|
15005
|
+
{
|
|
15006
|
+
"*": []
|
|
15007
|
+
}
|
|
15008
|
+
],
|
|
15009
|
+
"parameters": [
|
|
15010
|
+
{
|
|
15011
|
+
"in": "query",
|
|
15012
|
+
"name": "fields",
|
|
15013
|
+
"required": false,
|
|
15014
|
+
"schema": {
|
|
15015
|
+
"type": "string"
|
|
15016
|
+
},
|
|
15017
|
+
"example": "status,id,properties"
|
|
15018
|
+
},
|
|
15019
|
+
{
|
|
15020
|
+
"in": "query",
|
|
15021
|
+
"name": "ndjson",
|
|
15022
|
+
"required": false,
|
|
15023
|
+
"schema": {
|
|
15024
|
+
"type": "boolean"
|
|
15025
|
+
}
|
|
15026
|
+
},
|
|
15027
|
+
{
|
|
15028
|
+
"in": "query",
|
|
15029
|
+
"name": "watch",
|
|
15030
|
+
"required": false,
|
|
15031
|
+
"schema": {
|
|
15032
|
+
"type": "boolean"
|
|
15033
|
+
}
|
|
15034
|
+
},
|
|
15035
|
+
{
|
|
15036
|
+
"in": "query",
|
|
15037
|
+
"name": "filter",
|
|
15038
|
+
"required": false,
|
|
15039
|
+
"schema": {
|
|
15040
|
+
"type": "string"
|
|
15041
|
+
},
|
|
15042
|
+
"example": "status:failure"
|
|
15043
|
+
},
|
|
15044
|
+
{
|
|
15045
|
+
"in": "query",
|
|
15046
|
+
"name": "limit",
|
|
15047
|
+
"required": false,
|
|
15048
|
+
"schema": {
|
|
15049
|
+
"format": "double",
|
|
15050
|
+
"type": "number"
|
|
15051
|
+
},
|
|
15052
|
+
"example": 42
|
|
15053
|
+
}
|
|
15054
|
+
]
|
|
14424
15055
|
}
|
|
14425
15056
|
},
|
|
14426
|
-
"/
|
|
15057
|
+
"/tasks/{id}": {
|
|
14427
15058
|
"get": {
|
|
14428
|
-
"operationId": "
|
|
15059
|
+
"operationId": "GetTask",
|
|
14429
15060
|
"responses": {
|
|
14430
15061
|
"200": {
|
|
14431
15062
|
"description": "Ok",
|
|
14432
15063
|
"content": {
|
|
14433
15064
|
"application/json": {
|
|
14434
15065
|
"schema": {
|
|
14435
|
-
"$ref": "#/components/schemas/
|
|
15066
|
+
"$ref": "#/components/schemas/Unbrand_XoTask_"
|
|
14436
15067
|
},
|
|
14437
15068
|
"examples": {
|
|
14438
15069
|
"Example 1": {
|
|
14439
15070
|
"value": {
|
|
14440
|
-
"
|
|
14441
|
-
"
|
|
14442
|
-
|
|
14443
|
-
|
|
14444
|
-
"
|
|
14445
|
-
"
|
|
14446
|
-
|
|
14447
|
-
|
|
14448
|
-
"
|
|
14449
|
-
"
|
|
15071
|
+
"id": "0mdd1basu",
|
|
15072
|
+
"properties": {
|
|
15073
|
+
"method": "xoa.licenses.getSelf",
|
|
15074
|
+
"params": {},
|
|
15075
|
+
"name": "API call: xoa.licenses.getSelf",
|
|
15076
|
+
"userId": "e531b8c9-3876-4ed9-8fd2-0476d5f825c9",
|
|
15077
|
+
"type": "api.call"
|
|
15078
|
+
},
|
|
15079
|
+
"start": 1753098047598,
|
|
15080
|
+
"status": "failure",
|
|
15081
|
+
"updatedAt": 1753098047696,
|
|
15082
|
+
"end": 1753098047600,
|
|
15083
|
+
"result": {
|
|
15084
|
+
"message": "invalid status closed, expected open",
|
|
15085
|
+
"name": "ConnectionError",
|
|
15086
|
+
"stack": "ConnectionError: invalid status closed, expected open\n at JsonRpcWebSocketClient._assertStatus (/home/debian/xoa/node_modules/jsonrpc-websocket-client/src/websocket-client.js:141:13)\n at JsonRpcWebSocketClient.send (/home/debian/xoa/node_modules/jsonrpc-websocket-client/src/websocket-client.js:128:10)\n at Peer.<anonymous> (/home/debian/xoa/node_modules/jsonrpc-websocket-client/src/index.js:47:12)\n at Peer.emit (node:events:518:28)\n at Peer.emit (/home/debian/xen-orchestra/@xen-orchestra/log/configure.js:52:17)\n at Peer.push (/home/debian/xoa/node_modules/json-rpc-peer/src/index.js:196:52)\n at /home/debian/xoa/node_modules/json-rpc-peer/src/index.js:142:12\n at Promise._execute (/home/debian/xen-orchestra/node_modules/bluebird/js/release/debuggability.js:384:9)\n at Promise._resolveFromExecutor (/home/debian/xen-orchestra/node_modules/bluebird/js/release/promise.js:518:18)\n at new Promise (/home/debian/xen-orchestra/node_modules/bluebird/js/release/promise.js:103:10)\n at Peer.request (/home/debian/xoa/node_modules/json-rpc-peer/src/index.js:139:12)\n at JsonRpcWebSocketClient.call (/home/debian/xoa/node_modules/jsonrpc-websocket-client/src/index.js:63:23)\n at Xoa.apply [as _getSelfLicenses] (/home/debian/xoa/packages/xo-server-xoa/src/index.js:929:26)\n at Xo.call (file:///home/debian/xen-orchestra/packages/xo-server/src/xo-mixins/api.mjs:269:25)\n at file:///home/debian/xen-orchestra/packages/xo-server/src/xo-mixins/api.mjs:421:33\n at AsyncLocalStorage.run (node:internal/async_local_storage/async_hooks:91:14)\n at Task.runInside (/home/debian/xen-orchestra/@vates/task/index.js:175:41)\n at Task.run (/home/debian/xen-orchestra/@vates/task/index.js:159:31)\n at run (file:///home/debian/xen-orchestra/packages/xo-server/src/xo-mixins/api.mjs:421:16)\n at Api.#callApiMethod (file:///home/debian/xen-orchestra/packages/xo-server/src/xo-mixins/api.mjs:469:24)"
|
|
15087
|
+
}
|
|
14450
15088
|
}
|
|
14451
15089
|
}
|
|
14452
15090
|
}
|
|
@@ -14461,7 +15099,7 @@
|
|
|
14461
15099
|
}
|
|
14462
15100
|
},
|
|
14463
15101
|
"tags": [
|
|
14464
|
-
"
|
|
15102
|
+
"tasks"
|
|
14465
15103
|
],
|
|
14466
15104
|
"security": [
|
|
14467
15105
|
{
|
|
@@ -14476,96 +15114,16 @@
|
|
|
14476
15114
|
"schema": {
|
|
14477
15115
|
"type": "string"
|
|
14478
15116
|
},
|
|
14479
|
-
"example": "
|
|
14480
|
-
}
|
|
14481
|
-
]
|
|
14482
|
-
},
|
|
14483
|
-
"patch": {
|
|
14484
|
-
"operationId": "UpdateUser",
|
|
14485
|
-
"responses": {
|
|
14486
|
-
"204": {
|
|
14487
|
-
"description": "No content"
|
|
14488
|
-
},
|
|
14489
|
-
"401": {
|
|
14490
|
-
"description": "Authentication required"
|
|
14491
|
-
},
|
|
14492
|
-
"403": {
|
|
14493
|
-
"description": "Forbidden"
|
|
14494
|
-
},
|
|
14495
|
-
"404": {
|
|
14496
|
-
"description": "Resource not found"
|
|
15117
|
+
"example": "0mdd1basu"
|
|
14497
15118
|
},
|
|
14498
|
-
"409": {
|
|
14499
|
-
"description": "Resource already exists"
|
|
14500
|
-
}
|
|
14501
|
-
},
|
|
14502
|
-
"tags": [
|
|
14503
|
-
"users"
|
|
14504
|
-
],
|
|
14505
|
-
"security": [
|
|
14506
|
-
{
|
|
14507
|
-
"*": []
|
|
14508
|
-
}
|
|
14509
|
-
],
|
|
14510
|
-
"parameters": [
|
|
14511
15119
|
{
|
|
14512
|
-
"in": "
|
|
14513
|
-
"name": "
|
|
14514
|
-
"required":
|
|
15120
|
+
"in": "query",
|
|
15121
|
+
"name": "wait",
|
|
15122
|
+
"required": false,
|
|
14515
15123
|
"schema": {
|
|
14516
|
-
"type": "
|
|
14517
|
-
},
|
|
14518
|
-
"example": "722d17b9-699b-49d2-8193-be1ac573d3de"
|
|
14519
|
-
}
|
|
14520
|
-
],
|
|
14521
|
-
"requestBody": {
|
|
14522
|
-
"required": true,
|
|
14523
|
-
"content": {
|
|
14524
|
-
"application/json": {
|
|
14525
|
-
"schema": {
|
|
14526
|
-
"$ref": "#/components/schemas/UpdateUserRequestBody"
|
|
14527
|
-
},
|
|
14528
|
-
"example": {
|
|
14529
|
-
"name": "updated user name",
|
|
14530
|
-
"password": "newP4ssword",
|
|
14531
|
-
"permission": "admin",
|
|
14532
|
-
"preferences": {}
|
|
14533
|
-
}
|
|
15124
|
+
"type": "boolean"
|
|
14534
15125
|
}
|
|
14535
15126
|
}
|
|
14536
|
-
}
|
|
14537
|
-
},
|
|
14538
|
-
"delete": {
|
|
14539
|
-
"operationId": "DeleteUser",
|
|
14540
|
-
"responses": {
|
|
14541
|
-
"204": {
|
|
14542
|
-
"description": "No content"
|
|
14543
|
-
},
|
|
14544
|
-
"401": {
|
|
14545
|
-
"description": "Authentication required"
|
|
14546
|
-
},
|
|
14547
|
-
"404": {
|
|
14548
|
-
"description": "Resource not found"
|
|
14549
|
-
}
|
|
14550
|
-
},
|
|
14551
|
-
"tags": [
|
|
14552
|
-
"users"
|
|
14553
|
-
],
|
|
14554
|
-
"security": [
|
|
14555
|
-
{
|
|
14556
|
-
"*": []
|
|
14557
|
-
}
|
|
14558
|
-
],
|
|
14559
|
-
"parameters": [
|
|
14560
|
-
{
|
|
14561
|
-
"in": "path",
|
|
14562
|
-
"name": "id",
|
|
14563
|
-
"required": true,
|
|
14564
|
-
"schema": {
|
|
14565
|
-
"type": "string"
|
|
14566
|
-
},
|
|
14567
|
-
"example": "722d17b9-699b-49d2-8193-be1ac573d3de"
|
|
14568
|
-
}
|
|
14569
15127
|
]
|
|
14570
15128
|
}
|
|
14571
15129
|
},
|
|
@@ -18598,6 +19156,98 @@
|
|
|
18598
19156
|
]
|
|
18599
19157
|
}
|
|
18600
19158
|
},
|
|
19159
|
+
"/pools/{id}/missing_patches": {
|
|
19160
|
+
"get": {
|
|
19161
|
+
"operationId": "GetPoolMissingPatches",
|
|
19162
|
+
"responses": {
|
|
19163
|
+
"200": {
|
|
19164
|
+
"description": "Ok",
|
|
19165
|
+
"content": {
|
|
19166
|
+
"application/json": {
|
|
19167
|
+
"schema": {
|
|
19168
|
+
"anyOf": [
|
|
19169
|
+
{
|
|
19170
|
+
"items": {
|
|
19171
|
+
"$ref": "#/components/schemas/XcpPatches"
|
|
19172
|
+
},
|
|
19173
|
+
"type": "array"
|
|
19174
|
+
},
|
|
19175
|
+
{
|
|
19176
|
+
"items": {
|
|
19177
|
+
"$ref": "#/components/schemas/XsPatches"
|
|
19178
|
+
},
|
|
19179
|
+
"type": "array"
|
|
19180
|
+
}
|
|
19181
|
+
]
|
|
19182
|
+
},
|
|
19183
|
+
"examples": {
|
|
19184
|
+
"Example 1": {
|
|
19185
|
+
"value": [
|
|
19186
|
+
{
|
|
19187
|
+
"url": "http://www.samba.org/",
|
|
19188
|
+
"version": "4.10.16",
|
|
19189
|
+
"name": "libsmbclient",
|
|
19190
|
+
"license": "GPLv3+ and LGPLv3+",
|
|
19191
|
+
"changelog": {
|
|
19192
|
+
"date": 1690286400,
|
|
19193
|
+
"description": "- resolves: #2222250 - Fix netlogon capabilities level 2",
|
|
19194
|
+
"author": "Andreas Schneider <asn@redhat.com> - 4.10.16-25"
|
|
19195
|
+
},
|
|
19196
|
+
"release": "25.el7_9",
|
|
19197
|
+
"size": 149400,
|
|
19198
|
+
"description": "The SMB client library"
|
|
19199
|
+
},
|
|
19200
|
+
{
|
|
19201
|
+
"url": "http://www.openssh.com/portable.html",
|
|
19202
|
+
"version": "7.4p1",
|
|
19203
|
+
"name": "openssh",
|
|
19204
|
+
"license": "BSD",
|
|
19205
|
+
"changelog": {
|
|
19206
|
+
"date": 1742212800,
|
|
19207
|
+
"description": "- Fix CVE-2025-26465 - Fix cases where error codes were not correctly set",
|
|
19208
|
+
"author": "Lucas Ravagnier <lucas.ravagnier@vates.tech> - 7.4p1-23.3.2 + 0.10.3-2.23.3.2"
|
|
19209
|
+
},
|
|
19210
|
+
"release": "23.3.2.xcpng8.2",
|
|
19211
|
+
"size": 429044,
|
|
19212
|
+
"description": "An open source implementation of SSH protocol versions 1 and 2"
|
|
19213
|
+
}
|
|
19214
|
+
]
|
|
19215
|
+
}
|
|
19216
|
+
}
|
|
19217
|
+
}
|
|
19218
|
+
}
|
|
19219
|
+
},
|
|
19220
|
+
"401": {
|
|
19221
|
+
"description": "Authentication required"
|
|
19222
|
+
},
|
|
19223
|
+
"403": {
|
|
19224
|
+
"description": "Feature unauthorized"
|
|
19225
|
+
},
|
|
19226
|
+
"404": {
|
|
19227
|
+
"description": "Resource not found"
|
|
19228
|
+
}
|
|
19229
|
+
},
|
|
19230
|
+
"tags": [
|
|
19231
|
+
"pools"
|
|
19232
|
+
],
|
|
19233
|
+
"security": [
|
|
19234
|
+
{
|
|
19235
|
+
"*": []
|
|
19236
|
+
}
|
|
19237
|
+
],
|
|
19238
|
+
"parameters": [
|
|
19239
|
+
{
|
|
19240
|
+
"in": "path",
|
|
19241
|
+
"name": "id",
|
|
19242
|
+
"required": true,
|
|
19243
|
+
"schema": {
|
|
19244
|
+
"type": "string"
|
|
19245
|
+
},
|
|
19246
|
+
"example": "355ee47d-ff4c-4924-3db2-fd86ae629676"
|
|
19247
|
+
}
|
|
19248
|
+
]
|
|
19249
|
+
}
|
|
19250
|
+
},
|
|
18601
19251
|
"/pifs": {
|
|
18602
19252
|
"get": {
|
|
18603
19253
|
"operationId": "GetPifs",
|
|
@@ -26419,6 +27069,99 @@
|
|
|
26419
27069
|
]
|
|
26420
27070
|
}
|
|
26421
27071
|
},
|
|
27072
|
+
"/hosts/{id}/missing_patches": {
|
|
27073
|
+
"get": {
|
|
27074
|
+
"operationId": "GetMissingPatches",
|
|
27075
|
+
"responses": {
|
|
27076
|
+
"200": {
|
|
27077
|
+
"description": "Ok",
|
|
27078
|
+
"content": {
|
|
27079
|
+
"application/json": {
|
|
27080
|
+
"schema": {
|
|
27081
|
+
"anyOf": [
|
|
27082
|
+
{
|
|
27083
|
+
"items": {
|
|
27084
|
+
"$ref": "#/components/schemas/XcpPatches"
|
|
27085
|
+
},
|
|
27086
|
+
"type": "array"
|
|
27087
|
+
},
|
|
27088
|
+
{
|
|
27089
|
+
"items": {
|
|
27090
|
+
"$ref": "#/components/schemas/XsPatches"
|
|
27091
|
+
},
|
|
27092
|
+
"type": "array"
|
|
27093
|
+
}
|
|
27094
|
+
]
|
|
27095
|
+
},
|
|
27096
|
+
"examples": {
|
|
27097
|
+
"Example 1": {
|
|
27098
|
+
"value": [
|
|
27099
|
+
{
|
|
27100
|
+
"url": "http://www.samba.org/",
|
|
27101
|
+
"version": "4.10.16",
|
|
27102
|
+
"name": "libsmbclient",
|
|
27103
|
+
"license": "GPLv3+ and LGPLv3+",
|
|
27104
|
+
"changelog": {
|
|
27105
|
+
"date": 1690286400,
|
|
27106
|
+
"description": "- resolves: #2222250 - Fix netlogon capabilities level 2",
|
|
27107
|
+
"author": "Andreas Schneider <asn@redhat.com> - 4.10.16-25"
|
|
27108
|
+
},
|
|
27109
|
+
"release": "25.el7_9",
|
|
27110
|
+
"size": 149400,
|
|
27111
|
+
"description": "The SMB client library"
|
|
27112
|
+
},
|
|
27113
|
+
{
|
|
27114
|
+
"url": "http://www.openssh.com/portable.html",
|
|
27115
|
+
"version": "7.4p1",
|
|
27116
|
+
"name": "openssh",
|
|
27117
|
+
"license": "BSD",
|
|
27118
|
+
"changelog": {
|
|
27119
|
+
"date": 1742212800,
|
|
27120
|
+
"description": "- Fix CVE-2025-26465 - Fix cases where error codes were not correctly set",
|
|
27121
|
+
"author": "Lucas Ravagnier <lucas.ravagnier@vates.tech> - 7.4p1-23.3.2 + 0.10.3-2.23.3.2"
|
|
27122
|
+
},
|
|
27123
|
+
"release": "23.3.2.xcpng8.2",
|
|
27124
|
+
"size": 429044,
|
|
27125
|
+
"description": "An open source implementation of SSH protocol versions 1 and 2"
|
|
27126
|
+
}
|
|
27127
|
+
]
|
|
27128
|
+
}
|
|
27129
|
+
}
|
|
27130
|
+
}
|
|
27131
|
+
}
|
|
27132
|
+
},
|
|
27133
|
+
"401": {
|
|
27134
|
+
"description": "Authentication required"
|
|
27135
|
+
},
|
|
27136
|
+
"403": {
|
|
27137
|
+
"description": "Feature unauthorized"
|
|
27138
|
+
},
|
|
27139
|
+
"404": {
|
|
27140
|
+
"description": "Resource not found"
|
|
27141
|
+
}
|
|
27142
|
+
},
|
|
27143
|
+
"description": "Host must be running",
|
|
27144
|
+
"tags": [
|
|
27145
|
+
"hosts"
|
|
27146
|
+
],
|
|
27147
|
+
"security": [
|
|
27148
|
+
{
|
|
27149
|
+
"*": []
|
|
27150
|
+
}
|
|
27151
|
+
],
|
|
27152
|
+
"parameters": [
|
|
27153
|
+
{
|
|
27154
|
+
"in": "path",
|
|
27155
|
+
"name": "id",
|
|
27156
|
+
"required": true,
|
|
27157
|
+
"schema": {
|
|
27158
|
+
"type": "string"
|
|
27159
|
+
},
|
|
27160
|
+
"example": "b61a5c92-700e-4966-a13b-00633f03eea8"
|
|
27161
|
+
}
|
|
27162
|
+
]
|
|
27163
|
+
}
|
|
27164
|
+
},
|
|
26422
27165
|
"/groups": {
|
|
26423
27166
|
"get": {
|
|
26424
27167
|
"operationId": "GetGroups",
|
|
@@ -27210,6 +27953,20 @@
|
|
|
27210
27953
|
}
|
|
27211
27954
|
}
|
|
27212
27955
|
}
|
|
27956
|
+
},
|
|
27957
|
+
"/docs/swagger.json": {
|
|
27958
|
+
"get": {
|
|
27959
|
+
"operationId": "swaggerSpec",
|
|
27960
|
+
"description": "Returns the swagger json ready to use for REST API clients",
|
|
27961
|
+
"responses": {
|
|
27962
|
+
"200": {
|
|
27963
|
+
"description": "Ok"
|
|
27964
|
+
}
|
|
27965
|
+
},
|
|
27966
|
+
"tags": [
|
|
27967
|
+
"docs"
|
|
27968
|
+
]
|
|
27969
|
+
}
|
|
27213
27970
|
}
|
|
27214
27971
|
}
|
|
27215
27972
|
}
|