[英]Create a json parsable k8s configmaps containing lists of quoted elements with Helm
我试图修改一个掌舵图(这个),并且有一个模板可以生成一个 configMap。
配置 map 然后被不同的模块加载并解析为 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 解析器很高兴,但我需要那些 arguments 用于该过程的 rest。
有没有办法删除最后一个逗号,甚至使用 helm 模板以更优雅的方式加载字符串列表?
(我知道我可以对模板中的值进行硬编码,但我希望此部署可与其他参数一起使用)
提前致谢。
[编辑]
我通过以下方式找到了一个可行的策略: "val": [{{ join ",".Values.val }}]
现在唯一的问题是我需要在我的values.yaml
中使用双引号:
val:
- '"a"'
- '"b"'
- '"c"'
这没关系,但如果有人有它,我会对更清洁的解决方案感兴趣。
您可以使用toJson
function 将部分(在您的值文件的情况下)转换为 JSON:
两者都有效(区别在于您喜欢什么以及您之前是否要应用其他功能):
"val": {{ toJson .Values.val }}
"val": {{ .Values.val | toJson }}
还有一个toYaml
function。
所有示例都使用稍微修改的values.yaml
:
config:
val:
- a
- b
- c
data:
cfg.json: |-
{
"val": {{ toJson .Values.config.val }}
}
结果是
data:
cfg.json: |-
{
"val": ["a","b","c"]
}
data:
cfg.json: {{ .Values.config | toJson | quote }}
结果是
data:
cfg.json: "{\"val\":[\"a\",\"b\",\"c\"]}"
data:
cfg.json: |-
{{- .Values.config | toPrettyJson | nindent 4 }}
结果是
data:
cfg.json: |-
{
"val": [
"a",
"b",
"c"
]
}
data:
cfg.json: |-
{{- .Values.config | toYaml | nindent 4 }}
结果是
data:
cfg.json: |-
val:
- a
- b
- c
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.