@opensoha/contracts 0.1.13 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/auth/catalog_generated.go +2 -2
- package/auth/catalog_test.go +40 -0
- package/auth/permission-catalog.json +227 -3
- package/compat/json-schema-ecosystem-0.1.0.json +1 -1
- package/compat/openapi-loose-boundaries-0.1.0.json +1 -1
- package/fixtures/openapi/AISkillsSettingsEnvelope/invalid/missing-registry.json +3 -0
- package/fixtures/openapi/AISkillsSettingsEnvelope/valid/registry.json +13 -0
- package/fixtures/openapi/AlertEventStreamSignal/invalid/missing-observed-at.json +4 -0
- package/fixtures/openapi/AlertEventStreamSignal/valid/changed.json +9 -0
- package/fixtures/openapi/ComputeOverviewEnvelope/valid/partial.json +6 -0
- package/fixtures/openapi/ComputeTaskListEnvelope/invalid/progress-overflow.json +21 -0
- package/fixtures/openapi/ComputeTaskListEnvelope/valid/running.json +15 -0
- package/fixtures/openapi/ComputeTaskStreamEvent/invalid/missing-observed-at.json +3 -0
- package/fixtures/openapi/ComputeTaskStreamEvent/valid/snapshot.json +27 -0
- package/fixtures/openapi/KubernetesResourceGraphEnvelope/invalid/edge-without-target.json +16 -0
- package/fixtures/openapi/KubernetesResourceGraphEnvelope/valid/deployment.json +53 -0
- package/fixtures/openapi/KubernetesResourceSearchEnvelope/invalid/missing-resource.json +10 -0
- package/fixtures/openapi/KubernetesResourceSearchEnvelope/valid/mixed.json +29 -0
- package/fixtures/openapi/KubernetesResourceStreamEvent/invalid/missing-observed-at.json +5 -0
- package/fixtures/openapi/KubernetesResourceStreamEvent/valid/modified.json +18 -0
- package/fixtures/openapi/KubernetesSecurityPostureEnvelope/invalid/finding-without-severity.json +24 -0
- package/fixtures/openapi/KubernetesSecurityPostureEnvelope/valid/kubescape.json +34 -0
- package/fixtures/openapi/KubernetesService/invalid/node-port-out-of-range.json +14 -0
- package/fixtures/openapi/KubernetesService/valid/port-mappings.json +22 -0
- package/fixtures/openapi/KubernetesServiceDetail/invalid/empty-target-port.json +13 -0
- package/fixtures/openapi/KubernetesServiceDetail/valid/port-mappings.json +22 -0
- package/fixtures/openapi/KubernetesWorkloadSnapshotRequest/invalid/unknown-inheritance.json +9 -0
- package/fixtures/openapi/KubernetesWorkloadSnapshotRequest/valid/selective-job.json +9 -0
- package/fixtures/openapi/OperationalPlanEnvelope/invalid/kubernetes-owner-without-manager.json +29 -0
- package/fixtures/openapi/OperationalPlanEnvelope/valid/kubernetes-resource-update.json +30 -0
- package/fixtures/openapi/WorkbenchAgentRunListEnvelope/invalid/callback-token.json +17 -0
- package/fixtures/openapi/WorkbenchAgentRunListEnvelope/valid/session-scoped.json +17 -0
- package/fixtures/openapi/WorkbenchSessionEnvelope/invalid/missing-owner.json +8 -0
- package/fixtures/openapi/WorkbenchSessionEnvelope/valid/current.json +17 -0
- package/gen/go/sohaapi/client.go +1 -1
- package/gen/go/sohaapi/types.go +1758 -59
- package/gen/go/sohaapi/types_test.go +43 -2
- package/gen/ts/sohaapi/index.ts +12853 -9909
- package/openapi/soha-api.json +11360 -5927
- package/openapi/soha-api.yaml +11122 -8646
- package/openapi/spec_generated.go +3 -3
- package/package.json +1 -1
- package/resource/models.go +197 -0
|
@@ -6,8 +6,8 @@ import _ "embed"
|
|
|
6
6
|
|
|
7
7
|
const (
|
|
8
8
|
PermissionCatalogVersion = "2.0.0"
|
|
9
|
-
PermissionCatalogContentSHA256 = "
|
|
10
|
-
PermissionCatalogSHA256 = "
|
|
9
|
+
PermissionCatalogContentSHA256 = "58321138575c22b20933cf2c1db2742b741a123bb8f6a2983bb436e84be4e58a"
|
|
10
|
+
PermissionCatalogSHA256 = "38ac1a2e7087ff4831e8f6390b804e32f918b49b9af3165fdf2df286d64fe3c8"
|
|
11
11
|
)
|
|
12
12
|
|
|
13
13
|
//go:embed permission-catalog.json
|
package/auth/catalog_test.go
CHANGED
|
@@ -86,3 +86,43 @@ func TestPermissionCatalogIncludesIndependentResourceCreationEntry(t *testing.T)
|
|
|
86
86
|
t.Fatal("platform.resource-creation.use is missing")
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
|
+
|
|
90
|
+
func TestPermissionCatalogIncludesIndependentWorkbenchEntries(t *testing.T) {
|
|
91
|
+
var catalog struct {
|
|
92
|
+
Permissions []struct {
|
|
93
|
+
Key string `json:"key"`
|
|
94
|
+
Domain string `json:"domain"`
|
|
95
|
+
Action string `json:"action"`
|
|
96
|
+
Status string `json:"status"`
|
|
97
|
+
Assignable bool `json:"assignable"`
|
|
98
|
+
} `json:"permissions"`
|
|
99
|
+
}
|
|
100
|
+
if err := json.Unmarshal(PermissionCatalogJSON(), &catalog); err != nil {
|
|
101
|
+
t.Fatalf("decode permission catalog: %v", err)
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
want := map[string]bool{
|
|
105
|
+
"workbench.ai.view": false,
|
|
106
|
+
"workbench.compute.view": false,
|
|
107
|
+
"workbench.delivery.view": false,
|
|
108
|
+
"workbench.home.view": false,
|
|
109
|
+
"workbench.monitoring.view": false,
|
|
110
|
+
"workbench.platform.view": false,
|
|
111
|
+
"workbench.security.view": false,
|
|
112
|
+
"workbench.settings.view": false,
|
|
113
|
+
}
|
|
114
|
+
for _, permission := range catalog.Permissions {
|
|
115
|
+
if _, ok := want[permission.Key]; !ok {
|
|
116
|
+
continue
|
|
117
|
+
}
|
|
118
|
+
if permission.Domain != "workbench" || permission.Action != "view" || permission.Status != "active" || !permission.Assignable {
|
|
119
|
+
t.Fatalf("workbench entry must be independently assignable: %#v", permission)
|
|
120
|
+
}
|
|
121
|
+
want[permission.Key] = true
|
|
122
|
+
}
|
|
123
|
+
for key, found := range want {
|
|
124
|
+
if !found {
|
|
125
|
+
t.Fatalf("%s is missing", key)
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "authorization.opensoha.io/v1",
|
|
3
3
|
"catalogVersion": "2.0.0",
|
|
4
|
-
"contentHash": "sha256:
|
|
4
|
+
"contentHash": "sha256:58321138575c22b20933cf2c1db2742b741a123bb8f6a2983bb436e84be4e58a",
|
|
5
5
|
"permissions": [
|
|
6
6
|
{
|
|
7
7
|
"key": "access.directory.create",
|
|
@@ -943,6 +943,70 @@
|
|
|
943
943
|
"status": "active",
|
|
944
944
|
"assignable": true
|
|
945
945
|
},
|
|
946
|
+
{
|
|
947
|
+
"key": "ai.data-sources.create",
|
|
948
|
+
"domain": "ai",
|
|
949
|
+
"resource": "data-sources",
|
|
950
|
+
"action": "create",
|
|
951
|
+
"displayName": "创建 AI 数据源",
|
|
952
|
+
"riskLevel": "mutate",
|
|
953
|
+
"scopeKinds": [
|
|
954
|
+
"tenant",
|
|
955
|
+
"workspace",
|
|
956
|
+
"resource"
|
|
957
|
+
],
|
|
958
|
+
"approvalPolicy": "never",
|
|
959
|
+
"status": "active",
|
|
960
|
+
"assignable": true
|
|
961
|
+
},
|
|
962
|
+
{
|
|
963
|
+
"key": "ai.data-sources.update",
|
|
964
|
+
"domain": "ai",
|
|
965
|
+
"resource": "data-sources",
|
|
966
|
+
"action": "update",
|
|
967
|
+
"displayName": "修改 AI 数据源",
|
|
968
|
+
"riskLevel": "mutate",
|
|
969
|
+
"scopeKinds": [
|
|
970
|
+
"tenant",
|
|
971
|
+
"workspace",
|
|
972
|
+
"resource"
|
|
973
|
+
],
|
|
974
|
+
"approvalPolicy": "never",
|
|
975
|
+
"status": "active",
|
|
976
|
+
"assignable": true
|
|
977
|
+
},
|
|
978
|
+
{
|
|
979
|
+
"key": "ai.data-sources.validate",
|
|
980
|
+
"domain": "ai",
|
|
981
|
+
"resource": "data-sources",
|
|
982
|
+
"action": "validate",
|
|
983
|
+
"displayName": "校验 AI 数据源",
|
|
984
|
+
"riskLevel": "mutate",
|
|
985
|
+
"scopeKinds": [
|
|
986
|
+
"tenant",
|
|
987
|
+
"workspace",
|
|
988
|
+
"resource"
|
|
989
|
+
],
|
|
990
|
+
"approvalPolicy": "never",
|
|
991
|
+
"status": "active",
|
|
992
|
+
"assignable": true
|
|
993
|
+
},
|
|
994
|
+
{
|
|
995
|
+
"key": "ai.data-sources.view",
|
|
996
|
+
"domain": "ai",
|
|
997
|
+
"resource": "data-sources",
|
|
998
|
+
"action": "view",
|
|
999
|
+
"displayName": "查看 AI 数据源",
|
|
1000
|
+
"riskLevel": "read",
|
|
1001
|
+
"scopeKinds": [
|
|
1002
|
+
"tenant",
|
|
1003
|
+
"workspace",
|
|
1004
|
+
"resource"
|
|
1005
|
+
],
|
|
1006
|
+
"approvalPolicy": "never",
|
|
1007
|
+
"status": "active",
|
|
1008
|
+
"assignable": true
|
|
1009
|
+
},
|
|
946
1010
|
{
|
|
947
1011
|
"key": "ai.environments.create",
|
|
948
1012
|
"domain": "ai",
|
|
@@ -5456,6 +5520,26 @@
|
|
|
5456
5520
|
"status": "active",
|
|
5457
5521
|
"assignable": true
|
|
5458
5522
|
},
|
|
5523
|
+
{
|
|
5524
|
+
"key": "platform.access-control.access-reviews.execute",
|
|
5525
|
+
"domain": "platform",
|
|
5526
|
+
"resource": "access-control.access-reviews",
|
|
5527
|
+
"action": "execute",
|
|
5528
|
+
"displayName": "执行 Kubernetes 有效权限检查",
|
|
5529
|
+
"riskLevel": "read",
|
|
5530
|
+
"scopeKinds": [
|
|
5531
|
+
"workspace",
|
|
5532
|
+
"cluster",
|
|
5533
|
+
"namespace",
|
|
5534
|
+
"resource"
|
|
5535
|
+
],
|
|
5536
|
+
"approvalPolicy": "never",
|
|
5537
|
+
"status": "active",
|
|
5538
|
+
"assignable": true,
|
|
5539
|
+
"legacyAliases": [
|
|
5540
|
+
"platform.access-control.view"
|
|
5541
|
+
]
|
|
5542
|
+
},
|
|
5459
5543
|
{
|
|
5460
5544
|
"key": "platform.access-control.cluster-role-bindings.create",
|
|
5461
5545
|
"domain": "platform",
|
|
@@ -5897,6 +5981,7 @@
|
|
|
5897
5981
|
"status": "legacy",
|
|
5898
5982
|
"assignable": false,
|
|
5899
5983
|
"replacedBy": [
|
|
5984
|
+
"platform.access-control.access-reviews.execute",
|
|
5900
5985
|
"platform.access-control.cluster-role-bindings.view",
|
|
5901
5986
|
"platform.access-control.cluster-roles.view",
|
|
5902
5987
|
"platform.access-control.role-bindings.view",
|
|
@@ -7266,6 +7351,25 @@
|
|
|
7266
7351
|
"delete"
|
|
7267
7352
|
]
|
|
7268
7353
|
},
|
|
7354
|
+
{
|
|
7355
|
+
"key": "platform.helm.releases.rollback",
|
|
7356
|
+
"domain": "platform",
|
|
7357
|
+
"resource": "helm.releases",
|
|
7358
|
+
"action": "rollback",
|
|
7359
|
+
"displayName": "回滚 Kubernetes HelmRelease",
|
|
7360
|
+
"riskLevel": "high",
|
|
7361
|
+
"scopeKinds": [
|
|
7362
|
+
"cluster",
|
|
7363
|
+
"namespace",
|
|
7364
|
+
"resource"
|
|
7365
|
+
],
|
|
7366
|
+
"approvalPolicy": "eligible",
|
|
7367
|
+
"status": "active",
|
|
7368
|
+
"assignable": true,
|
|
7369
|
+
"legacyCapabilities": [
|
|
7370
|
+
"rollback"
|
|
7371
|
+
]
|
|
7372
|
+
},
|
|
7269
7373
|
{
|
|
7270
7374
|
"key": "platform.helm.releases.update",
|
|
7271
7375
|
"domain": "platform",
|
|
@@ -10929,12 +11033,132 @@
|
|
|
10929
11033
|
"status": "active",
|
|
10930
11034
|
"assignable": true
|
|
10931
11035
|
},
|
|
11036
|
+
{
|
|
11037
|
+
"key": "workbench.ai.view",
|
|
11038
|
+
"domain": "workbench",
|
|
11039
|
+
"resource": "ai",
|
|
11040
|
+
"action": "view",
|
|
11041
|
+
"displayName": "访问 AI 工作台",
|
|
11042
|
+
"riskLevel": "read",
|
|
11043
|
+
"scopeKinds": [
|
|
11044
|
+
"tenant",
|
|
11045
|
+
"workspace"
|
|
11046
|
+
],
|
|
11047
|
+
"approvalPolicy": "never",
|
|
11048
|
+
"status": "active",
|
|
11049
|
+
"assignable": true
|
|
11050
|
+
},
|
|
11051
|
+
{
|
|
11052
|
+
"key": "workbench.compute.view",
|
|
11053
|
+
"domain": "workbench",
|
|
11054
|
+
"resource": "compute",
|
|
11055
|
+
"action": "view",
|
|
11056
|
+
"displayName": "访问计算资源工作台",
|
|
11057
|
+
"riskLevel": "read",
|
|
11058
|
+
"scopeKinds": [
|
|
11059
|
+
"tenant",
|
|
11060
|
+
"workspace"
|
|
11061
|
+
],
|
|
11062
|
+
"approvalPolicy": "never",
|
|
11063
|
+
"status": "active",
|
|
11064
|
+
"assignable": true
|
|
11065
|
+
},
|
|
11066
|
+
{
|
|
11067
|
+
"key": "workbench.delivery.view",
|
|
11068
|
+
"domain": "workbench",
|
|
11069
|
+
"resource": "delivery",
|
|
11070
|
+
"action": "view",
|
|
11071
|
+
"displayName": "访问应用交付工作台",
|
|
11072
|
+
"riskLevel": "read",
|
|
11073
|
+
"scopeKinds": [
|
|
11074
|
+
"tenant",
|
|
11075
|
+
"workspace"
|
|
11076
|
+
],
|
|
11077
|
+
"approvalPolicy": "never",
|
|
11078
|
+
"status": "active",
|
|
11079
|
+
"assignable": true
|
|
11080
|
+
},
|
|
11081
|
+
{
|
|
11082
|
+
"key": "workbench.home.view",
|
|
11083
|
+
"domain": "workbench",
|
|
11084
|
+
"resource": "home",
|
|
11085
|
+
"action": "view",
|
|
11086
|
+
"displayName": "访问应用门户",
|
|
11087
|
+
"riskLevel": "read",
|
|
11088
|
+
"scopeKinds": [
|
|
11089
|
+
"tenant",
|
|
11090
|
+
"workspace"
|
|
11091
|
+
],
|
|
11092
|
+
"approvalPolicy": "never",
|
|
11093
|
+
"status": "active",
|
|
11094
|
+
"assignable": true
|
|
11095
|
+
},
|
|
11096
|
+
{
|
|
11097
|
+
"key": "workbench.monitoring.view",
|
|
11098
|
+
"domain": "workbench",
|
|
11099
|
+
"resource": "monitoring",
|
|
11100
|
+
"action": "view",
|
|
11101
|
+
"displayName": "访问可观测与值班工作台",
|
|
11102
|
+
"riskLevel": "read",
|
|
11103
|
+
"scopeKinds": [
|
|
11104
|
+
"tenant",
|
|
11105
|
+
"workspace"
|
|
11106
|
+
],
|
|
11107
|
+
"approvalPolicy": "never",
|
|
11108
|
+
"status": "active",
|
|
11109
|
+
"assignable": true
|
|
11110
|
+
},
|
|
11111
|
+
{
|
|
11112
|
+
"key": "workbench.platform.view",
|
|
11113
|
+
"domain": "workbench",
|
|
11114
|
+
"resource": "platform",
|
|
11115
|
+
"action": "view",
|
|
11116
|
+
"displayName": "访问 k8s工作台",
|
|
11117
|
+
"riskLevel": "read",
|
|
11118
|
+
"scopeKinds": [
|
|
11119
|
+
"tenant",
|
|
11120
|
+
"workspace"
|
|
11121
|
+
],
|
|
11122
|
+
"approvalPolicy": "never",
|
|
11123
|
+
"status": "active",
|
|
11124
|
+
"assignable": true
|
|
11125
|
+
},
|
|
11126
|
+
{
|
|
11127
|
+
"key": "workbench.security.view",
|
|
11128
|
+
"domain": "workbench",
|
|
11129
|
+
"resource": "security",
|
|
11130
|
+
"action": "view",
|
|
11131
|
+
"displayName": "访问身份与安全工作台",
|
|
11132
|
+
"riskLevel": "read",
|
|
11133
|
+
"scopeKinds": [
|
|
11134
|
+
"tenant",
|
|
11135
|
+
"workspace"
|
|
11136
|
+
],
|
|
11137
|
+
"approvalPolicy": "never",
|
|
11138
|
+
"status": "active",
|
|
11139
|
+
"assignable": true
|
|
11140
|
+
},
|
|
11141
|
+
{
|
|
11142
|
+
"key": "workbench.settings.view",
|
|
11143
|
+
"domain": "workbench",
|
|
11144
|
+
"resource": "settings",
|
|
11145
|
+
"action": "view",
|
|
11146
|
+
"displayName": "访问设置中心",
|
|
11147
|
+
"riskLevel": "read",
|
|
11148
|
+
"scopeKinds": [
|
|
11149
|
+
"tenant",
|
|
11150
|
+
"workspace"
|
|
11151
|
+
],
|
|
11152
|
+
"approvalPolicy": "never",
|
|
11153
|
+
"status": "active",
|
|
11154
|
+
"assignable": true
|
|
11155
|
+
},
|
|
10932
11156
|
{
|
|
10933
11157
|
"key": "workspace.application.view",
|
|
10934
11158
|
"domain": "workspace",
|
|
10935
11159
|
"resource": "application",
|
|
10936
11160
|
"action": "view",
|
|
10937
|
-
"displayName": "
|
|
11161
|
+
"displayName": "查看工作空间应用",
|
|
10938
11162
|
"riskLevel": "read",
|
|
10939
11163
|
"scopeKinds": [
|
|
10940
11164
|
"tenant",
|
|
@@ -10950,7 +11174,7 @@
|
|
|
10950
11174
|
"domain": "workspace",
|
|
10951
11175
|
"resource": "resource",
|
|
10952
11176
|
"action": "view",
|
|
10953
|
-
"displayName": "
|
|
11177
|
+
"displayName": "查看工作空间资源",
|
|
10954
11178
|
"riskLevel": "read",
|
|
10955
11179
|
"scopeKinds": [
|
|
10956
11180
|
"tenant",
|
|
@@ -27,6 +27,12 @@
|
|
|
27
27
|
"checkedAt": "2026-07-14T02:00:00Z"
|
|
28
28
|
}
|
|
29
29
|
],
|
|
30
|
+
"generatedAt": "2026-07-14T02:00:01Z",
|
|
31
|
+
"freshness": {
|
|
32
|
+
"status": "fresh",
|
|
33
|
+
"observedAt": "2026-07-14T02:00:00Z",
|
|
34
|
+
"maxAgeSeconds": 120
|
|
35
|
+
},
|
|
30
36
|
"partial": true,
|
|
31
37
|
"warnings": [{ "code": "runtime_section_unavailable" }]
|
|
32
38
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"items": [
|
|
3
|
+
{
|
|
4
|
+
"id": "virtualization:task-1",
|
|
5
|
+
"domain": "virtualization",
|
|
6
|
+
"sourceType": "virtualization_task",
|
|
7
|
+
"sourceId": "task-1",
|
|
8
|
+
"kind": "vm.create",
|
|
9
|
+
"category": "lifecycle",
|
|
10
|
+
"normalizedStatus": "running",
|
|
11
|
+
"rawStatus": "running",
|
|
12
|
+
"resources": [],
|
|
13
|
+
"attemptCount": 1,
|
|
14
|
+
"cancelable": true,
|
|
15
|
+
"retryable": false,
|
|
16
|
+
"availableActions": ["cancel"],
|
|
17
|
+
"progress": 1.5,
|
|
18
|
+
"createdAt": "2026-07-14T02:00:00Z"
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
}
|
|
@@ -23,6 +23,21 @@
|
|
|
23
23
|
"cancelable": true,
|
|
24
24
|
"retryable": false,
|
|
25
25
|
"availableActions": ["logs", "cancel"],
|
|
26
|
+
"progress": 0.65,
|
|
27
|
+
"heartbeat": {
|
|
28
|
+
"status": "fresh",
|
|
29
|
+
"observedAt": "2026-07-14T02:00:08Z",
|
|
30
|
+
"timeoutSeconds": 30
|
|
31
|
+
},
|
|
32
|
+
"result": {
|
|
33
|
+
"status": "accepted",
|
|
34
|
+
"summary": "Provider accepted the VM create request."
|
|
35
|
+
},
|
|
36
|
+
"verification": {
|
|
37
|
+
"status": "pending",
|
|
38
|
+
"summary": "Waiting for the VM to become observable."
|
|
39
|
+
},
|
|
40
|
+
"auditRef": "audit-virtualization-task-1",
|
|
26
41
|
"createdAt": "2026-07-14T02:00:00Z",
|
|
27
42
|
"startedAt": "2026-07-14T02:00:01Z"
|
|
28
43
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type": "snapshot",
|
|
3
|
+
"observedAt": "2026-07-14T02:00:08Z",
|
|
4
|
+
"sequence": 1,
|
|
5
|
+
"task": {
|
|
6
|
+
"id": "virtualization:task-1",
|
|
7
|
+
"domain": "virtualization",
|
|
8
|
+
"sourceType": "virtualization_task",
|
|
9
|
+
"sourceId": "task-1",
|
|
10
|
+
"kind": "vm.create",
|
|
11
|
+
"category": "lifecycle",
|
|
12
|
+
"normalizedStatus": "running",
|
|
13
|
+
"rawStatus": "running",
|
|
14
|
+
"resources": [],
|
|
15
|
+
"attemptCount": 1,
|
|
16
|
+
"cancelable": true,
|
|
17
|
+
"retryable": false,
|
|
18
|
+
"availableActions": ["logs", "cancel"],
|
|
19
|
+
"progress": 0.65,
|
|
20
|
+
"heartbeat": {
|
|
21
|
+
"status": "fresh",
|
|
22
|
+
"observedAt": "2026-07-14T02:00:08Z",
|
|
23
|
+
"timeoutSeconds": 30
|
|
24
|
+
},
|
|
25
|
+
"createdAt": "2026-07-14T02:00:00Z"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"data": {
|
|
3
|
+
"clusterId": "cluster-a",
|
|
4
|
+
"namespace": "team-a",
|
|
5
|
+
"generatedAt": "2026-08-23T08:00:00Z",
|
|
6
|
+
"rootId": "apps/v1:Deployment:team-a/api",
|
|
7
|
+
"nodes": [
|
|
8
|
+
{
|
|
9
|
+
"id": "apps/v1:Deployment:team-a/api",
|
|
10
|
+
"resource": {
|
|
11
|
+
"clusterId": "cluster-a",
|
|
12
|
+
"apiVersion": "apps/v1",
|
|
13
|
+
"kind": "Deployment",
|
|
14
|
+
"name": "api",
|
|
15
|
+
"namespace": "team-a",
|
|
16
|
+
"scopeMode": "namespace"
|
|
17
|
+
},
|
|
18
|
+
"status": "healthy"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"id": "v1:Pod:team-a/api-1",
|
|
22
|
+
"resource": {
|
|
23
|
+
"clusterId": "cluster-a",
|
|
24
|
+
"apiVersion": "v1",
|
|
25
|
+
"kind": "Pod",
|
|
26
|
+
"name": "api-1",
|
|
27
|
+
"namespace": "team-a",
|
|
28
|
+
"scopeMode": "namespace"
|
|
29
|
+
},
|
|
30
|
+
"status": "Running"
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"edges": [
|
|
34
|
+
{
|
|
35
|
+
"id": "owns:deployment-api:pod-api-1",
|
|
36
|
+
"sourceId": "apps/v1:Deployment:team-a/api",
|
|
37
|
+
"targetId": "v1:Pod:team-a/api-1",
|
|
38
|
+
"relation": "owns"
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
"evidence": [
|
|
42
|
+
{
|
|
43
|
+
"id": "event/team-a/api-1-scheduled",
|
|
44
|
+
"type": "kubernetes-event",
|
|
45
|
+
"severity": "info",
|
|
46
|
+
"summary": "Pod scheduled",
|
|
47
|
+
"observedAt": "2026-08-23T07:59:58Z",
|
|
48
|
+
"resourceId": "v1:Pod:team-a/api-1"
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
"warnings": []
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"data": {
|
|
3
|
+
"items": [
|
|
4
|
+
{
|
|
5
|
+
"resource": {
|
|
6
|
+
"clusterId": "cluster-a",
|
|
7
|
+
"apiVersion": "v1",
|
|
8
|
+
"kind": "Pod",
|
|
9
|
+
"name": "api-7c8d9f",
|
|
10
|
+
"namespace": "production",
|
|
11
|
+
"scopeMode": "namespace",
|
|
12
|
+
"uid": "pod-uid"
|
|
13
|
+
},
|
|
14
|
+
"status": "Running"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"resource": {
|
|
18
|
+
"clusterId": "cluster-a",
|
|
19
|
+
"apiVersion": "v1",
|
|
20
|
+
"kind": "Node",
|
|
21
|
+
"name": "worker-1",
|
|
22
|
+
"scopeMode": "cluster"
|
|
23
|
+
},
|
|
24
|
+
"status": "Ready"
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"truncated": false
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type": "modified",
|
|
3
|
+
"clusterId": "cluster-a",
|
|
4
|
+
"observedAt": "2026-08-23T08:00:00Z",
|
|
5
|
+
"source": "informer",
|
|
6
|
+
"resourceVersion": "42",
|
|
7
|
+
"cacheStatus": "live",
|
|
8
|
+
"resyncRequired": false,
|
|
9
|
+
"resource": {
|
|
10
|
+
"clusterId": "cluster-a",
|
|
11
|
+
"apiVersion": "v1",
|
|
12
|
+
"kind": "Pod",
|
|
13
|
+
"name": "api-1",
|
|
14
|
+
"namespace": "team-a",
|
|
15
|
+
"scopeMode": "namespace",
|
|
16
|
+
"uid": "pod-uid"
|
|
17
|
+
}
|
|
18
|
+
}
|
package/fixtures/openapi/KubernetesSecurityPostureEnvelope/invalid/finding-without-severity.json
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"data": {
|
|
3
|
+
"clusterId": "cluster-a",
|
|
4
|
+
"provider": "kubescape",
|
|
5
|
+
"status": "available",
|
|
6
|
+
"generatedAt": "2026-08-23T08:00:00Z",
|
|
7
|
+
"counts": {
|
|
8
|
+
"critical": 0,
|
|
9
|
+
"high": 1,
|
|
10
|
+
"medium": 0,
|
|
11
|
+
"low": 0,
|
|
12
|
+
"unknown": 0
|
|
13
|
+
},
|
|
14
|
+
"findings": [
|
|
15
|
+
{
|
|
16
|
+
"id": "broken",
|
|
17
|
+
"category": "configuration",
|
|
18
|
+
"title": "Missing severity",
|
|
19
|
+
"status": "failed"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"warnings": []
|
|
23
|
+
}
|
|
24
|
+
}
|