You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Tanka/Jsonnet编写StatefulSet包装函数遇语法错误求助

问题解决:Jsonnet语法错误修复

你的报错源于几处明显的语法问题,直接修正就能解决:

  1. 函数调用路径错误:你写的$.aed.customStateful里的aed未定义,函数实际放在fns字段下,应改为$.fns.customStateful
  2. 镜像名字符串缺失引号:container.new('test', alpine:latest)里的alpine:latest是字符串,必须加单引号,写成'alpine:latest'
  3. 函数返回值多余嵌套对象:customStateful函数里用{}包裹了stateful.new(...)表达式,导致后续的+对象合并操作失效,直接返回表达式即可,无需外层{}

修正后的完整代码:

{
  local k = import 'github.com/grafana/jsonnet-libs/ksonnet-util/kausal.libsonnet',
  local container = k.core.v1.container,
  local stateful = k.apps.v1.statefulSet,

  fns: {
    customStateful(name, config, c)::
      local stdLabels = {
        realm: $._config.ingress.realm,
        app: name,
        'app.kubernetes.io/part-of': config.name,
      },
    
      stateful.new(
        name=name,
        replicas=null,
        containers=[c]  // 补充传入的容器参数,避免传参无用
      )
      + stateful.metadata.withLabels(stdLabels)
      + stateful.spec.template.metadata.withLabels(stdLabels)
  },
  
  testStateful: $.fns.customStateful('test', { name: 'test-app' }, container.new('test', 'alpine:latest')),
  
  // 补充_config示例定义,避免realm字段找不到报错
  _config: {
    ingress: {
      realm: 'dev'
    }
  }
}

额外说明:你原本的containers=[]没有使用传入的容器参数c,这里改成了[c],保证传参有效;同时补充了_config的示例定义,避免因字段缺失引发新的报错。

内容的提问来源于stack exchange,提问作者strowi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 10:41:17