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

问题描述 投票:0回答:1

我在 config_map.yaml 和 helm 值文件中有以下模板。

在cm模板中我有以下内容:

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

在值文件中我有以下内容:

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

当我创建 ConfigMap 或使用 helm 模板来测试它时,我收到以下内容。

"VARKEY": [var1 var2]

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

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

如何达到预期产出

我如何实现预期的输出,为什么 Helm 更改值文件中的数据?

kubernetes openshift kubernetes-helm
1个回答
0
投票

您的值是一个 YAML 列表,您可以在模板代码中看到该结构。 ConfigMap 的值始终是字符串,您还需要确保输出是 YAML 字符串而不是其他类型的结构。

一个答案是明确引用

values.yaml
中的值,然后您将得到您期望的输出(需要小心)。

# values.yaml
VARKEY: '["var1", "var2"]'
# templates/configmap.yaml
data:
  VARKEY: {{ squote .Values.VARKEY }}

另一种选择是继续接受列表语法中的值,但然后在输出中将其显式呈现为 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 块标量语法。这通常会创建一个多行字符串(如果您需要的话,可以与

toYaml
很好地配对)。在 YAML 中的各种引用和转义机制中,它是唯一对字符串内容不敏感的机制,前提是您在每行的开头放置了一致数量的空格(即
indent
it)。使用
squote
将字符串放在单引号中对包含单引号的字符串本身很敏感,与
quote
和双引号类似。

© www.soinside.com 2019 - 2024. All rights reserved.