我试图修改一个舵图(这一个),其中一个模板用于生成一个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"'没关系,但如果有人有清洁的解决方案,我会感兴趣的。
发布于 2021-07-30 12:20:00
您可以使用toJson函数将部分(在您的值文件中)转换为JSON:
这两项工作(不同之处在于您所喜欢的,以及您是否希望在此之前应用其他功能):
"val": {{ toJson .Values.val }}"val": {{ .Values.val | toJson }}还有一个toYaml函数。
示例
所有示例都使用稍微修改过的values.yaml
config:
val:
- a
- b
- c示例1:只是数组
data:
cfg.json: |-
{
"val": {{ toJson .Values.config.val }}
}结果:
data:
cfg.json: |-
{
"val": ["a","b","c"]
} 例2:整个章节
data:
cfg.json: {{ .Values.config | toJson | quote }}结果:
data:
cfg.json: "{\"val\":[\"a\",\"b\",\"c\"]}"示例3:漂亮的JSON
data:
cfg.json: |-
{{- .Values.config | toPrettyJson | nindent 4 }}结果:
data:
cfg.json: |-
{
"val": [
"a",
"b",
"c"
]
}例4: YAML
data:
cfg.json: |-
{{- .Values.config | toYaml | nindent 4 }}结果:
data:
cfg.json: |-
val:
- a
- b
- chttps://stackoverflow.com/questions/63232517
复制相似问题