@opensoha/contracts 0.1.24 → 0.1.25

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/auth/catalog_generated.go +2 -2
  2. package/auth/gateway_permissions_test.go +48 -0
  3. package/auth/permission-catalog.json +300 -1
  4. package/compat/consumer-revisions.json +1 -1
  5. package/compat/json-schema-ecosystem-0.1.0.json +1 -1
  6. package/compat/openapi-loose-boundaries-0.1.0.json +1 -1
  7. package/fixtures/openapi/KubernetesAgentActionCheck/invalid/unproven-state.json +6 -0
  8. package/fixtures/openapi/KubernetesAgentActionCheck/valid/configured-denied.json +9 -0
  9. package/fixtures/openapi/KubernetesAgentActionProfile/invalid/wildcard.json +1 -0
  10. package/fixtures/openapi/KubernetesAgentActionProfile/valid/workbench.json +1 -0
  11. package/fixtures/openapi/KubernetesClusterRegistrationRequest/invalid/action-profile.json +3 -0
  12. package/fixtures/openapi/KubernetesClusterRegistrationRequest/valid/action-profile.json +5 -0
  13. package/fixtures/openapi/KubernetesNodeListEnvelope/invalid/condition-status-boolean.json +17 -0
  14. package/fixtures/openapi/KubernetesNodeListEnvelope/invalid/taint-effect-missing.json +16 -0
  15. package/fixtures/openapi/KubernetesNodeListEnvelope/valid/legacy-fields-absent.json +11 -0
  16. package/fixtures/openapi/KubernetesNodeListEnvelope/valid/no-taints.json +13 -0
  17. package/fixtures/openapi/KubernetesNodeListEnvelope/valid/ready-cordoned-tainted.json +28 -0
  18. package/fixtures/openapi/KubernetesNodeListEnvelope/valid/unknown-fields-null.json +13 -0
  19. package/fixtures/openapi/KubernetesTopologyCoverage/invalid/empty-as-success.json +5 -0
  20. package/fixtures/openapi/KubernetesTopologyCoverage/valid/not-installed.json +6 -0
  21. package/fixtures/openapi/KubernetesTopologyGraphEdge/invalid/negative-weight.json +8 -0
  22. package/fixtures/openapi/KubernetesTopologyGraphEdge/valid/zero-weight.json +20 -0
  23. package/fixtures/openapi/KubernetesTopologyGraphNode/invalid/fake-flow-kind.json +42 -0
  24. package/fixtures/openapi/KubernetesTopologyGraphNode/valid/rule.json +42 -0
  25. package/fixtures/openapi/KubernetesTopologySnapshot/invalid/raw-source-field.json +33 -0
  26. package/fixtures/openapi/KubernetesTopologySnapshot/valid/projected-source.json +32 -0
  27. package/fixtures/openapi/KubernetesTopologySnapshotRequest/invalid/arbitrary-gvr.json +8 -0
  28. package/fixtures/openapi/KubernetesTopologySnapshotRequest/valid/bounded-sources.json +11 -0
  29. package/fixtures/openapi/KubernetesTopologySourceQuery/invalid/cluster-namespace.json +4 -0
  30. package/fixtures/openapi/KubernetesTopologySourceQuery/valid/all-namespaces.json +4 -0
  31. package/fixtures/openapi/ResourceMonitoringPanel/invalid/unknown-quality.json +7 -0
  32. package/fixtures/openapi/ResourceMonitoringPanel/valid/not-collected.json +7 -0
  33. package/fixtures/openapi/ResourceMonitoringPoint/invalid/string-zero.json +4 -0
  34. package/fixtures/openapi/ResourceMonitoringPoint/valid/missing.json +4 -0
  35. package/fixtures/openapi/ResourceMonitoringPoint/valid/zero.json +4 -0
  36. package/fixtures/openapi/ResourceMonitoringView/invalid/raw-query.json +12 -0
  37. package/fixtures/openapi/ResourceMonitoringView/valid/unconfigured.json +12 -0
  38. package/gen/go/sohaapi/client.go +1 -1
  39. package/gen/go/sohaapi/kubernetes_monitoring_test.go +67 -0
  40. package/gen/go/sohaapi/types.go +1265 -228
  41. package/gen/ts/sohaapi/index.ts +1116 -1
  42. package/openapi/soha-api.json +2497 -302
  43. package/openapi/soha-api.yaml +732 -3
  44. package/openapi/spec_generated.go +3 -3
  45. package/openapi/spec_test.go +34 -0
  46. package/package.json +1 -1
  47. package/resource/agent_access.go +12 -0
  48. package/resource/agent_profiles.go +62 -0
  49. package/resource/agent_profiles_test.go +36 -0
  50. package/resource/kubernetes_kinds.go +73 -0
  51. package/resource/kubernetes_kinds_test.go +38 -0
  52. package/resource/models.go +23 -14
  53. package/resource/network_topology.go +166 -0
  54. package/resource/network_topology_projection.go +208 -0
  55. package/resource/network_topology_projection_test.go +53 -0
  56. package/resource/network_topology_test.go +51 -0
  57. package/resource/network_topology_validation.go +29 -0
  58. package/resource/node_drain.go +34 -0
  59. package/resource/resource_monitoring.go +99 -0
  60. package/resource/runtime/network_topology.go +232 -0
  61. package/resource/runtime/network_topology_test.go +62 -0
  62. package/resource/runtime/node_drain.go +124 -0
  63. package/resource/runtime/node_drain_test.go +95 -0
  64. package/resource/runtime/resource_edit.go +128 -0
  65. package/resource/runtime/resource_edit_test.go +183 -0
  66. package/resource/runtime/resource_monitoring.go +243 -0
  67. package/resource/runtime/resource_monitoring_test.go +88 -0
@@ -1,7 +1,7 @@
1
1
  openapi: 3.1.0
2
2
  info:
3
3
  title: Soha API
4
- version: 0.1.24
4
+ version: 0.1.25
5
5
  description: >
6
6
  Public OpenSoha core API contract. This first contract focuses on stable
7
7
  cross-repository boundaries: auth, health, runner-facing control-plane
@@ -10086,6 +10086,36 @@ paths:
10086
10086
  "403": { $ref: "#/components/responses/Error" }
10087
10087
  "404": { $ref: "#/components/responses/Error" }
10088
10088
  "503": { $ref: "#/components/responses/Error" }
10089
+ /clusters/{clusterID}/resource-monitoring:
10090
+ get:
10091
+ tags: [Platform]
10092
+ operationId: getKubernetesResourceMonitoring
10093
+ description: Fixed bounded monitoring templates. The selected view requires its exact permission plus cluster-wide nodes.view. Raw PromQL is never accepted. Current snapshots and historical series have separate observation times.
10094
+ x-soha-permissions:
10095
+ mode: all
10096
+ keys: [platform.nodes.view]
10097
+ byQuery:
10098
+ view:
10099
+ overview: platform.resource-monitoring.overview.view
10100
+ cpu: platform.resource-monitoring.cpu.view
10101
+ memory: platform.resource-monitoring.memory.view
10102
+ conntrack: platform.resource-monitoring.conntrack.view
10103
+ pods: platform.resource-monitoring.pods.view
10104
+ x-soha-implementation-status: implemented
10105
+ parameters:
10106
+ - { $ref: "#/components/parameters/ClusterID" }
10107
+ - { name: view, in: query, required: true, schema: { $ref: "#/components/schemas/ResourceMonitoringViewName" } }
10108
+ - { name: node, in: query, schema: { type: string, maxLength: 253 } }
10109
+ - { name: from, in: query, schema: { type: string, format: date-time } }
10110
+ - { name: to, in: query, schema: { type: string, format: date-time } }
10111
+ - { name: rangeMinutes, in: query, schema: { type: integer, minimum: 1, maximum: 1440, default: 60 } }
10112
+ - { name: stepSeconds, in: query, schema: { type: integer, minimum: 15, maximum: 3600, default: 60 } }
10113
+ responses:
10114
+ "200": { description: Per-panel quality and bounded node series., content: { application/json: { schema: { $ref: "#/components/schemas/ResourceMonitoringEnvelope" } } } }
10115
+ "400": { $ref: "#/components/responses/Error" }
10116
+ "403": { $ref: "#/components/responses/Error" }
10117
+ "404": { $ref: "#/components/responses/Error" }
10118
+ "503": { $ref: "#/components/responses/Error" }
10089
10119
  /clusters/{clusterID}/network/topology:
10090
10120
  get:
10091
10121
  tags: [Platform]
@@ -10097,7 +10127,7 @@ paths:
10097
10127
  x-soha-implementation-status: implemented
10098
10128
  parameters: [{ $ref: "#/components/parameters/ClusterID" }, { $ref: "#/components/parameters/KubernetesNamespaceQuery" }]
10099
10129
  responses:
10100
- "200": { description: Resolved ingress and Gateway API topology for the selected scope., content: { application/json: { schema: { $ref: "#/components/schemas/KubernetesNetworkTopologyEnvelope" } } } }
10130
+ "200": { description: "Bounded permission-filtered Kubernetes, Gateway API, Traefik and APISIX topology, with per-source coverage and explicit unresolved relationships.", content: { application/json: { schema: { $ref: "#/components/schemas/KubernetesNetworkTopologyEnvelope" } } } }
10101
10131
  "403": { $ref: "#/components/responses/Error" }
10102
10132
  "404": { $ref: "#/components/responses/Error" }
10103
10133
  "503": { $ref: "#/components/responses/Error" }
@@ -19764,6 +19794,12 @@ paths:
19764
19794
  tags:
19765
19795
  - Platform
19766
19796
  operationId: drainKubernetesNode
19797
+ description: >-
19798
+ Cordon the node and evict eligible pods. A 409 with node_drain_pdb_blocked,
19799
+ node_drain_eviction_blocked, node_drain_timeout, node_drain_canceled,
19800
+ node_drain_pod_selection or node_drain_failed means this drain did not complete.
19801
+ Inspect current node schedulability and remaining pods before retrying or
19802
+ explicitly restoring scheduling. Transport failure leaves the outcome unknown.
19767
19803
  x-soha-permissions:
19768
19804
  mode: all
19769
19805
  keys:
@@ -20027,6 +20063,458 @@ paths:
20027
20063
  $ref: "#/components/responses/Error"
20028
20064
  "503":
20029
20065
  $ref: "#/components/responses/Error"
20066
+ /clusters/{clusterID}/network/httproutes/{name}:
20067
+ delete:
20068
+ tags: [Platform]
20069
+ operationId: deleteKubernetesHTTPRoute
20070
+ x-soha-permissions:
20071
+ mode: all
20072
+ keys: [platform.network.http-routes.delete]
20073
+ x-soha-implementation-status: implemented
20074
+ parameters:
20075
+ - $ref: "#/components/parameters/ClusterID"
20076
+ - $ref: "#/components/parameters/KubernetesResourceName"
20077
+ - $ref: "#/components/parameters/KubernetesNamespaceQuery"
20078
+ responses:
20079
+ "204": { description: Resource deleted. }
20080
+ "400": { $ref: "#/components/responses/Error" }
20081
+ "403": { $ref: "#/components/responses/Error" }
20082
+ "404": { $ref: "#/components/responses/Error" }
20083
+ "409": { $ref: "#/components/responses/Error" }
20084
+ "503": { $ref: "#/components/responses/Error" }
20085
+ /clusters/{clusterID}/network/httproutes/{name}/yaml:
20086
+ get:
20087
+ tags: [Platform]
20088
+ operationId: getKubernetesHTTPRouteYaml
20089
+ x-soha-permissions:
20090
+ mode: all
20091
+ keys: [platform.network.http-routes.view]
20092
+ x-soha-implementation-status: implemented
20093
+ parameters:
20094
+ - $ref: "#/components/parameters/ClusterID"
20095
+ - $ref: "#/components/parameters/KubernetesResourceName"
20096
+ - $ref: "#/components/parameters/KubernetesNamespaceQuery"
20097
+ responses:
20098
+ "200":
20099
+ description: Authorized Kubernetes resource YAML.
20100
+ content:
20101
+ application/json:
20102
+ schema:
20103
+ $ref: "#/components/schemas/KubernetesResourceYamlEnvelope"
20104
+ "400": { $ref: "#/components/responses/Error" }
20105
+ "403": { $ref: "#/components/responses/Error" }
20106
+ "404": { $ref: "#/components/responses/Error" }
20107
+ "409": { $ref: "#/components/responses/Error" }
20108
+ "503": { $ref: "#/components/responses/Error" }
20109
+ put:
20110
+ tags: [Platform]
20111
+ operationId: applyKubernetesHTTPRouteYaml
20112
+ x-soha-permissions:
20113
+ mode: all
20114
+ keys: [platform.network.http-routes.update]
20115
+ x-soha-implementation-status: implemented
20116
+ parameters:
20117
+ - $ref: "#/components/parameters/ClusterID"
20118
+ - $ref: "#/components/parameters/KubernetesResourceName"
20119
+ - $ref: "#/components/parameters/KubernetesNamespaceQuery"
20120
+ requestBody:
20121
+ required: true
20122
+ content:
20123
+ application/json:
20124
+ schema:
20125
+ $ref: "#/components/schemas/KubernetesResourceYamlInput"
20126
+ responses:
20127
+ "200":
20128
+ description: Authorized Kubernetes resource YAML.
20129
+ content:
20130
+ application/json:
20131
+ schema:
20132
+ $ref: "#/components/schemas/KubernetesResourceYamlEnvelope"
20133
+ "400": { $ref: "#/components/responses/Error" }
20134
+ "403": { $ref: "#/components/responses/Error" }
20135
+ "404": { $ref: "#/components/responses/Error" }
20136
+ "409": { $ref: "#/components/responses/Error" }
20137
+ "503": { $ref: "#/components/responses/Error" }
20138
+ /clusters/{clusterID}/network/grpcroutes/{name}:
20139
+ delete:
20140
+ tags: [Platform]
20141
+ operationId: deleteKubernetesGRPCRoute
20142
+ x-soha-permissions:
20143
+ mode: all
20144
+ keys: [platform.network.grpc-routes.delete]
20145
+ x-soha-implementation-status: implemented
20146
+ parameters:
20147
+ - $ref: "#/components/parameters/ClusterID"
20148
+ - $ref: "#/components/parameters/KubernetesResourceName"
20149
+ - $ref: "#/components/parameters/KubernetesNamespaceQuery"
20150
+ responses:
20151
+ "204": { description: Resource deleted. }
20152
+ "400": { $ref: "#/components/responses/Error" }
20153
+ "403": { $ref: "#/components/responses/Error" }
20154
+ "404": { $ref: "#/components/responses/Error" }
20155
+ "409": { $ref: "#/components/responses/Error" }
20156
+ "503": { $ref: "#/components/responses/Error" }
20157
+ /clusters/{clusterID}/network/grpcroutes/{name}/yaml:
20158
+ get:
20159
+ tags: [Platform]
20160
+ operationId: getKubernetesGRPCRouteYaml
20161
+ x-soha-permissions:
20162
+ mode: all
20163
+ keys: [platform.network.grpc-routes.view]
20164
+ x-soha-implementation-status: implemented
20165
+ parameters:
20166
+ - $ref: "#/components/parameters/ClusterID"
20167
+ - $ref: "#/components/parameters/KubernetesResourceName"
20168
+ - $ref: "#/components/parameters/KubernetesNamespaceQuery"
20169
+ responses:
20170
+ "200":
20171
+ description: Authorized Kubernetes resource YAML.
20172
+ content:
20173
+ application/json:
20174
+ schema:
20175
+ $ref: "#/components/schemas/KubernetesResourceYamlEnvelope"
20176
+ "400": { $ref: "#/components/responses/Error" }
20177
+ "403": { $ref: "#/components/responses/Error" }
20178
+ "404": { $ref: "#/components/responses/Error" }
20179
+ "409": { $ref: "#/components/responses/Error" }
20180
+ "503": { $ref: "#/components/responses/Error" }
20181
+ put:
20182
+ tags: [Platform]
20183
+ operationId: applyKubernetesGRPCRouteYaml
20184
+ x-soha-permissions:
20185
+ mode: all
20186
+ keys: [platform.network.grpc-routes.update]
20187
+ x-soha-implementation-status: implemented
20188
+ parameters:
20189
+ - $ref: "#/components/parameters/ClusterID"
20190
+ - $ref: "#/components/parameters/KubernetesResourceName"
20191
+ - $ref: "#/components/parameters/KubernetesNamespaceQuery"
20192
+ requestBody:
20193
+ required: true
20194
+ content:
20195
+ application/json:
20196
+ schema:
20197
+ $ref: "#/components/schemas/KubernetesResourceYamlInput"
20198
+ responses:
20199
+ "200":
20200
+ description: Authorized Kubernetes resource YAML.
20201
+ content:
20202
+ application/json:
20203
+ schema:
20204
+ $ref: "#/components/schemas/KubernetesResourceYamlEnvelope"
20205
+ "400": { $ref: "#/components/responses/Error" }
20206
+ "403": { $ref: "#/components/responses/Error" }
20207
+ "404": { $ref: "#/components/responses/Error" }
20208
+ "409": { $ref: "#/components/responses/Error" }
20209
+ "503": { $ref: "#/components/responses/Error" }
20210
+ /clusters/{clusterID}/network/backendtlspolicies/{name}:
20211
+ delete:
20212
+ tags: [Platform]
20213
+ operationId: deleteKubernetesBackendTLSPolicy
20214
+ x-soha-permissions:
20215
+ mode: all
20216
+ keys: [platform.network.backend-tls-policies.delete]
20217
+ x-soha-implementation-status: implemented
20218
+ parameters:
20219
+ - $ref: "#/components/parameters/ClusterID"
20220
+ - $ref: "#/components/parameters/KubernetesResourceName"
20221
+ - $ref: "#/components/parameters/KubernetesNamespaceQuery"
20222
+ responses:
20223
+ "204": { description: Resource deleted. }
20224
+ "400": { $ref: "#/components/responses/Error" }
20225
+ "403": { $ref: "#/components/responses/Error" }
20226
+ "404": { $ref: "#/components/responses/Error" }
20227
+ "409": { $ref: "#/components/responses/Error" }
20228
+ "503": { $ref: "#/components/responses/Error" }
20229
+ /clusters/{clusterID}/network/backendtlspolicies/{name}/yaml:
20230
+ get:
20231
+ tags: [Platform]
20232
+ operationId: getKubernetesBackendTLSPolicyYaml
20233
+ x-soha-permissions:
20234
+ mode: all
20235
+ keys: [platform.network.backend-tls-policies.view]
20236
+ x-soha-implementation-status: implemented
20237
+ parameters:
20238
+ - $ref: "#/components/parameters/ClusterID"
20239
+ - $ref: "#/components/parameters/KubernetesResourceName"
20240
+ - $ref: "#/components/parameters/KubernetesNamespaceQuery"
20241
+ responses:
20242
+ "200":
20243
+ description: Authorized Kubernetes resource YAML.
20244
+ content:
20245
+ application/json:
20246
+ schema:
20247
+ $ref: "#/components/schemas/KubernetesResourceYamlEnvelope"
20248
+ "400": { $ref: "#/components/responses/Error" }
20249
+ "403": { $ref: "#/components/responses/Error" }
20250
+ "404": { $ref: "#/components/responses/Error" }
20251
+ "409": { $ref: "#/components/responses/Error" }
20252
+ "503": { $ref: "#/components/responses/Error" }
20253
+ put:
20254
+ tags: [Platform]
20255
+ operationId: applyKubernetesBackendTLSPolicyYaml
20256
+ x-soha-permissions:
20257
+ mode: all
20258
+ keys: [platform.network.backend-tls-policies.update]
20259
+ x-soha-implementation-status: implemented
20260
+ parameters:
20261
+ - $ref: "#/components/parameters/ClusterID"
20262
+ - $ref: "#/components/parameters/KubernetesResourceName"
20263
+ - $ref: "#/components/parameters/KubernetesNamespaceQuery"
20264
+ requestBody:
20265
+ required: true
20266
+ content:
20267
+ application/json:
20268
+ schema:
20269
+ $ref: "#/components/schemas/KubernetesResourceYamlInput"
20270
+ responses:
20271
+ "200":
20272
+ description: Authorized Kubernetes resource YAML.
20273
+ content:
20274
+ application/json:
20275
+ schema:
20276
+ $ref: "#/components/schemas/KubernetesResourceYamlEnvelope"
20277
+ "400": { $ref: "#/components/responses/Error" }
20278
+ "403": { $ref: "#/components/responses/Error" }
20279
+ "404": { $ref: "#/components/responses/Error" }
20280
+ "409": { $ref: "#/components/responses/Error" }
20281
+ "503": { $ref: "#/components/responses/Error" }
20282
+ /clusters/{clusterID}/network/referencegrants/{name}:
20283
+ delete:
20284
+ tags: [Platform]
20285
+ operationId: deleteKubernetesReferenceGrant
20286
+ x-soha-permissions:
20287
+ mode: all
20288
+ keys: [platform.network.reference-grants.delete]
20289
+ x-soha-implementation-status: implemented
20290
+ parameters:
20291
+ - $ref: "#/components/parameters/ClusterID"
20292
+ - $ref: "#/components/parameters/KubernetesResourceName"
20293
+ - $ref: "#/components/parameters/KubernetesNamespaceQuery"
20294
+ responses:
20295
+ "204": { description: Resource deleted. }
20296
+ "400": { $ref: "#/components/responses/Error" }
20297
+ "403": { $ref: "#/components/responses/Error" }
20298
+ "404": { $ref: "#/components/responses/Error" }
20299
+ "409": { $ref: "#/components/responses/Error" }
20300
+ "503": { $ref: "#/components/responses/Error" }
20301
+ /clusters/{clusterID}/network/referencegrants/{name}/yaml:
20302
+ get:
20303
+ tags: [Platform]
20304
+ operationId: getKubernetesReferenceGrantYaml
20305
+ x-soha-permissions:
20306
+ mode: all
20307
+ keys: [platform.network.reference-grants.view]
20308
+ x-soha-implementation-status: implemented
20309
+ parameters:
20310
+ - $ref: "#/components/parameters/ClusterID"
20311
+ - $ref: "#/components/parameters/KubernetesResourceName"
20312
+ - $ref: "#/components/parameters/KubernetesNamespaceQuery"
20313
+ responses:
20314
+ "200":
20315
+ description: Authorized Kubernetes resource YAML.
20316
+ content:
20317
+ application/json:
20318
+ schema:
20319
+ $ref: "#/components/schemas/KubernetesResourceYamlEnvelope"
20320
+ "400": { $ref: "#/components/responses/Error" }
20321
+ "403": { $ref: "#/components/responses/Error" }
20322
+ "404": { $ref: "#/components/responses/Error" }
20323
+ "409": { $ref: "#/components/responses/Error" }
20324
+ "503": { $ref: "#/components/responses/Error" }
20325
+ put:
20326
+ tags: [Platform]
20327
+ operationId: applyKubernetesReferenceGrantYaml
20328
+ x-soha-permissions:
20329
+ mode: all
20330
+ keys: [platform.network.reference-grants.update]
20331
+ x-soha-implementation-status: implemented
20332
+ parameters:
20333
+ - $ref: "#/components/parameters/ClusterID"
20334
+ - $ref: "#/components/parameters/KubernetesResourceName"
20335
+ - $ref: "#/components/parameters/KubernetesNamespaceQuery"
20336
+ requestBody:
20337
+ required: true
20338
+ content:
20339
+ application/json:
20340
+ schema:
20341
+ $ref: "#/components/schemas/KubernetesResourceYamlInput"
20342
+ responses:
20343
+ "200":
20344
+ description: Authorized Kubernetes resource YAML.
20345
+ content:
20346
+ application/json:
20347
+ schema:
20348
+ $ref: "#/components/schemas/KubernetesResourceYamlEnvelope"
20349
+ "400": { $ref: "#/components/responses/Error" }
20350
+ "403": { $ref: "#/components/responses/Error" }
20351
+ "404": { $ref: "#/components/responses/Error" }
20352
+ "409": { $ref: "#/components/responses/Error" }
20353
+ "503": { $ref: "#/components/responses/Error" }
20354
+ /clusters/{clusterID}/configuration/hpas/{name}:
20355
+ delete:
20356
+ tags: [Platform]
20357
+ operationId: deleteKubernetesHorizontalPodAutoscaler
20358
+ x-soha-permissions:
20359
+ mode: all
20360
+ keys: [platform.configuration.horizontal-pod-autoscalers.delete]
20361
+ x-soha-implementation-status: implemented
20362
+ parameters:
20363
+ - $ref: "#/components/parameters/ClusterID"
20364
+ - $ref: "#/components/parameters/KubernetesResourceName"
20365
+ - $ref: "#/components/parameters/KubernetesNamespaceQuery"
20366
+ responses:
20367
+ "204": { description: Resource deleted. }
20368
+ "400": { $ref: "#/components/responses/Error" }
20369
+ "403": { $ref: "#/components/responses/Error" }
20370
+ "404": { $ref: "#/components/responses/Error" }
20371
+ "409": { $ref: "#/components/responses/Error" }
20372
+ "503": { $ref: "#/components/responses/Error" }
20373
+ /clusters/{clusterID}/configuration/hpas/{name}/yaml:
20374
+ get:
20375
+ tags: [Platform]
20376
+ operationId: getKubernetesHorizontalPodAutoscalerYaml
20377
+ x-soha-permissions:
20378
+ mode: all
20379
+ keys: [platform.configuration.horizontal-pod-autoscalers.view]
20380
+ x-soha-implementation-status: implemented
20381
+ parameters:
20382
+ - $ref: "#/components/parameters/ClusterID"
20383
+ - $ref: "#/components/parameters/KubernetesResourceName"
20384
+ - $ref: "#/components/parameters/KubernetesNamespaceQuery"
20385
+ responses:
20386
+ "200":
20387
+ description: Authorized Kubernetes resource YAML.
20388
+ content:
20389
+ application/json:
20390
+ schema:
20391
+ $ref: "#/components/schemas/KubernetesResourceYamlEnvelope"
20392
+ "400": { $ref: "#/components/responses/Error" }
20393
+ "403": { $ref: "#/components/responses/Error" }
20394
+ "404": { $ref: "#/components/responses/Error" }
20395
+ "409": { $ref: "#/components/responses/Error" }
20396
+ "503": { $ref: "#/components/responses/Error" }
20397
+ put:
20398
+ tags: [Platform]
20399
+ operationId: applyKubernetesHorizontalPodAutoscalerYaml
20400
+ x-soha-permissions:
20401
+ mode: all
20402
+ keys: [platform.configuration.horizontal-pod-autoscalers.update]
20403
+ x-soha-implementation-status: implemented
20404
+ parameters:
20405
+ - $ref: "#/components/parameters/ClusterID"
20406
+ - $ref: "#/components/parameters/KubernetesResourceName"
20407
+ - $ref: "#/components/parameters/KubernetesNamespaceQuery"
20408
+ requestBody:
20409
+ required: true
20410
+ content:
20411
+ application/json:
20412
+ schema:
20413
+ $ref: "#/components/schemas/KubernetesResourceYamlInput"
20414
+ responses:
20415
+ "200":
20416
+ description: Authorized Kubernetes resource YAML.
20417
+ content:
20418
+ application/json:
20419
+ schema:
20420
+ $ref: "#/components/schemas/KubernetesResourceYamlEnvelope"
20421
+ "400": { $ref: "#/components/responses/Error" }
20422
+ "403": { $ref: "#/components/responses/Error" }
20423
+ "404": { $ref: "#/components/responses/Error" }
20424
+ "409": { $ref: "#/components/responses/Error" }
20425
+ "503": { $ref: "#/components/responses/Error" }
20426
+ /clusters/{clusterID}/configuration/poddisruptionbudgets/{name}:
20427
+ delete:
20428
+ tags: [Platform]
20429
+ operationId: deleteKubernetesPodDisruptionBudget
20430
+ x-soha-permissions:
20431
+ mode: all
20432
+ keys: [platform.configuration.pod-disruption-budgets.delete]
20433
+ x-soha-implementation-status: implemented
20434
+ parameters:
20435
+ - $ref: "#/components/parameters/ClusterID"
20436
+ - $ref: "#/components/parameters/KubernetesResourceName"
20437
+ - $ref: "#/components/parameters/KubernetesNamespaceQuery"
20438
+ responses:
20439
+ "204": { description: Resource deleted. }
20440
+ "400": { $ref: "#/components/responses/Error" }
20441
+ "403": { $ref: "#/components/responses/Error" }
20442
+ "404": { $ref: "#/components/responses/Error" }
20443
+ "409": { $ref: "#/components/responses/Error" }
20444
+ "503": { $ref: "#/components/responses/Error" }
20445
+ /clusters/{clusterID}/configuration/poddisruptionbudgets/{name}/yaml:
20446
+ get:
20447
+ tags: [Platform]
20448
+ operationId: getKubernetesPodDisruptionBudgetYaml
20449
+ x-soha-permissions:
20450
+ mode: all
20451
+ keys: [platform.configuration.pod-disruption-budgets.view]
20452
+ x-soha-implementation-status: implemented
20453
+ parameters:
20454
+ - $ref: "#/components/parameters/ClusterID"
20455
+ - $ref: "#/components/parameters/KubernetesResourceName"
20456
+ - $ref: "#/components/parameters/KubernetesNamespaceQuery"
20457
+ responses:
20458
+ "200":
20459
+ description: Authorized Kubernetes resource YAML.
20460
+ content:
20461
+ application/json:
20462
+ schema:
20463
+ $ref: "#/components/schemas/KubernetesResourceYamlEnvelope"
20464
+ "400": { $ref: "#/components/responses/Error" }
20465
+ "403": { $ref: "#/components/responses/Error" }
20466
+ "404": { $ref: "#/components/responses/Error" }
20467
+ "409": { $ref: "#/components/responses/Error" }
20468
+ "503": { $ref: "#/components/responses/Error" }
20469
+ put:
20470
+ tags: [Platform]
20471
+ operationId: applyKubernetesPodDisruptionBudgetYaml
20472
+ x-soha-permissions:
20473
+ mode: all
20474
+ keys: [platform.configuration.pod-disruption-budgets.update]
20475
+ x-soha-implementation-status: implemented
20476
+ parameters:
20477
+ - $ref: "#/components/parameters/ClusterID"
20478
+ - $ref: "#/components/parameters/KubernetesResourceName"
20479
+ - $ref: "#/components/parameters/KubernetesNamespaceQuery"
20480
+ requestBody:
20481
+ required: true
20482
+ content:
20483
+ application/json:
20484
+ schema:
20485
+ $ref: "#/components/schemas/KubernetesResourceYamlInput"
20486
+ responses:
20487
+ "200":
20488
+ description: Authorized Kubernetes resource YAML.
20489
+ content:
20490
+ application/json:
20491
+ schema:
20492
+ $ref: "#/components/schemas/KubernetesResourceYamlEnvelope"
20493
+ "400": { $ref: "#/components/responses/Error" }
20494
+ "403": { $ref: "#/components/responses/Error" }
20495
+ "404": { $ref: "#/components/responses/Error" }
20496
+ "409": { $ref: "#/components/responses/Error" }
20497
+ "503": { $ref: "#/components/responses/Error" }
20498
+ /clusters/{clusterID}/workloads/replicationcontrollers/{name}:
20499
+ delete:
20500
+ tags: [Platform]
20501
+ operationId: deleteKubernetesReplicationController
20502
+ x-soha-permissions:
20503
+ mode: all
20504
+ keys: [platform.workloads.replication-controllers.delete]
20505
+ x-soha-implementation-status: implemented
20506
+ parameters:
20507
+ - $ref: "#/components/parameters/ClusterID"
20508
+ - $ref: "#/components/parameters/KubernetesResourceName"
20509
+ - $ref: "#/components/parameters/KubernetesNamespaceQuery"
20510
+ responses:
20511
+ "204": { description: Resource deleted. }
20512
+ "400": { $ref: "#/components/responses/Error" }
20513
+ "403": { $ref: "#/components/responses/Error" }
20514
+ "404": { $ref: "#/components/responses/Error" }
20515
+ "409": { $ref: "#/components/responses/Error" }
20516
+ "503": { $ref: "#/components/responses/Error" }
20517
+
20030
20518
  components:
20031
20519
  securitySchemes:
20032
20520
  bearerAuth:
@@ -20942,6 +21430,7 @@ components:
20942
21430
  schema:
20943
21431
  type: string
20944
21432
  enum: [default, bypass, read-only, refresh]
21433
+ x-enum-varnames: [CreateAIGatewayOpenAICompatibleProviderResponseParamsXSohaCacheModeDefault, CreateAIGatewayOpenAICompatibleProviderResponseParamsXSohaCacheModeBypass, CreateAIGatewayOpenAICompatibleProviderResponseParamsXSohaCacheModeReadOnly, CreateAIGatewayOpenAICompatibleProviderResponseParamsXSohaCacheModeRefresh]
20945
21434
  description: Optional relay cache behavior hint.
20946
21435
  headers:
20947
21436
  SohaRouteIDHeader:
@@ -27105,7 +27594,10 @@ components:
27105
27594
  type: object
27106
27595
  properties:
27107
27596
  publicModel: { type: string, maxLength: 200 }
27108
- reasoningEffort: { type: string, enum: [auto, low, medium, high] }
27597
+ reasoningEffort:
27598
+ type: string
27599
+ enum: [auto, low, medium, high]
27600
+ x-enum-varnames: [WorkbenchModelPreferencesReasoningEffortAuto, WorkbenchModelPreferencesReasoningEffortLow, WorkbenchModelPreferencesReasoningEffortMedium, WorkbenchModelPreferencesReasoningEffortHigh]
27109
27601
  additionalProperties: false
27110
27602
  WorkbenchModelOption:
27111
27603
  type: object
@@ -36979,6 +37471,10 @@ components:
36979
37471
  type: object
36980
37472
  required: [transport, syncStrategy, cacheStatus, cacheReady, connectionState]
36981
37473
  properties:
37474
+ actionChecks:
37475
+ type: array
37476
+ maxItems: 64
37477
+ items: { $ref: "#/components/schemas/KubernetesAgentActionCheck" }
36982
37478
  transport:
36983
37479
  type: string
36984
37480
  syncStrategy:
@@ -36999,6 +37495,22 @@ components:
36999
37495
  message:
37000
37496
  type: string
37001
37497
  additionalProperties: false
37498
+ KubernetesAgentActionCheck:
37499
+ type: object
37500
+ required: [action, implementation, configured, kubernetesRBAC]
37501
+ properties:
37502
+ action: { type: string }
37503
+ implementation: { type: string, enum: [supported, unsupported, unknown] }
37504
+ configured: { type: string, enum: [allowed, denied, unknown] }
37505
+ kubernetesRBAC: { type: string, enum: [allowed, denied, unknown, not_applicable] }
37506
+ checkedAt: { type: string, format: date-time }
37507
+ reasonCode: { type: string }
37508
+ scope: { type: string, enum: [cluster], x-enum-varnames: [KubernetesAgentActionCheckScopeCluster] }
37509
+ additionalProperties: false
37510
+ KubernetesAgentActionProfile:
37511
+ type: string
37512
+ enum: [legacy, workbench, read-only]
37513
+ description: Installation preset only. Legacy preserves existing permissions; selecting workbench or read-only requires regenerating and reviewing the installation manifest.
37002
37514
  KubernetesClusterConnectionDetail:
37003
37515
  type: object
37004
37516
  required: [mode, credentialType, sourceType, hasInlineKubeconfig, hasToken, usesInformerCache]
@@ -37021,6 +37533,7 @@ components:
37021
37533
  type: boolean
37022
37534
  usesInformerCache:
37023
37535
  type: boolean
37536
+ actionProfile: { $ref: "#/components/schemas/KubernetesAgentActionProfile" }
37024
37537
  customResourceRules:
37025
37538
  type: array
37026
37539
  maxItems: 50
@@ -37062,6 +37575,7 @@ components:
37062
37575
  prometheusClusterLabel: { type: string }
37063
37576
  grafanaBaseUrl: { type: string }
37064
37577
  prometheusTransport: { $ref: "#/components/schemas/KubernetesPrometheusTransport" }
37578
+ agentActionProfile: { $ref: "#/components/schemas/KubernetesAgentActionProfile" }
37065
37579
  agentCustomResourceRules:
37066
37580
  type: array
37067
37581
  maxItems: 50
@@ -37249,6 +37763,18 @@ components:
37249
37763
  type: string
37250
37764
  unschedulable:
37251
37765
  type: boolean
37766
+ taints:
37767
+ type: array
37768
+ nullable: true
37769
+ description: Current Node spec taints. Empty means none; null or absent means not reported.
37770
+ items:
37771
+ $ref: "#/components/schemas/KubernetesNodeTaint"
37772
+ conditions:
37773
+ type: array
37774
+ nullable: true
37775
+ description: Current Node conditions, independent of scheduling and drain operations.
37776
+ items:
37777
+ $ref: "#/components/schemas/KubernetesWorkloadCondition"
37252
37778
  roles:
37253
37779
  type: array
37254
37780
  items:
@@ -39689,6 +40215,193 @@ components:
39689
40215
  properties:
39690
40216
  data: { $ref: "#/components/schemas/KubernetesNetworkPolicyDetail" }
39691
40217
  additionalProperties: false
40218
+ KubernetesTopologyProvider:
40219
+ type: string
40220
+ enum: [kubernetes, gateway, traefik, apisix]
40221
+ x-enum-varnames: [KubernetesTopologyProviderKubernetes, KubernetesTopologyProviderGateway, KubernetesTopologyProviderTraefik, KubernetesTopologyProviderApisix]
40222
+ KubernetesTopologyResolution:
40223
+ type: string
40224
+ enum: [resolved, unresolved, not_found, not_visible, no_ready_endpoints, external, unsupported_fragment, unknown]
40225
+ x-enum-varnames: [KubernetesTopologyResolutionResolved, KubernetesTopologyResolutionUnresolved, KubernetesTopologyResolutionNotFound, KubernetesTopologyResolutionNotVisible, KubernetesTopologyResolutionNoReadyEndpoints, KubernetesTopologyResolutionExternal, KubernetesTopologyResolutionUnsupportedFragment, KubernetesTopologyResolutionUnknown]
40226
+ KubernetesTopologyProperty:
40227
+ type: object
40228
+ required: [name, value]
40229
+ properties:
40230
+ name: { type: string, maxLength: 64 }
40231
+ value: { type: string, maxLength: 1024 }
40232
+ additionalProperties: false
40233
+ KubernetesTopologyMatch:
40234
+ type: object
40235
+ required: [type]
40236
+ properties:
40237
+ type: { type: string, maxLength: 32 }
40238
+ name: { type: string, maxLength: 128 }
40239
+ operator: { type: string, maxLength: 32 }
40240
+ value: { type: string, maxLength: 1024 }
40241
+ additionalProperties: false
40242
+ KubernetesTopologyRule:
40243
+ type: object
40244
+ required: [index]
40245
+ properties:
40246
+ name: { type: string, maxLength: 253 }
40247
+ index: { type: integer, minimum: 0 }
40248
+ matchGroups:
40249
+ description: Groups are ORed; matches inside each group are ANDed. Opaque expressions remain a bounded summary and are marked unsupported_fragment.
40250
+ type: array
40251
+ maxItems: 64
40252
+ items:
40253
+ type: array
40254
+ maxItems: 64
40255
+ items: { $ref: "#/components/schemas/KubernetesTopologyMatch" }
40256
+ matchSummary: { type: string, maxLength: 2048 }
40257
+ priority: { type: integer, format: int64 }
40258
+ tlsMode: { type: string, maxLength: 64 }
40259
+ additionalProperties: false
40260
+ KubernetesTopologyCondition:
40261
+ type: object
40262
+ required: [type, status]
40263
+ properties:
40264
+ type: { type: string, maxLength: 128 }
40265
+ status: { type: string, maxLength: 32 }
40266
+ reason: { type: string, maxLength: 128 }
40267
+ observedGeneration: { type: integer, format: int64 }
40268
+ lastTransitionTime: { type: string, format: date-time }
40269
+ additionalProperties: false
40270
+ KubernetesTopologyGraphNode:
40271
+ type: object
40272
+ required: [id, type, label, provider, resolutionState]
40273
+ properties:
40274
+ id: { type: string, minLength: 1, maxLength: 2048 }
40275
+ type:
40276
+ type: string
40277
+ enum: [entry, rule, processor, backend-group, service, endpoint-group, pod, external]
40278
+ x-enum-varnames: [KubernetesTopologyGraphNodeTypeEntry, KubernetesTopologyGraphNodeTypeRule, KubernetesTopologyGraphNodeTypeProcessor, KubernetesTopologyGraphNodeTypeBackendGroup, KubernetesTopologyGraphNodeTypeService, KubernetesTopologyGraphNodeTypeEndpointGroup, KubernetesTopologyGraphNodeTypePod, KubernetesTopologyGraphNodeTypeExternal]
40279
+ label: { type: string, maxLength: 1024 }
40280
+ provider: { $ref: "#/components/schemas/KubernetesTopologyProvider" }
40281
+ protocol: { type: string, maxLength: 16 }
40282
+ resolutionState: { $ref: "#/components/schemas/KubernetesTopologyResolution" }
40283
+ resource: { $ref: "#/components/schemas/KubernetesResourceRef" }
40284
+ rule: { $ref: "#/components/schemas/KubernetesTopologyRule" }
40285
+ generation: { type: integer, format: int64 }
40286
+ properties:
40287
+ type: array
40288
+ maxItems: 64
40289
+ items: { $ref: "#/components/schemas/KubernetesTopologyProperty" }
40290
+ conditions:
40291
+ type: array
40292
+ maxItems: 64
40293
+ items: { $ref: "#/components/schemas/KubernetesTopologyCondition" }
40294
+ additionalProperties: false
40295
+ KubernetesTopologyGraphEdge:
40296
+ type: object
40297
+ required: [id, source, target, relation, resolutionState]
40298
+ properties:
40299
+ id: { type: string, minLength: 1, maxLength: 2048 }
40300
+ source: { type: string, minLength: 1, maxLength: 2048 }
40301
+ target: { type: string, minLength: 1, maxLength: 2048 }
40302
+ relation:
40303
+ type: string
40304
+ enum: [matches, processes, forwards, weights, mirrors, resolves, selects]
40305
+ x-enum-varnames: [KubernetesTopologyGraphEdgeRelationMatches, KubernetesTopologyGraphEdgeRelationProcesses, KubernetesTopologyGraphEdgeRelationForwards, KubernetesTopologyGraphEdgeRelationWeights, KubernetesTopologyGraphEdgeRelationMirrors, KubernetesTopologyGraphEdgeRelationResolves, KubernetesTopologyGraphEdgeRelationSelects]
40306
+ resolutionState: { $ref: "#/components/schemas/KubernetesTopologyResolution" }
40307
+ protocol: { type: string, maxLength: 16 }
40308
+ port: { type: string, maxLength: 64 }
40309
+ weight: { type: integer, format: int64, minimum: 0 }
40310
+ totalWeight: { type: integer, format: int64, minimum: 0 }
40311
+ mirrorPercent: { type: number, minimum: 0, maximum: 100 }
40312
+ ruleRef: { type: string, maxLength: 2048 }
40313
+ sourceRef: { $ref: "#/components/schemas/KubernetesResourceRef" }
40314
+ note: { type: string, maxLength: 2048 }
40315
+ additionalProperties: false
40316
+ KubernetesTopologyCoverage:
40317
+ type: object
40318
+ required: [provider, sourceId, state]
40319
+ properties:
40320
+ provider: { $ref: "#/components/schemas/KubernetesTopologyProvider" }
40321
+ sourceId: { type: string, maxLength: 128 }
40322
+ state:
40323
+ type: string
40324
+ enum: [available, not_installed, unsupported, denied, error, partial]
40325
+ x-enum-varnames: [KubernetesTopologyCoverageStateAvailable, KubernetesTopologyCoverageStateNotInstalled, KubernetesTopologyCoverageStateUnsupported, KubernetesTopologyCoverageStateDenied, KubernetesTopologyCoverageStateError, KubernetesTopologyCoverageStatePartial]
40326
+ namespace: { type: string, maxLength: 63 }
40327
+ supportedKinds:
40328
+ type: array
40329
+ maxItems: 32
40330
+ items: { type: string, maxLength: 128 }
40331
+ reasonCode: { type: string, maxLength: 128 }
40332
+ checkedAt: { type: string, format: date-time }
40333
+ observedAt: { type: string, format: date-time }
40334
+ truncated: { type: boolean }
40335
+ additionalProperties: false
40336
+ KubernetesTopologySourceQuery:
40337
+ type: object
40338
+ required: [sourceId]
40339
+ properties:
40340
+ sourceId:
40341
+ type: string
40342
+ enum: [kubernetes.services, kubernetes.pods, kubernetes.endpointslices, kubernetes.ingresses, kubernetes.ingressclasses, gateway.gateways, gateway.gatewayclasses, gateway.httproutes, gateway.grpcroutes, gateway.tcproutes, gateway.tlsroutes, gateway.udproutes, gateway.referencegrants, traefik.ingressroutes, traefik.ingressroutetcps, traefik.ingressrouteudps, traefik.traefikservices, traefik.middlewares, traefik.middlewaretcps, apisix.apisixroutes, apisix.apisixupstreams, apisix.apisixtls]
40343
+ x-enum-varnames: [KubernetesTopologySourceKubernetesServices, KubernetesTopologySourceKubernetesPods, KubernetesTopologySourceKubernetesEndpointslices, KubernetesTopologySourceKubernetesIngresses, KubernetesTopologySourceKubernetesIngressclasses, KubernetesTopologySourceGatewayGateways, KubernetesTopologySourceGatewayGatewayclasses, KubernetesTopologySourceGatewayHttproutes, KubernetesTopologySourceGatewayGrpcroutes, KubernetesTopologySourceGatewayTcproutes, KubernetesTopologySourceGatewayTlsroutes, KubernetesTopologySourceGatewayUdproutes, KubernetesTopologySourceGatewayReferencegrants, KubernetesTopologySourceTraefikIngressroutes, KubernetesTopologySourceTraefikIngressroutetcps, KubernetesTopologySourceTraefikIngressrouteudps, KubernetesTopologySourceTraefikTraefikservices, KubernetesTopologySourceTraefikMiddlewares, KubernetesTopologySourceTraefikMiddlewaretcps, KubernetesTopologySourceApisixApisixroutes, KubernetesTopologySourceApisixApisixupstreams, KubernetesTopologySourceApisixApisixtls]
40344
+ namespace: { type: string, maxLength: 63, pattern: '^$|^[a-z0-9]([a-z0-9-]*[a-z0-9])?$' }
40345
+ allOf:
40346
+ - if:
40347
+ properties:
40348
+ sourceId: { enum: [kubernetes.ingressclasses, gateway.gatewayclasses] }
40349
+ required: [sourceId]
40350
+ then:
40351
+ properties:
40352
+ namespace: { type: string, maxLength: 0 }
40353
+ additionalProperties: false
40354
+ KubernetesTopologySnapshotRequest:
40355
+ type: object
40356
+ required: [queries]
40357
+ properties:
40358
+ queries:
40359
+ type: array
40360
+ minItems: 1
40361
+ maxItems: 64
40362
+ uniqueItems: true
40363
+ items: { $ref: "#/components/schemas/KubernetesTopologySourceQuery" }
40364
+ additionalProperties: false
40365
+ KubernetesTopologySourceObject:
40366
+ type: object
40367
+ required: [resource, content]
40368
+ properties:
40369
+ resource: { $ref: "#/components/schemas/KubernetesResourceRef" }
40370
+ generation: { type: integer, format: int64 }
40371
+ content:
40372
+ type: string
40373
+ maxLength: 65536
40374
+ description: Fixed source-schema projection encoded as JSON. Unknown fields, raw annotations, Secret values, plugin configuration and credential material are removed before transport. This is not an original Kubernetes manifest.
40375
+ additionalProperties: false
40376
+ KubernetesTopologySourceResult:
40377
+ type: object
40378
+ required: [coverage, objects]
40379
+ properties:
40380
+ coverage: { $ref: "#/components/schemas/KubernetesTopologyCoverage" }
40381
+ objects:
40382
+ type: array
40383
+ maxItems: 200
40384
+ items: { $ref: "#/components/schemas/KubernetesTopologySourceObject" }
40385
+ additionalProperties: false
40386
+ KubernetesTopologySnapshot:
40387
+ type: object
40388
+ required: [version, sources]
40389
+ properties:
40390
+ version: { type: string, pattern: '^v1$' }
40391
+ sources:
40392
+ type: array
40393
+ maxItems: 64
40394
+ items: { $ref: "#/components/schemas/KubernetesTopologySourceResult" }
40395
+ additionalProperties: false
40396
+ ResourceMonitoringQuality: {"type":"string","enum":["valid","partial","stale","not_configured","not_collected","unsupported","denied","error","empty"],"x-enum-varnames":["ResourceMonitoringQualityValid","ResourceMonitoringQualityPartial","ResourceMonitoringQualityStale","ResourceMonitoringQualityNotConfigured","ResourceMonitoringQualityNotCollected","ResourceMonitoringQualityUnsupported","ResourceMonitoringQualityDenied","ResourceMonitoringQualityError","ResourceMonitoringQualityEmpty"]}
40397
+ ResourceMonitoringViewName: {"type":"string","enum":["overview","cpu","memory","conntrack","pods"],"x-enum-varnames":["ResourceMonitoringViewOverview","ResourceMonitoringViewCPU","ResourceMonitoringViewMemory","ResourceMonitoringViewConntrack","ResourceMonitoringViewPods"]}
40398
+ ResourceMonitoringQuantity: {"type":"object","additionalProperties":false,"required":["cpuCores","memoryBytes","podSlots"],"properties":{"cpuCores":{"type":"number","format":"double","nullable":true},"memoryBytes":{"type":"number","format":"double","nullable":true},"podSlots":{"type":"number","format":"double","nullable":true}}}
40399
+ ResourceMonitoringNode: {"type":"object","additionalProperties":false,"required":["nodeRef","ready","cordoned","memoryPressure","diskPressure","pidPressure","capacity","allocatable","requests","limits","cpuLimitsComplete","memoryLimitsComplete","boundPods","pendingPods","remainingPodSlots","overflowPodSlots","quality"],"properties":{"nodeRef":{"$ref":"#/components/schemas/KubernetesResourceRef"},"internalIP":{"type":"string"},"os":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"ready":{"type":"string"},"cordoned":{"type":"boolean"},"memoryPressure":{"type":"string"},"diskPressure":{"type":"string"},"pidPressure":{"type":"string"},"capacity":{"$ref":"#/components/schemas/ResourceMonitoringQuantity"},"allocatable":{"$ref":"#/components/schemas/ResourceMonitoringQuantity"},"requests":{"$ref":"#/components/schemas/ResourceMonitoringQuantity"},"limits":{"$ref":"#/components/schemas/ResourceMonitoringQuantity"},"cpuLimitsComplete":{"type":"boolean"},"memoryLimitsComplete":{"type":"boolean"},"boundPods":{"type":"number","format":"double","nullable":true},"pendingPods":{"type":"number","format":"double","nullable":true},"remainingPodSlots":{"type":"number","format":"double","nullable":true},"overflowPodSlots":{"type":"number","format":"double","nullable":true},"quality":{"$ref":"#/components/schemas/ResourceMonitoringQuality"},"observedAt":{"type":"string","format":"date-time"}}}
40400
+ ResourceMonitoringPoint: {"type":"object","additionalProperties":false,"required":["timestamp","value"],"properties":{"timestamp":{"type":"string","format":"date-time"},"value":{"type":"number","format":"double","nullable":true}}}
40401
+ ResourceMonitoringSeries: {"type":"object","additionalProperties":false,"required":["nodeRef","metricKey","unit","quality","source","latest","points"],"properties":{"nodeRef":{"$ref":"#/components/schemas/KubernetesResourceRef"},"metricKey":{"type":"string","maxLength":64},"unit":{"type":"string","enum":["cores","bytes","count","events/s","events","percent"],"x-enum-varnames":["ResourceMonitoringUnitCores","ResourceMonitoringUnitBytes","ResourceMonitoringUnitCount","ResourceMonitoringUnitEventsPerSecond","ResourceMonitoringUnitEvents","ResourceMonitoringUnitPercent"]},"quality":{"$ref":"#/components/schemas/ResourceMonitoringQuality"},"reasonCode":{"type":"string","maxLength":64},"source":{"type":"string"},"sampledAt":{"type":"string","format":"date-time"},"latest":{"type":"number","format":"double","nullable":true},"points":{"type":"array","maxItems":1440,"items":{"$ref":"#/components/schemas/ResourceMonitoringPoint"}}}}
40402
+ ResourceMonitoringPanel: {"type":"object","additionalProperties":false,"required":["key","label","unit","quality","series"],"properties":{"key":{"type":"string","maxLength":64},"label":{"type":"string"},"unit":{"type":"string"},"quality":{"$ref":"#/components/schemas/ResourceMonitoringQuality"},"reasonCode":{"type":"string","maxLength":64},"estimated":{"type":"boolean"},"windowSeconds":{"type":"integer","minimum":300,"maximum":3600},"series":{"type":"array","maxItems":500,"items":{"$ref":"#/components/schemas/ResourceMonitoringSeries"}}}}
40403
+ ResourceMonitoringView: {"type":"object","additionalProperties":false,"required":["clusterId","view","from","to","stepSeconds","generatedAt","snapshotQuality","unscheduledPendingPods","nodes","panels"],"properties":{"clusterId":{"type":"string"},"view":{"$ref":"#/components/schemas/ResourceMonitoringViewName"},"node":{"type":"string"},"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"},"stepSeconds":{"type":"integer","minimum":15,"maximum":3600},"generatedAt":{"type":"string","format":"date-time"},"snapshotObservedAt":{"type":"string","format":"date-time"},"snapshotQuality":{"$ref":"#/components/schemas/ResourceMonitoringQuality"},"unscheduledPendingPods":{"type":"number","format":"double","nullable":true},"nodes":{"type":"array","maxItems":500,"items":{"$ref":"#/components/schemas/ResourceMonitoringNode"}},"panels":{"type":"array","maxItems":32,"items":{"$ref":"#/components/schemas/ResourceMonitoringPanel"}},"truncated":{"type":"boolean"},"nodeOptions":{"type":"array","maxItems":500,"items":{"$ref":"#/components/schemas/KubernetesResourceRef"}}}}
40404
+ ResourceMonitoringEnvelope: {"type":"object","additionalProperties":false,"required":["data"],"properties":{"data":{"$ref":"#/components/schemas/ResourceMonitoringView"}}}
39692
40405
  KubernetesNetworkTopologySummary:
39693
40406
  type: object
39694
40407
  required: [entryCount, routeCount, serviceCount, missingServiceCount, backendPodCount, pendingRouteCount]
@@ -39737,6 +40450,21 @@ components:
39737
40450
  source: { type: string }
39738
40451
  generatedAt: { type: string }
39739
40452
  summary: { $ref: "#/components/schemas/KubernetesNetworkTopologySummary" }
40453
+ graphVersion: { type: string, pattern: '^v1$' }
40454
+ nodes:
40455
+ type: array
40456
+ maxItems: 500
40457
+ items: { $ref: "#/components/schemas/KubernetesTopologyGraphNode" }
40458
+ edges:
40459
+ type: array
40460
+ maxItems: 1000
40461
+ items: { $ref: "#/components/schemas/KubernetesTopologyGraphEdge" }
40462
+ coverage:
40463
+ type: array
40464
+ maxItems: 128
40465
+ items: { $ref: "#/components/schemas/KubernetesTopologyCoverage" }
40466
+ observedAt: { type: string, format: date-time }
40467
+ truncated: { type: boolean }
39740
40468
  traces:
39741
40469
  type: array
39742
40470
  items: { $ref: "#/components/schemas/KubernetesNetworkTopologyTrace" }
@@ -43187,6 +43915,7 @@ components:
43187
43915
  namespace: { type: string, minLength: 1 }
43188
43916
  scopeMode: { $ref: "#/components/schemas/KubernetesResourceScopeMode" }
43189
43917
  uid: { type: string }
43918
+ resourceVersion: { type: string }
43190
43919
  additionalProperties: false
43191
43920
  KubernetesResourceStreamEventType:
43192
43921
  type: string