kubernetes Helm模板未在ConfigMap中输出预期值

i2loujxw  于 2023-11-17  发布在  Kubernetes
关注(0)|答案(2)|浏览(150)

我在config_map.yaml和helm值文件中有以下模板。
在cm模板中,我有以下内容:

"VARKEY": {{.Values.VARKEY}}

字符串
在values文件中,我有以下内容:

"VARKEY": ["var1", "var2"]


当我创建ConfigMap或使用Helm模板来测试它时,我收到以下信息。

"VARKEY": [var1 var2]


我的应用程序期望cm值如下。期望输出:

"VARKEY": ["var1", "var2"]


如何实现预期产出
我如何才能实现预期的输出,为什么Helm要更改values文件中的数据?
实际上,该Map是使用JSON格式设置这样,因为应用程序是预期conf.json文件.和问题出现在最初描述的后格式的值是由 Helm 改变.这是最好的方法来修复?squote函数?

templates/templates map.yaml

data:
  conf.json: |+
    {
       {{ .Values.VARKEY }},
       "{{ .Values.OTHERKEY_STRING }}",
       {{ .Values.ANOTHERKEY_INT }}"
    }

vwoqyblh

vwoqyblh1#

你的值是一个YAML列表,你在模板代码中看到了这个结构。ConfigMap的值总是字符串,你还需要确保输出是一个YAML字符串,而不是其他类型的结构。
一种解决方法是显式引用values.yaml中的值,然后您将获得预期的输出(需要注意)。

# values.yaml
VARKEY: '["var1", "var2"]'

个字符
另一种选择是继续接受列表语法中的值,但随后在输出中显式地将其呈现为JSON。仅仅写出{{ $someList }}将从Go模板引擎获得默认格式,这并不是特别有用;您需要使用toJson模板函数来获取JSON语法。

# values.yaml
"VARKEY": ["var1", "var2"]

# equivalently (with a different name, but same structure)
varKey:
  - var1
  - var2
# templates/configmap.yaml
data:
  VARKEY: |-
{{ .Values.VARKEY | toJson | indent 4 }}

的字符串
在最后一个例子中,我显式地使用了YAML块标量语法。在YAML中的各种引号和转义机制中,它是唯一一种对字符串内容不敏感的机制,前提是您在每行的开头放置一致数量的空格使用squote将字符串放在单引号中对字符串本身包含单引号是敏感的,quote和双引号也是如此。

bnlyeluc

bnlyeluc2#

考虑直接将'values'中的VARKEY定义为字符串,而不是字符串数组的形式。
values.yaml

VARKEY: '["var1", "var2"]'

字符串
模板/cm.yaml

"VARKEY": {{ .Values.VARKEY }}


输出

"VARKEY": ["var1", "var2"]

相关问题