【发布时间】:2020-08-03 15:37:47
【问题描述】:
我正在尝试修改 helm 图表 (this one),并且有一个模板可以生成 configMap。
配置映射随后被不同的模块加载并解析为 json。
问题是我需要在某个时候将字符串列表放入 json 中。仅传递模板中的值会导致未引用的列表。然后我尝试使用一个范围逐个元素地执行它,但后来我得到了一个最后的逗号。我正在部署的图像使用的 json 解析器(我无法控制)不会接受非严格的 json。即,列表中的最后一个元素不能有尾随逗号。
这是一个例子values.yaml:
val:
- "a"
- "b"
- "c"
还有一些template.tpl:
apiVersion: v1
kind: ConfigMap
metadata:
name: some-configmap
data:
cfg.json: |
{
"val": [{{ range .Values.val }}{{ . | quote }},{{ end }}]
}
但这会产生:
{
"val": ["a","b","c",]
}
json 解析器拒绝,并显示如下消息:
internal/modules/cjs/loader.js:1008
throw err;
^
SyntaxError: /etc/config/..2020_08_03_15_32_26.221540866/pelias.json: Unexpected token ] in JSON at position 1744
at JSON.parse (<anonymous>)
at Object.Module._extensions..json (internal/modules/cjs/loader.js:1005:27)
at Module.load (internal/modules/cjs/loader.js:811:32)
at Function.Module._load (internal/modules/cjs/loader.js:723:14)
at Module.require (internal/modules/cjs/loader.js:848:19)
at require (internal/modules/cjs/helpers.js:74:18)
at getConfig (/code/pelias/schema/node_modules/pelias-config/index.js:66:21)
at Object.generate (/code/pelias/schema/node_modules/pelias-config/index.js:24:18)
at Object.<anonymous> (/code/pelias/schema/scripts/create_index.js:2:41)
at Module._compile (internal/modules/cjs/loader.js:955:30)
如果我只传递空列表,json 解析器会很高兴,但我需要这些参数用于其余的过程。
有没有办法删除最后一个逗号,甚至使用 helm 模板以更优雅的方式加载字符串列表?
(我知道我可以对模板中的值进行硬编码,但我希望此部署可与其他参数一起使用)
提前致谢。
[编辑]
我发现了一个可行的策略:
"val": [{{ join "," .Values.val }}]
现在唯一的问题是我需要在values.yaml 中使用双引号:
val:
- '"a"'
- '"b"'
- '"c"'
这没关系,但如果有人有,我会对更清洁的解决方案感兴趣。
【问题讨论】:
标签: json kubernetes kubernetes-helm