使用Tanka/Jsonnet编写StatefulSet包装函数遇语法错误求助
问题解决:Jsonnet语法错误修复
你的报错源于几处明显的语法问题,直接修正就能解决:
- 函数调用路径错误:你写的
$.aed.customStateful里的aed未定义,函数实际放在fns字段下,应改为$.fns.customStateful - 镜像名字符串缺失引号:
container.new('test', alpine:latest)里的alpine:latest是字符串,必须加单引号,写成'alpine:latest' - 函数返回值多余嵌套对象:
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
相关产品推荐
相关产品推荐

