@opensoha/contracts 0.1.27 → 0.1.29

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 (94) hide show
  1. package/COMPATIBILITY.md +4 -3
  2. package/README.md +8 -9
  3. package/compat/consumer-revisions.json +1 -1
  4. package/compat/json-schema-ecosystem-0.1.0.json +1 -1
  5. package/compat/openapi-loose-boundaries-0.1.0.json +1 -1
  6. package/fixtures/openapi/KubernetesClusterRegistrationRequest/invalid/metric-cluster-value-length.json +3 -0
  7. package/fixtures/openapi/KubernetesClusterRegistrationRequest/invalid/metric-cluster-value-type.json +3 -0
  8. package/fixtures/openapi/KubernetesClusterRegistrationRequest/valid/metric-cluster-alias.json +5 -0
  9. package/fixtures/openapi/KubernetesClusterRegistrationRequest/valid/metric-cluster-reset.json +3 -0
  10. package/fixtures/openapi/KubernetesHelmReleaseValuesUpdateInput/invalid/revision-overflow.json +4 -0
  11. package/fixtures/openapi/KubernetesHelmReleaseValuesUpdateInput/valid/legacy.json +3 -0
  12. package/fixtures/openapi/KubernetesHelmReleaseValuesUpdateInput/valid/observed-revision.json +4 -0
  13. package/fixtures/openapi/KubernetesJobDetail/invalid/execution-observation.json +23 -0
  14. package/fixtures/openapi/KubernetesJobDetail/valid/execution-observation.json +23 -0
  15. package/fixtures/openapi/KubernetesNode/invalid/labels.json +10 -0
  16. package/fixtures/openapi/KubernetesNode/valid/labels.json +11 -0
  17. package/fixtures/openapi/KubernetesPodListEnvelope/invalid/empty-uid.json +13 -0
  18. package/fixtures/openapi/KubernetesPodListEnvelope/invalid/invalid-container-state.json +20 -0
  19. package/fixtures/openapi/KubernetesPodListEnvelope/invalid/missing-container-ready.json +19 -0
  20. package/fixtures/openapi/KubernetesPodListEnvelope/valid/container-statuses.json +67 -0
  21. package/fixtures/openapi/KubernetesPodListEnvelope/valid/running-pod.json +1 -0
  22. package/fixtures/openapi/KubernetesPrometheusDetail/invalid/metric-cluster-value-type.json +4 -0
  23. package/fixtures/openapi/KubernetesPrometheusDetail/valid/metric-cluster-alias.json +5 -0
  24. package/fixtures/openapi/KubernetesResourceGraphEnvelope/invalid/network-edge-source-payload.json +73 -0
  25. package/fixtures/openapi/KubernetesResourceGraphEnvelope/valid/network-edge-facts.json +67 -0
  26. package/fixtures/openapi/KubernetesSecretCertificate/invalid/secret-data.json +1 -0
  27. package/fixtures/openapi/KubernetesSecretCertificate/invalid/status.json +1 -0
  28. package/fixtures/openapi/KubernetesSecretCertificate/valid/available.json +1 -0
  29. package/fixtures/openapi/KubernetesSecretCertificate/valid/missing.json +1 -0
  30. package/gen/go/sohaapi/client.go +1 -1
  31. package/gen/go/sohaapi/client_test.go +13 -0
  32. package/gen/go/sohaapi/kubernetes_workload_optional_test.go +40 -0
  33. package/gen/go/sohaapi/pod_status_compat_test.go +36 -0
  34. package/gen/go/sohaapi/types.go +421 -88
  35. package/gen/ts/sohaapi/index.ts +756 -4
  36. package/helmrelease/runtime/values_upgrade.go +78 -0
  37. package/helmrelease/runtime/values_upgrade_test.go +123 -0
  38. package/helmrelease/values_update.go +31 -0
  39. package/openapi/soha-api.json +1191 -14
  40. package/openapi/soha-api.yaml +588 -28
  41. package/openapi/spec_generated.go +3 -3
  42. package/package.json +1 -1
  43. package/resource/agent_profiles.go +9 -15
  44. package/resource/agent_profiles_test.go +9 -3
  45. package/resource/custom_graph_page.go +18 -0
  46. package/resource/models.go +102 -57
  47. package/resource/network_topology.go +22 -0
  48. package/resource/network_topology_projection.go +36 -22
  49. package/resource/network_topology_projection_test.go +4 -0
  50. package/resource/network_topology_test.go +20 -0
  51. package/resource/network_topology_validation.go +5 -0
  52. package/resource/observed_workload.go +18 -0
  53. package/resource/pod_status_test.go +22 -0
  54. package/resource/rbac_graph.go +4 -0
  55. package/resource/rollout_optional_test.go +33 -0
  56. package/resource/runtime/network_relationship_primitives.go +66 -0
  57. package/resource/runtime/network_relationship_primitives_test.go +147 -0
  58. package/resource/runtime/network_topology.go +17 -5
  59. package/resource/runtime/network_topology_builder.go +405 -0
  60. package/resource/runtime/network_topology_builder_backends.go +195 -0
  61. package/resource/runtime/network_topology_builder_gateway_l4_test.go +86 -0
  62. package/resource/runtime/network_topology_builder_ingress.go +302 -0
  63. package/resource/runtime/network_topology_builder_legacy.go +66 -0
  64. package/resource/runtime/network_topology_builder_providers.go +242 -0
  65. package/resource/runtime/network_topology_builder_test.go +186 -0
  66. package/resource/runtime/network_topology_declarations.go +329 -0
  67. package/resource/runtime/resource_edit.go +22 -0
  68. package/resource/runtime/resource_edit_test.go +32 -0
  69. package/resource/runtime/resource_graph_collect.go +325 -0
  70. package/resource/runtime/resource_graph_configuration.go +59 -0
  71. package/resource/runtime/resource_graph_configuration_collect.go +198 -0
  72. package/resource/runtime/resource_graph_configuration_test.go +470 -0
  73. package/resource/runtime/resource_graph_custom_page.go +159 -0
  74. package/resource/runtime/resource_graph_custom_root.go +132 -0
  75. package/resource/runtime/resource_graph_custom_root_test.go +197 -0
  76. package/resource/runtime/resource_graph_enrichment.go +417 -0
  77. package/resource/runtime/resource_graph_enrichment_hpa_test.go +117 -0
  78. package/resource/runtime/resource_graph_enrichment_test.go +201 -0
  79. package/resource/runtime/resource_graph_metadata.go +125 -0
  80. package/resource/runtime/resource_graph_metadata_test.go +204 -0
  81. package/resource/runtime/resource_graph_network.go +224 -0
  82. package/resource/runtime/resource_graph_network_collect.go +174 -0
  83. package/resource/runtime/resource_graph_network_collect_test.go +147 -0
  84. package/resource/runtime/resource_graph_network_test.go +342 -0
  85. package/resource/runtime/resource_graph_rbac.go +278 -0
  86. package/resource/runtime/resource_graph_rbac_test.go +372 -0
  87. package/resource/runtime/resource_graph_rules.go +834 -0
  88. package/resource/runtime/resource_graph_storage.go +144 -0
  89. package/resource/runtime/resource_graph_storage_collect.go +163 -0
  90. package/resource/runtime/resource_graph_storage_test.go +397 -0
  91. package/resource/runtime/resource_graph_test.go +627 -0
  92. package/resource/runtime/secret_certificate.go +44 -0
  93. package/resource/runtime/secret_certificate_test.go +87 -0
  94. package/resource/storage_graph.go +4 -0
@@ -1,7 +1,7 @@
1
1
  openapi: 3.1.0
2
2
  info:
3
3
  title: Soha API
4
- version: 0.1.27
4
+ version: 0.1.29
5
5
  description: >
6
6
  Public OpenSoha core API contract. This first contract focuses on stable cross-repository boundaries: auth, health, runner-facing control-plane callbacks, AI Gateway, and MCP capability discovery. Pod session WebSocket targets and their UID-aware ticket requirements are described separately in x-soha-websocket-paths to preserve HTTP client generation.
7
7
  servers:
@@ -11112,7 +11112,7 @@ paths:
11112
11112
  "503": { $ref: "#/components/responses/Error" }
11113
11113
  /clusters/{clusterID}/resources/graph:
11114
11114
  get:
11115
- tags: [ Platform ]
11115
+ tags: [Platform]
11116
11116
  operationId: getKubernetesResourceGraph
11117
11117
  x-soha-permissions:
11118
11118
  mode: resource
@@ -11128,6 +11128,14 @@ paths:
11128
11128
  in: query
11129
11129
  required: true
11130
11130
  schema: { type: string, minLength: 1 }
11131
+ - name: apiVersion
11132
+ in: query
11133
+ description: Exact served group/version for a CRD instance, or apiextensions.k8s.io/v1 for a CRD definition. Required together with resource for explicit CRD graphs.
11134
+ schema: { type: string, minLength: 1 }
11135
+ - name: resource
11136
+ in: query
11137
+ description: Exact CRD plural resource name. For a CRD definition use customresourcedefinitions.
11138
+ schema: { type: string, minLength: 1 }
11131
11139
  responses:
11132
11140
  "200": { description: Permission-filtered resource relationship graph and recent evidence., content: { application/json: { schema: { $ref: "#/components/schemas/KubernetesResourceGraphEnvelope" } } } }
11133
11141
  "400": { $ref: "#/components/responses/Error" }
@@ -20788,10 +20796,12 @@ paths:
20788
20796
  keys:
20789
20797
  - platform.pods.delete
20790
20798
  x-soha-implementation-status: implemented
20799
+ description: Request deletion of a Pod. With expectedUid, a same-name replacement is rejected and an Agent that cannot enforce the precondition returns 501.
20791
20800
  parameters:
20792
20801
  - $ref: "#/components/parameters/ClusterID"
20793
20802
  - $ref: "#/components/parameters/KubernetesPodName"
20794
20803
  - $ref: "#/components/parameters/KubernetesNamespaceQuery"
20804
+ - $ref: "#/components/parameters/KubernetesExpectedWorkloadUID"
20795
20805
  responses:
20796
20806
  "204":
20797
20807
  description: Operation completed.
@@ -20803,6 +20813,8 @@ paths:
20803
20813
  $ref: "#/components/responses/Error"
20804
20814
  "409":
20805
20815
  $ref: "#/components/responses/Error"
20816
+ "501":
20817
+ $ref: "#/components/responses/Error"
20806
20818
  "503":
20807
20819
  $ref: "#/components/responses/Error"
20808
20820
  /clusters/{clusterID}/workloads/cronjobs/{cronJobName}/suspend:
@@ -23069,6 +23081,373 @@ paths:
23069
23081
  "network_access.content_transfer_events.view"
23070
23082
  ]
23071
23083
  }
23084
+ /clusters/{clusterID}/workloads/deployments/{deploymentName}:
23085
+ delete:
23086
+ tags: [Platform]
23087
+ operationId: deleteKubernetesDeployment
23088
+ x-soha-permissions: { mode: all, keys: [platform.deployment.delete] }
23089
+ x-soha-implementation-status: implemented
23090
+ description: Request deletion of a Deployment. With expectedUid, a same-name replacement is rejected and an Agent that cannot enforce the precondition returns 501.
23091
+ parameters:
23092
+ - $ref: "#/components/parameters/ClusterID"
23093
+ - $ref: "#/components/parameters/KubernetesDeploymentName"
23094
+ - $ref: "#/components/parameters/KubernetesNamespaceQuery"
23095
+ - $ref: "#/components/parameters/KubernetesExpectedWorkloadUID"
23096
+ responses:
23097
+ "204": { description: Deletion requested. }
23098
+ "400": { $ref: "#/components/responses/Error" }
23099
+ "403": { $ref: "#/components/responses/Error" }
23100
+ "404": { $ref: "#/components/responses/Error" }
23101
+ "409": { $ref: "#/components/responses/Error" }
23102
+ "501": { $ref: "#/components/responses/Error" }
23103
+ "503": { $ref: "#/components/responses/Error" }
23104
+ /clusters/{clusterID}/workloads/statefulsets/{statefulSetName}/rollouts:
23105
+ get:
23106
+ tags: [Platform]
23107
+ operationId: listKubernetesStatefulSetRollouts
23108
+ x-soha-permissions:
23109
+ mode: all
23110
+ keys:
23111
+ - platform.workloads.stateful-sets.view
23112
+ x-soha-implementation-status: implemented
23113
+ description: Retained ControllerRevisions controlled by the selected StatefulSet UID. Replica counts include only Pods controlled by that StatefulSet and referencing the revision, not replicas inferred from the template.
23114
+ parameters:
23115
+ - $ref: "#/components/parameters/ClusterID"
23116
+ - $ref: "#/components/parameters/KubernetesStatefulSetName"
23117
+ - $ref: "#/components/parameters/KubernetesNamespaceDefaultQuery"
23118
+ responses:
23119
+ "200":
23120
+ description: Retained StatefulSet ControllerRevisions. Revision is the native ControllerRevision sequence, name is the ControllerRevision name, and zero replicas means no currently observed owned Pod references this revision. This is not a permanent change archive.
23121
+ content:
23122
+ application/json:
23123
+ schema:
23124
+ $ref: "#/components/schemas/KubernetesDeploymentRolloutListEnvelope"
23125
+ "403": { $ref: "#/components/responses/Error" }
23126
+ "404": { $ref: "#/components/responses/Error" }
23127
+ "503": { $ref: "#/components/responses/Error" }
23128
+ /clusters/{clusterID}/workloads/statefulsets/{statefulSetName}/rollouts/{revisionName}/yaml:
23129
+ get:
23130
+ tags: [Platform]
23131
+ operationId: getKubernetesStatefulSetRevisionYaml
23132
+ x-soha-permissions:
23133
+ mode: all
23134
+ keys:
23135
+ - platform.workloads.stateful-sets.view
23136
+ x-soha-implementation-status: implemented
23137
+ description: Read a retained ControllerRevision only when its controlling owner UID matches the selected StatefulSet in the same namespace. Does not resolve Secret references. Inline template values may be sensitive, as in workload YAML.
23138
+ parameters:
23139
+ - $ref: "#/components/parameters/ClusterID"
23140
+ - $ref: "#/components/parameters/KubernetesStatefulSetName"
23141
+ - $ref: "#/components/parameters/KubernetesNamespaceDefaultQuery"
23142
+ - name: revisionName
23143
+ in: path
23144
+ required: true
23145
+ schema: { type: string, minLength: 1 }
23146
+ responses:
23147
+ "200":
23148
+ description: Authorized ControllerRevision YAML; it is a stored template patch, not a live StatefulSet object.
23149
+ content:
23150
+ application/json:
23151
+ schema:
23152
+ $ref: "#/components/schemas/KubernetesResourceYamlEnvelope"
23153
+ "403": { $ref: "#/components/responses/Error" }
23154
+ "404": { $ref: "#/components/responses/Error" }
23155
+ "503": { $ref: "#/components/responses/Error" }
23156
+ /clusters/{clusterID}/workloads/daemonsets/{daemonSetName}/rollouts:
23157
+ get:
23158
+ tags: [Platform]
23159
+ operationId: listKubernetesDaemonSetRollouts
23160
+ x-soha-permissions:
23161
+ mode: all
23162
+ keys:
23163
+ - platform.workloads.daemon-sets.view
23164
+ x-soha-implementation-status: implemented
23165
+ description: Retained ControllerRevisions controlled by the selected DaemonSet UID. Replica counts include only Pods controlled by that DaemonSet and referencing the ControllerRevision hash label, not replicas inferred from template names. podRevisionHash is the observed history label; matchesCurrentTemplate compares the native stored patch with the selected DaemonSet template and does not imply every Pod is updated.
23166
+ parameters:
23167
+ - $ref: "#/components/parameters/ClusterID"
23168
+ - $ref: "#/components/parameters/KubernetesDaemonSetName"
23169
+ - $ref: "#/components/parameters/KubernetesNamespaceDefaultQuery"
23170
+ responses:
23171
+ "200":
23172
+ description: Retained DaemonSet ControllerRevisions. Revision is the native ControllerRevision sequence, name is the ControllerRevision name, and zero replicas means no currently observed owned Pod references this revision. This is not a permanent change archive.
23173
+ content:
23174
+ application/json:
23175
+ schema:
23176
+ $ref: "#/components/schemas/KubernetesDeploymentRolloutListEnvelope"
23177
+ "403": { $ref: "#/components/responses/Error" }
23178
+ "404": { $ref: "#/components/responses/Error" }
23179
+ "503": { $ref: "#/components/responses/Error" }
23180
+ /clusters/{clusterID}/workloads/daemonsets/{daemonSetName}/rollouts/{revisionName}/yaml:
23181
+ get:
23182
+ tags: [Platform]
23183
+ operationId: getKubernetesDaemonSetRevisionYaml
23184
+ x-soha-permissions:
23185
+ mode: all
23186
+ keys:
23187
+ - platform.workloads.daemon-sets.view
23188
+ x-soha-implementation-status: implemented
23189
+ description: Read a retained ControllerRevision only when its controlling owner UID matches the selected DaemonSet in the same namespace. Does not resolve Secret references. Inline template values may be sensitive, as in workload YAML.
23190
+ parameters:
23191
+ - $ref: "#/components/parameters/ClusterID"
23192
+ - $ref: "#/components/parameters/KubernetesDaemonSetName"
23193
+ - $ref: "#/components/parameters/KubernetesNamespaceDefaultQuery"
23194
+ - name: revisionName
23195
+ in: path
23196
+ required: true
23197
+ schema: { type: string, minLength: 1 }
23198
+ responses:
23199
+ "200":
23200
+ description: Authorized ControllerRevision YAML; it is a stored template patch, not a live DaemonSet object.
23201
+ content:
23202
+ application/json:
23203
+ schema:
23204
+ $ref: "#/components/schemas/KubernetesResourceYamlEnvelope"
23205
+ "403": { $ref: "#/components/responses/Error" }
23206
+ "404": { $ref: "#/components/responses/Error" }
23207
+ "503": { $ref: "#/components/responses/Error" }
23208
+ /clusters/{clusterID}/workloads/jobs/{jobName}/metrics:
23209
+ get:
23210
+ tags: [Platform]
23211
+ operationId: getKubernetesJobMetrics
23212
+ x-soha-permissions:
23213
+ mode: all
23214
+ keys:
23215
+ - platform.workloads.jobs.view
23216
+ x-soha-implementation-status: implemented
23217
+ parameters:
23218
+ - $ref: "#/components/parameters/ClusterID"
23219
+ - $ref: "#/components/parameters/KubernetesJobName"
23220
+ - $ref: "#/components/parameters/KubernetesNamespaceDefaultQuery"
23221
+ - $ref: "#/components/parameters/KubernetesMetricsRangeMinutesQuery"
23222
+ - $ref: "#/components/parameters/KubernetesMetricsStepSecondsQuery"
23223
+ responses:
23224
+ "200":
23225
+ description: Prometheus metrics aggregated from Pods owned by the current Job UID in the selected namespace; retained Pods only, with explicit missing or unconfigured results.
23226
+ content:
23227
+ application/json:
23228
+ schema:
23229
+ $ref: "#/components/schemas/KubernetesResourceMetricsEnvelope"
23230
+ "400": { $ref: "#/components/responses/Error" }
23231
+ "403": { $ref: "#/components/responses/Error" }
23232
+ "404": { $ref: "#/components/responses/Error" }
23233
+ "503": { $ref: "#/components/responses/Error" }
23234
+ /clusters/{clusterID}/workloads/replicasets/{replicaSetName}/metrics:
23235
+ get:
23236
+ tags: [Platform]
23237
+ operationId: getKubernetesReplicaSetMetrics
23238
+ x-soha-permissions:
23239
+ mode: all
23240
+ keys:
23241
+ - platform.workloads.replica-sets.view
23242
+ x-soha-implementation-status: implemented
23243
+ parameters:
23244
+ - $ref: "#/components/parameters/ClusterID"
23245
+ - $ref: "#/components/parameters/KubernetesReplicaSetName"
23246
+ - $ref: "#/components/parameters/KubernetesNamespaceDefaultQuery"
23247
+ - $ref: "#/components/parameters/KubernetesMetricsRangeMinutesQuery"
23248
+ - $ref: "#/components/parameters/KubernetesMetricsStepSecondsQuery"
23249
+ responses:
23250
+ "200":
23251
+ description: Prometheus metrics aggregated from Pods owned by the current ReplicaSet UID in the selected namespace; retained Pods only, with explicit missing or unconfigured results.
23252
+ content:
23253
+ application/json:
23254
+ schema:
23255
+ $ref: "#/components/schemas/KubernetesResourceMetricsEnvelope"
23256
+ "400": { $ref: "#/components/responses/Error" }
23257
+ "403": { $ref: "#/components/responses/Error" }
23258
+ "404": { $ref: "#/components/responses/Error" }
23259
+ "503": { $ref: "#/components/responses/Error" }
23260
+ /clusters/{clusterID}/workloads/replicationcontrollers/{name}/metrics:
23261
+ get:
23262
+ tags: [Platform]
23263
+ operationId: getKubernetesReplicationControllerMetrics
23264
+ x-soha-permissions:
23265
+ mode: all
23266
+ keys:
23267
+ - platform.workloads.replication-controllers.view
23268
+ x-soha-implementation-status: implemented
23269
+ parameters:
23270
+ - $ref: "#/components/parameters/ClusterID"
23271
+ - $ref: "#/components/parameters/KubernetesResourceName"
23272
+ - $ref: "#/components/parameters/KubernetesNamespaceDefaultQuery"
23273
+ - $ref: "#/components/parameters/KubernetesMetricsRangeMinutesQuery"
23274
+ - $ref: "#/components/parameters/KubernetesMetricsStepSecondsQuery"
23275
+ responses:
23276
+ "200":
23277
+ description: Prometheus metrics aggregated from Pods owned by the current ReplicationController UID in the selected namespace; retained Pods only, with explicit missing or unconfigured results.
23278
+ content:
23279
+ application/json:
23280
+ schema:
23281
+ $ref: "#/components/schemas/KubernetesResourceMetricsEnvelope"
23282
+ "400": { $ref: "#/components/responses/Error" }
23283
+ "403": { $ref: "#/components/responses/Error" }
23284
+ "404": { $ref: "#/components/responses/Error" }
23285
+ "503": { $ref: "#/components/responses/Error" }
23286
+ /clusters/{clusterID}/helm/releases/{releaseName}/values:
23287
+ put:
23288
+ tags: [Platform]
23289
+ operationId: updateKubernetesHelmReleaseValues
23290
+ x-soha-permissions:
23291
+ mode: all
23292
+ keys:
23293
+ - platform.helm.releases.update
23294
+ x-soha-implementation-status: implemented
23295
+ parameters:
23296
+ - $ref: "#/components/parameters/ClusterID"
23297
+ - $ref: "#/components/parameters/KubernetesReleaseName"
23298
+ - name: namespace
23299
+ in: query
23300
+ required: true
23301
+ schema: { type: string, minLength: 1 }
23302
+ requestBody:
23303
+ required: true
23304
+ content: { application/json: { schema: { $ref: "#/components/schemas/KubernetesHelmReleaseValuesUpdateInput" } } }
23305
+ responses:
23306
+ "200": { description: Helm release values after upgrade., content: { application/json: { schema: { $ref: "#/components/schemas/KubernetesHelmReleaseValuesEnvelope" } } } }
23307
+ "400": { $ref: "#/components/responses/Error" }
23308
+ "403": { $ref: "#/components/responses/Error" }
23309
+ "404": { $ref: "#/components/responses/Error" }
23310
+ "409": { $ref: "#/components/responses/Error" }
23311
+ "501": { $ref: "#/components/responses/Error" }
23312
+ "502": { $ref: "#/components/responses/Error" }
23313
+ "503": { $ref: "#/components/responses/Error" }
23314
+ /clusters/{clusterID}/configuration/secrets/{name}/certificate:
23315
+ get:
23316
+ tags: [Platform]
23317
+ operationId: getKubernetesSecretCertificate
23318
+ description: Public metadata for the first tls.crt certificate of a TLS Secret. Requires resource-scoped Secret view; never returns certificate PEM, Secret data or private keys. Dates do not establish certificate trust, host matching or controller deployment.
23319
+ x-soha-permissions:
23320
+ mode: all
23321
+ keys: [platform.configuration.secrets.view]
23322
+ x-soha-implementation-status: implemented
23323
+ parameters:
23324
+ - $ref: "#/components/parameters/ClusterID"
23325
+ - $ref: "#/components/parameters/KubernetesResourceName"
23326
+ - name: namespace
23327
+ in: query
23328
+ required: true
23329
+ schema: { type: string, minLength: 1 }
23330
+ responses:
23331
+ "200":
23332
+ description: Public certificate metadata, including explicit missing or invalid certificate state.
23333
+ content:
23334
+ application/json:
23335
+ schema:
23336
+ $ref: "#/components/schemas/KubernetesSecretCertificateEnvelope"
23337
+ "400":
23338
+ $ref: "#/components/responses/Error"
23339
+ "403":
23340
+ $ref: "#/components/responses/Error"
23341
+ "404":
23342
+ $ref: "#/components/responses/Error"
23343
+ "503":
23344
+ $ref: "#/components/responses/Error"
23345
+ /clusters/{clusterID}/network/services/{serviceName}/yaml:
23346
+ put:
23347
+ tags: [Platform]
23348
+ operationId: applyKubernetesServiceYaml
23349
+ x-soha-permissions:
23350
+ mode: all
23351
+ keys:
23352
+ - platform.network.services.update
23353
+ x-soha-implementation-status: implemented
23354
+ parameters:
23355
+ - $ref: "#/components/parameters/ClusterID"
23356
+ - $ref: "#/components/parameters/KubernetesServiceName"
23357
+ - name: namespace
23358
+ in: query
23359
+ required: true
23360
+ schema: { type: string, minLength: 1 }
23361
+ requestBody:
23362
+ required: true
23363
+ content:
23364
+ application/json:
23365
+ schema:
23366
+ $ref: "#/components/schemas/KubernetesObservedResourceYamlInput"
23367
+ responses:
23368
+ "200":
23369
+ description: Updated Kubernetes resource YAML.
23370
+ content:
23371
+ application/json:
23372
+ schema:
23373
+ $ref: "#/components/schemas/KubernetesResourceYamlEnvelope"
23374
+ "400": { $ref: "#/components/responses/Error" }
23375
+ "403": { $ref: "#/components/responses/Error" }
23376
+ "404": { $ref: "#/components/responses/Error" }
23377
+ "409": { $ref: "#/components/responses/Error" }
23378
+ "501": { $ref: "#/components/responses/Error" }
23379
+ "503": { $ref: "#/components/responses/Error" }
23380
+ /clusters/{clusterID}/network/ingresses/{name}/yaml:
23381
+ put:
23382
+ tags: [Platform]
23383
+ operationId: applyKubernetesIngressYaml
23384
+ x-soha-permissions:
23385
+ mode: all
23386
+ keys:
23387
+ - platform.network.ingresses.update
23388
+ x-soha-implementation-status: implemented
23389
+ parameters:
23390
+ - $ref: "#/components/parameters/ClusterID"
23391
+ - $ref: "#/components/parameters/KubernetesResourceName"
23392
+ - name: namespace
23393
+ in: query
23394
+ required: true
23395
+ schema: { type: string, minLength: 1 }
23396
+ requestBody:
23397
+ required: true
23398
+ content:
23399
+ application/json:
23400
+ schema:
23401
+ $ref: "#/components/schemas/KubernetesObservedResourceYamlInput"
23402
+ responses:
23403
+ "200":
23404
+ description: Updated Kubernetes resource YAML.
23405
+ content:
23406
+ application/json:
23407
+ schema:
23408
+ $ref: "#/components/schemas/KubernetesResourceYamlEnvelope"
23409
+ "400": { $ref: "#/components/responses/Error" }
23410
+ "403": { $ref: "#/components/responses/Error" }
23411
+ "404": { $ref: "#/components/responses/Error" }
23412
+ "409": { $ref: "#/components/responses/Error" }
23413
+ "501": { $ref: "#/components/responses/Error" }
23414
+ "503": { $ref: "#/components/responses/Error" }
23415
+ /clusters/{clusterID}/configuration/secrets/{name}/yaml:
23416
+ put:
23417
+ tags: [Platform]
23418
+ operationId: applyKubernetesSecretYaml
23419
+ x-soha-permissions:
23420
+ mode: all
23421
+ keys:
23422
+ - platform.configuration.secret-data.view
23423
+ - platform.configuration.secrets.update
23424
+ x-soha-implementation-status: implemented
23425
+ parameters:
23426
+ - $ref: "#/components/parameters/ClusterID"
23427
+ - $ref: "#/components/parameters/KubernetesResourceName"
23428
+ - name: namespace
23429
+ in: query
23430
+ required: true
23431
+ schema: { type: string, minLength: 1 }
23432
+ requestBody:
23433
+ required: true
23434
+ content:
23435
+ application/json:
23436
+ schema:
23437
+ $ref: "#/components/schemas/KubernetesObservedResourceYamlInput"
23438
+ responses:
23439
+ "200":
23440
+ description: Updated Kubernetes resource YAML.
23441
+ content:
23442
+ application/json:
23443
+ schema:
23444
+ $ref: "#/components/schemas/KubernetesResourceYamlEnvelope"
23445
+ "400": { $ref: "#/components/responses/Error" }
23446
+ "403": { $ref: "#/components/responses/Error" }
23447
+ "404": { $ref: "#/components/responses/Error" }
23448
+ "409": { $ref: "#/components/responses/Error" }
23449
+ "501": { $ref: "#/components/responses/Error" }
23450
+ "503": { $ref: "#/components/responses/Error" }
23072
23451
  components:
23073
23452
  securitySchemes:
23074
23453
  networkControlMTLS:
@@ -23989,6 +24368,12 @@ components:
23989
24368
  enum: [ default, bypass, read-only, refresh ]
23990
24369
  x-enum-varnames: [ CreateAIGatewayOpenAICompatibleProviderResponseParamsXSohaCacheModeDefault, CreateAIGatewayOpenAICompatibleProviderResponseParamsXSohaCacheModeBypass, CreateAIGatewayOpenAICompatibleProviderResponseParamsXSohaCacheModeReadOnly, CreateAIGatewayOpenAICompatibleProviderResponseParamsXSohaCacheModeRefresh ]
23991
24370
  description: Optional relay cache behavior hint.
24371
+ KubernetesExpectedWorkloadUID:
24372
+ name: expectedUid
24373
+ in: query
24374
+ required: false
24375
+ description: Kubernetes UID observed in the workload list or detail. When supplied, deletion requires this identity and rejects a same-name replacement.
24376
+ schema: { type: string, minLength: 1, maxLength: 128, pattern: '^[A-Za-z0-9._-]+$' }
23992
24377
  headers:
23993
24378
  SohaRouteIDHeader:
23994
24379
  schema:
@@ -40237,6 +40622,10 @@ components:
40237
40622
  prometheusBaseUrl: { type: string }
40238
40623
  prometheusBearerToken: { type: string, writeOnly: true }
40239
40624
  prometheusClusterLabel: { type: string }
40625
+ prometheusClusterLabelValue:
40626
+ type: string
40627
+ maxLength: 1024
40628
+ description: Exact value of prometheusClusterLabel for this cluster. Omitted updates preserve the saved value; an explicit empty string restores the legacy Soha cluster ID default. A non-empty value requires a valid label name.
40240
40629
  grafanaBaseUrl: { type: string }
40241
40630
  prometheusTransport: { $ref: "#/components/schemas/KubernetesPrometheusTransport" }
40242
40631
  agentActionProfile: { $ref: "#/components/schemas/KubernetesAgentActionProfile" }
@@ -40295,12 +40684,16 @@ components:
40295
40684
  additionalProperties: false
40296
40685
  KubernetesPrometheusDetail:
40297
40686
  type: object
40298
- required: [ hasBearerToken ]
40687
+ required: [hasBearerToken]
40299
40688
  properties:
40300
40689
  baseUrl:
40301
40690
  type: string
40302
40691
  clusterLabel:
40303
40692
  type: string
40693
+ clusterLabelValue:
40694
+ type: string
40695
+ maxLength: 1024
40696
+ description: Configured metric cluster label value. Omitted or empty uses the Soha cluster ID for legacy compatibility.
40304
40697
  grafanaBaseUrl:
40305
40698
  type: string
40306
40699
  hasBearerToken:
@@ -40419,7 +40812,7 @@ components:
40419
40812
  additionalProperties: false
40420
40813
  KubernetesNode:
40421
40814
  type: object
40422
- required: [ name, status, unschedulable, podCount, ageSeconds ]
40815
+ required: [name, status, unschedulable, podCount, ageSeconds]
40423
40816
  properties:
40424
40817
  name:
40425
40818
  type: string
@@ -40427,6 +40820,11 @@ components:
40427
40820
  type: string
40428
40821
  unschedulable:
40429
40822
  type: boolean
40823
+ labels:
40824
+ type: object
40825
+ description: Kubernetes Node labels available to the current reader.
40826
+ additionalProperties:
40827
+ type: string
40430
40828
  taints:
40431
40829
  type: array
40432
40830
  nullable: true
@@ -40684,12 +41082,20 @@ components:
40684
41082
  additionalProperties: false
40685
41083
  KubernetesPod:
40686
41084
  type: object
40687
- required: [ name, namespace, phase, readyContainers, restarts, ageSeconds ]
41085
+ required:
41086
+ - name
41087
+ - namespace
41088
+ - phase
41089
+ - readyContainers
41090
+ - restarts
41091
+ - ageSeconds
40688
41092
  properties:
40689
41093
  uid:
40690
41094
  type: string
40691
41095
  minLength: 1
40692
- description: Immutable Pod identity. Required by clients restoring a saved live session; absent on older providers.
41096
+ description: Immutable Pod identity for restoring saved live sessions and identity-checked deletion. Older providers may omit it.
41097
+ maxLength: 128
41098
+ pattern: ^[A-Za-z0-9._-]+$
40693
41099
  name:
40694
41100
  type: string
40695
41101
  namespace:
@@ -40730,6 +41136,14 @@ components:
40730
41136
  type: array
40731
41137
  items:
40732
41138
  type: string
41139
+ qosClass:
41140
+ type: string
41141
+ description: Kubernetes status.qosClass, omitted when not reported.
41142
+ containerStatuses:
41143
+ type: array
41144
+ description: Init containers followed by ordinary containers in spec order, including unknown entries before status is reported. Restartable init containers have kind sidecar. Does not include ephemeral containers.
41145
+ items:
41146
+ $ref: "#/components/schemas/KubernetesPodContainerStatus"
40733
41147
  additionalProperties: false
40734
41148
  KubernetesPodListEnvelope:
40735
41149
  type: object
@@ -40847,12 +41261,17 @@ components:
40847
41261
  additionalProperties: false
40848
41262
  KubernetesPodDetail:
40849
41263
  type: object
40850
- required: [ name, namespace, phase ]
41264
+ required:
41265
+ - name
41266
+ - namespace
41267
+ - phase
40851
41268
  properties:
40852
41269
  uid:
40853
41270
  type: string
40854
41271
  minLength: 1
40855
- description: Immutable Pod identity. Required by clients restoring a saved live session; absent on older providers.
41272
+ description: Immutable Pod identity for restoring saved live sessions and identity-checked deletion. Older providers may omit it.
41273
+ maxLength: 128
41274
+ pattern: ^[A-Za-z0-9._-]+$
40856
41275
  name:
40857
41276
  type: string
40858
41277
  namespace:
@@ -40911,12 +41330,18 @@ components:
40911
41330
  additionalProperties: false
40912
41331
  KubernetesDeployment:
40913
41332
  type: object
40914
- required: [ name, namespace, desiredReplicas, readyReplicas, updatedReplicas, available, ageSeconds ]
41333
+ required: [name, namespace, desiredReplicas, readyReplicas, updatedReplicas, available, ageSeconds]
40915
41334
  properties:
40916
41335
  name:
40917
41336
  type: string
40918
41337
  namespace:
40919
41338
  type: string
41339
+ uid:
41340
+ type: string
41341
+ minLength: 1
41342
+ maxLength: 128
41343
+ pattern: '^[A-Za-z0-9._-]+$'
41344
+ description: Kubernetes object UID for identity-checked deletion. Omitted if unavailable.
40920
41345
  labels:
40921
41346
  $ref: "#/components/schemas/KubernetesStringMap"
40922
41347
  desiredReplicas:
@@ -40955,12 +41380,18 @@ components:
40955
41380
  additionalProperties: false
40956
41381
  KubernetesDeploymentDetail:
40957
41382
  type: object
40958
- required: [ name, namespace, desiredReplicas, readyReplicas, updatedReplicas, availableReplicas, observedGeneration, strategy ]
41383
+ required: [name, namespace, desiredReplicas, readyReplicas, updatedReplicas, availableReplicas, observedGeneration, strategy]
40959
41384
  properties:
40960
41385
  name:
40961
41386
  type: string
40962
41387
  namespace:
40963
41388
  type: string
41389
+ uid:
41390
+ type: string
41391
+ minLength: 1
41392
+ maxLength: 128
41393
+ pattern: '^[A-Za-z0-9._-]+$'
41394
+ description: Kubernetes object UID for identity-checked deletion. Omitted if unavailable.
40964
41395
  desiredReplicas:
40965
41396
  type: integer
40966
41397
  format: int32
@@ -41057,12 +41488,15 @@ components:
41057
41488
  additionalProperties: false
41058
41489
  KubernetesResourceUpdatePlanRequest:
41059
41490
  type: object
41060
- required: [ kind, name, content ]
41491
+ required: [kind, name, content]
41061
41492
  properties:
41062
41493
  namespace: { type: string }
41063
41494
  kind: { type: string, minLength: 1 }
41064
41495
  name: { type: string, minLength: 1 }
41065
41496
  content: { type: string, minLength: 1 }
41497
+ requireObservedIdentity:
41498
+ type: boolean
41499
+ description: Require the YAML to identify the observed Kubernetes object by metadata.uid and metadata.resourceVersion.
41066
41500
  additionalProperties: false
41067
41501
  KubernetesManagedFieldOwner:
41068
41502
  type: object
@@ -41213,7 +41647,7 @@ components:
41213
41647
  additionalProperties: false
41214
41648
  KubernetesDeploymentRollout:
41215
41649
  type: object
41216
- required: [ name, namespace, revision, replicas, readyReplicas ]
41650
+ required: [name, namespace, revision, replicas, readyReplicas]
41217
41651
  properties:
41218
41652
  name: { type: string }
41219
41653
  namespace: { type: string }
@@ -41224,6 +41658,13 @@ components:
41224
41658
  replicas: { type: integer, format: int32, minimum: 0 }
41225
41659
  readyReplicas: { type: integer, format: int32, minimum: 0 }
41226
41660
  createdAt: { type: string }
41661
+ podRevisionHash:
41662
+ type: string
41663
+ description: Observed controller-revision-hash used by owned Pods; omitted when unavailable. Do not infer it from resource names.
41664
+ matchesCurrentTemplate:
41665
+ type: boolean
41666
+ x-go-pointer: true
41667
+ description: When supplied, whether the retained ControllerRevision patch exactly matches the current DaemonSet Pod template. False is a confirmed mismatch; omission means this endpoint did not evaluate it.
41227
41668
  additionalProperties: false
41228
41669
  KubernetesDeploymentRolloutListEnvelope:
41229
41670
  type: object
@@ -41349,7 +41790,7 @@ components:
41349
41790
  additionalProperties: false
41350
41791
  KubernetesJob:
41351
41792
  type: object
41352
- required: [ name, namespace, completions, succeeded, failed, active, ageSeconds ]
41793
+ required: [name, namespace, completions, succeeded, failed, active, ageSeconds]
41353
41794
  properties:
41354
41795
  name: { type: string }
41355
41796
  namespace: { type: string }
@@ -41359,6 +41800,18 @@ components:
41359
41800
  active: { type: integer, format: int32, minimum: 0 }
41360
41801
  completionMode: { type: string }
41361
41802
  ageSeconds: { type: integer, format: int64, minimum: 0 }
41803
+ completionTarget:
41804
+ type: integer
41805
+ x-go-pointer: true
41806
+ format: int32
41807
+ minimum: 0
41808
+ description: Native spec.completions when specified; absence is not a zero completion target.
41809
+ suspend: { type: boolean, x-go-pointer: true }
41810
+ conditions:
41811
+ type: array
41812
+ items: { $ref: "#/components/schemas/KubernetesWorkloadCondition" }
41813
+ startTime: { type: string }
41814
+ completionTime: { type: string }
41362
41815
  allowedActions:
41363
41816
  type: array
41364
41817
  items: { type: string }
@@ -41373,7 +41826,7 @@ components:
41373
41826
  additionalProperties: false
41374
41827
  KubernetesJobDetail:
41375
41828
  type: object
41376
- required: [ name, namespace, completions, parallelism, succeeded, failed, active ]
41829
+ required: [name, namespace, completions, parallelism, succeeded, failed, active]
41377
41830
  properties:
41378
41831
  name: { type: string }
41379
41832
  namespace: { type: string }
@@ -41394,6 +41847,19 @@ components:
41394
41847
  relatedResources:
41395
41848
  type: array
41396
41849
  items: { $ref: "#/components/schemas/KubernetesWorkloadRelation" }
41850
+ completionTarget:
41851
+ type: integer
41852
+ x-go-pointer: true
41853
+ format: int32
41854
+ minimum: 0
41855
+ description: Native spec.completions when specified; absence is not a zero completion target.
41856
+ suspend: { type: boolean, x-go-pointer: true }
41857
+ conditions:
41858
+ type: array
41859
+ items: { $ref: "#/components/schemas/KubernetesWorkloadCondition" }
41860
+ backoffLimit: { type: integer, format: int32, minimum: 0, x-go-pointer: true }
41861
+ activeDeadlineSeconds: { type: integer, format: int64, minimum: 0, x-go-pointer: true }
41862
+ ttlSecondsAfterFinished: { type: integer, format: int32, minimum: 0, x-go-pointer: true }
41397
41863
  allowedActions:
41398
41864
  type: array
41399
41865
  items: { type: string }
@@ -42965,18 +43431,20 @@ components:
42965
43431
  additionalProperties: false
42966
43432
  KubernetesTopologyGraphEdge:
42967
43433
  type: object
42968
- required: [ id, source, target, relation, resolutionState ]
43434
+ required: [id, source, target, relation, resolutionState]
42969
43435
  properties:
42970
43436
  id: { type: string, minLength: 1, maxLength: 2048 }
42971
43437
  source: { type: string, minLength: 1, maxLength: 2048 }
42972
43438
  target: { type: string, minLength: 1, maxLength: 2048 }
42973
43439
  relation:
42974
43440
  type: string
42975
- enum: [ matches, processes, forwards, weights, mirrors, resolves, selects ]
42976
- x-enum-varnames: [ KubernetesTopologyGraphEdgeRelationMatches, KubernetesTopologyGraphEdgeRelationProcesses, KubernetesTopologyGraphEdgeRelationForwards, KubernetesTopologyGraphEdgeRelationWeights, KubernetesTopologyGraphEdgeRelationMirrors, KubernetesTopologyGraphEdgeRelationResolves, KubernetesTopologyGraphEdgeRelationSelects ]
43441
+ enum: [matches, processes, forwards, weights, mirrors, resolves, selects, uses-class, uses-secret, uses-config, parameters, targets, authorizes-reference, policy-peer]
43442
+ x-enum-varnames: [KubernetesTopologyGraphEdgeRelationMatches, KubernetesTopologyGraphEdgeRelationProcesses, KubernetesTopologyGraphEdgeRelationForwards, KubernetesTopologyGraphEdgeRelationWeights, KubernetesTopologyGraphEdgeRelationMirrors, KubernetesTopologyGraphEdgeRelationResolves, KubernetesTopologyGraphEdgeRelationSelects, KubernetesTopologyGraphEdgeRelationUsesClass, KubernetesTopologyGraphEdgeRelationUsesSecret, KubernetesTopologyGraphEdgeRelationUsesConfig, KubernetesTopologyGraphEdgeRelationParameters, KubernetesTopologyGraphEdgeRelationTargets, KubernetesTopologyGraphEdgeRelationAuthorizesReference, KubernetesTopologyGraphEdgeRelationPolicyPeer]
42977
43443
  resolutionState: { $ref: "#/components/schemas/KubernetesTopologyResolution" }
42978
43444
  protocol: { type: string, maxLength: 16 }
42979
43445
  port: { type: string, maxLength: 64 }
43446
+ sectionName: { type: string, maxLength: 253 }
43447
+ fieldPath: { type: string, maxLength: 1024 }
42980
43448
  weight: { type: integer, format: int64, minimum: 0 }
42981
43449
  totalWeight: { type: integer, format: int64, minimum: 0 }
42982
43450
  mirrorPercent: { type: number, minimum: 0, maximum: 100 }
@@ -42986,15 +43454,16 @@ components:
42986
43454
  additionalProperties: false
42987
43455
  KubernetesTopologyCoverage:
42988
43456
  type: object
42989
- required: [ provider, sourceId, state ]
43457
+ required: [provider, sourceId, state]
42990
43458
  properties:
42991
43459
  provider: { $ref: "#/components/schemas/KubernetesTopologyProvider" }
42992
43460
  sourceId: { type: string, maxLength: 128 }
42993
43461
  state:
42994
43462
  type: string
42995
- enum: [ available, not_installed, unsupported, denied, error, partial ]
42996
- x-enum-varnames: [ KubernetesTopologyCoverageStateAvailable, KubernetesTopologyCoverageStateNotInstalled, KubernetesTopologyCoverageStateUnsupported, KubernetesTopologyCoverageStateDenied, KubernetesTopologyCoverageStateError, KubernetesTopologyCoverageStatePartial ]
43463
+ enum: [available, not_installed, unsupported, denied, error, partial]
43464
+ x-enum-varnames: [KubernetesTopologyCoverageStateAvailable, KubernetesTopologyCoverageStateNotInstalled, KubernetesTopologyCoverageStateUnsupported, KubernetesTopologyCoverageStateDenied, KubernetesTopologyCoverageStateError, KubernetesTopologyCoverageStatePartial]
42997
43465
  namespace: { type: string, maxLength: 63 }
43466
+ name: { type: string, maxLength: 253 }
42998
43467
  supportedKinds:
42999
43468
  type: array
43000
43469
  maxItems: 32
@@ -43006,18 +43475,19 @@ components:
43006
43475
  additionalProperties: false
43007
43476
  KubernetesTopologySourceQuery:
43008
43477
  type: object
43009
- required: [ sourceId ]
43478
+ required: [sourceId]
43010
43479
  properties:
43011
43480
  sourceId:
43012
43481
  type: string
43013
- 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 ]
43014
- 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 ]
43482
+ enum: [kubernetes.networkpolicies, kubernetes.namespaces, kubernetes.configmaps, gateway.backendtlspolicies, 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]
43483
+ x-enum-varnames: [KubernetesTopologySourceKubernetesNetworkpolicies, KubernetesTopologySourceKubernetesNamespaces, KubernetesTopologySourceKubernetesConfigmaps, KubernetesTopologySourceGatewayBackendtlspolicies, KubernetesTopologySourceKubernetesServices, KubernetesTopologySourceKubernetesPods, KubernetesTopologySourceKubernetesEndpointslices, KubernetesTopologySourceKubernetesIngresses, KubernetesTopologySourceKubernetesIngressclasses, KubernetesTopologySourceGatewayGateways, KubernetesTopologySourceGatewayGatewayclasses, KubernetesTopologySourceGatewayHttproutes, KubernetesTopologySourceGatewayGrpcroutes, KubernetesTopologySourceGatewayTcproutes, KubernetesTopologySourceGatewayTlsroutes, KubernetesTopologySourceGatewayUdproutes, KubernetesTopologySourceGatewayReferencegrants, KubernetesTopologySourceTraefikIngressroutes, KubernetesTopologySourceTraefikIngressroutetcps, KubernetesTopologySourceTraefikIngressrouteudps, KubernetesTopologySourceTraefikTraefikservices, KubernetesTopologySourceTraefikMiddlewares, KubernetesTopologySourceTraefikMiddlewaretcps, KubernetesTopologySourceApisixApisixroutes, KubernetesTopologySourceApisixApisixupstreams, KubernetesTopologySourceApisixApisixtls]
43015
43484
  namespace: { type: string, maxLength: 63, pattern: '^$|^[a-z0-9]([a-z0-9-]*[a-z0-9])?$' }
43485
+ name: { type: string, maxLength: 253 }
43016
43486
  allOf:
43017
43487
  - if:
43018
43488
  properties:
43019
- sourceId: { enum: [ kubernetes.ingressclasses, gateway.gatewayclasses ] }
43020
- required: [ sourceId ]
43489
+ sourceId: { enum: [kubernetes.ingressclasses, gateway.gatewayclasses, kubernetes.namespaces] }
43490
+ required: [sourceId]
43021
43491
  then:
43022
43492
  properties:
43023
43493
  namespace: { type: string, maxLength: 0 }
@@ -43056,9 +43526,9 @@ components:
43056
43526
  additionalProperties: false
43057
43527
  KubernetesTopologySnapshot:
43058
43528
  type: object
43059
- required: [ version, sources ]
43529
+ required: [version, sources]
43060
43530
  properties:
43061
- version: { type: string, pattern: '^v1$' }
43531
+ version: { type: string, pattern: '^v1$|^network\.topology\.(snapshot|named-root)\.v1$' }
43062
43532
  sources:
43063
43533
  type: array
43064
43534
  maxItems: 64
@@ -46635,12 +47105,19 @@ components:
46635
47105
  additionalProperties: false
46636
47106
  KubernetesResourceGraphEdge:
46637
47107
  type: object
46638
- required: [ id, sourceId, targetId, relation ]
47108
+ required: [id, sourceId, targetId, relation]
46639
47109
  properties:
46640
47110
  id: { type: string, minLength: 1 }
46641
47111
  sourceId: { type: string, minLength: 1 }
46642
47112
  targetId: { type: string, minLength: 1 }
46643
47113
  relation: { type: string, minLength: 1 }
47114
+ resolutionState: { type: string }
47115
+ protocol: { type: string }
47116
+ port: { type: string }
47117
+ sectionName: { type: string }
47118
+ fieldPath: { type: string }
47119
+ note: { type: string }
47120
+ sourceRef: { $ref: "#/components/schemas/KubernetesResourceRef" }
46644
47121
  additionalProperties: false
46645
47122
  KubernetesResourceEvidence:
46646
47123
  type: object
@@ -56460,3 +56937,86 @@ components:
56460
56937
  }
56461
56938
  }
56462
56939
  }
56940
+ KubernetesPodContainerStatus:
56941
+ type: object
56942
+ required: [name, kind, ready, state]
56943
+ properties:
56944
+ name:
56945
+ type: string
56946
+ kind:
56947
+ type: string
56948
+ enum: [init, sidecar, container]
56949
+ ready:
56950
+ type: boolean
56951
+ state:
56952
+ type: string
56953
+ enum: [running, waiting, terminated, unknown]
56954
+ reason:
56955
+ type: string
56956
+ exitCode:
56957
+ type: integer
56958
+ format: int32
56959
+ x-go-type-skip-optional-pointer: false
56960
+ description: Present only when the current container state is terminated, including a successful zero exit code.
56961
+ additionalProperties: false
56962
+ KubernetesObservedResourceYamlInput:
56963
+ type: object
56964
+ required: [content]
56965
+ properties:
56966
+ content: { type: string, minLength: 1 }
56967
+ requireObservedIdentity:
56968
+ type: boolean
56969
+ description: Require the YAML to include the UID and resource version of the object read before editing. A changed or replaced object returns conflict.
56970
+ additionalProperties: false
56971
+ KubernetesSecretCertificate:
56972
+ type: object
56973
+ required: [name, namespace, status]
56974
+ properties:
56975
+ name: { type: string }
56976
+ namespace: { type: string }
56977
+ status:
56978
+ type: string
56979
+ enum: [available, missing, invalid, unsupported_type]
56980
+ notBefore: { type: string, format: date-time }
56981
+ notAfter: { type: string, format: date-time }
56982
+ selfSigned:
56983
+ type: boolean
56984
+ x-go-pointer: true
56985
+ description: The first certificate is signed by its own key; this is not a trust validation result.
56986
+ additionalProperties: false
56987
+ KubernetesSecretCertificateEnvelope:
56988
+ type: object
56989
+ required: [data]
56990
+ properties:
56991
+ data: { $ref: "#/components/schemas/KubernetesSecretCertificate" }
56992
+ additionalProperties: false
56993
+ KubernetesHelmReleaseValuesUpdateInput:
56994
+ type: object
56995
+ required: [content]
56996
+ properties:
56997
+ content: { type: string, description: Complete Helm values YAML. }
56998
+ expectedRevision:
56999
+ type: integer
57000
+ minimum: 1
57001
+ maximum: 2147483646
57002
+ description: Latest Helm revision observed by the editor. When supplied, a changed revision returns 409 and an Agent without conditional updates returns 501.
57003
+ additionalProperties: false
57004
+ KubernetesHelmReleaseValues:
57005
+ type: object
57006
+ required: [name, namespace, content, editable, diffEnabled]
57007
+ properties:
57008
+ name: { type: string }
57009
+ namespace: { type: string }
57010
+ revision: { type: string }
57011
+ content: { type: string }
57012
+ original: { type: string }
57013
+ editable: { type: boolean }
57014
+ diffEnabled: { type: boolean }
57015
+ allowedActions: { type: array, items: { type: string } }
57016
+ additionalProperties: false
57017
+ KubernetesHelmReleaseValuesEnvelope:
57018
+ type: object
57019
+ required: [data]
57020
+ properties:
57021
+ data: { $ref: "#/components/schemas/KubernetesHelmReleaseValues" }
57022
+ additionalProperties: false