问题描述
SandboxCreateOptions.extensions 的数据可以通过 API 传入并最终存储到集群(Pod annotations),但目前没有任何 API 接口会返回 extensions 数据。
数据流转分析
✅ 写入路径(正常工作)
- 用户调用
POST /sandboxes,传入 extensions:
{
"extensions": {
"opensandbox.extensions.custom-label": "中文数据"
}
}
-
服务端 apply_extensions_to_annotations(server/opensandbox_server/extensions/codec.py)将带 opensandbox.extensions. 前缀的 key 转换为 Pod annotation opensandbox.io/extensions.*
-
最终到达集群,Pod 上有:
metadata:
annotations:
opensandbox.io/extensions.custom-label: "中文数据"
❌ 读取路径(缺失)
-
Response Schema 没有 extensions 字段:
CreateSandboxResponse — 无
Sandbox — 无
-
_build_sandbox_from_workload(workload_mapper.py)不读取 annotations 恢复 extensions
-
只有 get_access_renew_extend_seconds 单独读取 opensandbox.io/access-renew-extend-seconds,其他 extension 数据被忽略
影响范围
| 接口 |
是否返回 extensions |
POST /sandboxes |
❌ |
GET /sandboxes/{id} |
❌ |
GET /sandboxes |
❌ |
建议修复
- 在
Sandbox / CreateSandboxResponse schema 中添加 extensions 字段
- 在
_build_sandbox_from_workload 中从 annotations 反向提取 opensandbox.io/extensions.* 并还原为 extensions dict
- 更新
specs/sandbox-lifecycle.yml OpenAPI 契约
相关文件
server/opensandbox_server/api/schema.py — response models
server/opensandbox_server/services/k8s/workload_mapper.py — _build_sandbox_from_workload
server/opensandbox_server/extensions/codec.py — apply_extensions_to_annotations
specs/sandbox-lifecycle.yml — API 契约
问题描述
SandboxCreateOptions.extensions的数据可以通过 API 传入并最终存储到集群(Pod annotations),但目前没有任何 API 接口会返回 extensions 数据。数据流转分析
✅ 写入路径(正常工作)
POST /sandboxes,传入extensions:{ "extensions": { "opensandbox.extensions.custom-label": "中文数据" } }服务端
apply_extensions_to_annotations(server/opensandbox_server/extensions/codec.py)将带opensandbox.extensions.前缀的 key 转换为 Pod annotationopensandbox.io/extensions.*最终到达集群,Pod 上有:
❌ 读取路径(缺失)
Response Schema 没有
extensions字段:CreateSandboxResponse— 无Sandbox— 无_build_sandbox_from_workload(workload_mapper.py)不读取 annotations 恢复 extensions只有
get_access_renew_extend_seconds单独读取opensandbox.io/access-renew-extend-seconds,其他 extension 数据被忽略影响范围
POST /sandboxesGET /sandboxes/{id}GET /sandboxes建议修复
Sandbox/CreateSandboxResponseschema 中添加extensions字段_build_sandbox_from_workload中从 annotations 反向提取opensandbox.io/extensions.*并还原为 extensions dictspecs/sandbox-lifecycle.ymlOpenAPI 契约相关文件
server/opensandbox_server/api/schema.py— response modelsserver/opensandbox_server/services/k8s/workload_mapper.py—_build_sandbox_from_workloadserver/opensandbox_server/extensions/codec.py—apply_extensions_to_annotationsspecs/sandbox-lifecycle.yml— API 契约