Skip to content

API 响应缺少 extensions 字段 — 数据写入集群但无法通过接口读取 #1060

@GreenShadeZhang

Description

@GreenShadeZhang

问题描述

SandboxCreateOptions.extensions 的数据可以通过 API 传入并最终存储到集群(Pod annotations),但目前没有任何 API 接口会返回 extensions 数据

数据流转分析

✅ 写入路径(正常工作)

  1. 用户调用 POST /sandboxes,传入 extensions:
{
  "extensions": {
    "opensandbox.extensions.custom-label": "中文数据"
  }
}
  1. 服务端 apply_extensions_to_annotationsserver/opensandbox_server/extensions/codec.py)将带 opensandbox.extensions. 前缀的 key 转换为 Pod annotation opensandbox.io/extensions.*

  2. 最终到达集群,Pod 上有:

metadata:
  annotations:
    opensandbox.io/extensions.custom-label: "中文数据"

❌ 读取路径(缺失)

  1. Response Schema 没有 extensions 字段

    • CreateSandboxResponse — 无
    • Sandbox — 无
  2. _build_sandbox_from_workloadworkload_mapper.py)不读取 annotations 恢复 extensions

  3. 只有 get_access_renew_extend_seconds 单独读取 opensandbox.io/access-renew-extend-seconds,其他 extension 数据被忽略

影响范围

接口 是否返回 extensions
POST /sandboxes
GET /sandboxes/{id}
GET /sandboxes

建议修复

  1. Sandbox / CreateSandboxResponse schema 中添加 extensions 字段
  2. _build_sandbox_from_workload 中从 annotations 反向提取 opensandbox.io/extensions.* 并还原为 extensions dict
  3. 更新 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.pyapply_extensions_to_annotations
  • specs/sandbox-lifecycle.yml — API 契约

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions