如何在Jsonnet中单次split单行赋值多变量生成端口配置?
解法
Jsonnet 原生支持数组解构赋值,只需一次 std.split 即可完成两个变量的赋值,正确写法如下:
{ // 此处可替换为 $.sharedConfig.ports 引用全局配置 local ports = ['tcp-1514', 'tcp-8080', 'tcp-8443'], ports: [ { // 核心语法:用方括号包裹变量列表完成数组解构 local [proto, port] = std.split(port_obj, '-'); name: port_obj, containerPort: std.parseInt(port), // 若配置要求端口为数字类型需加此行,要字符串可直接写 port protocol: proto } for port_obj in ports ] }
报错原因说明
你之前的写法存在两个语法错误:
::是 Jsonnet 中声明对象隐藏字段的语法,不能用于局部变量赋值,局部变量赋值统一用=- 多变量解构赋值需要用方括号包裹变量列表,不能直接用逗号分隔变量名
输出验证
上述代码执行后生成的 YAML 结构完全符合需求:
ports: - name: "tcp-1514" containerPort: 1514 protocol: "tcp" - name: "tcp-8080" containerPort: 8080 protocol: "tcp" - name: "tcp-8443" containerPort: 8443 protocol: "tcp"
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

