我刚刚创建了一个新的 Helm 图表,但是当我运行时
helm upgrade -i
我收到以下错误:
Error: UPGRADE FAILED: YAML parse error on app/templates/configmap.i18n.yaml: error converting YAML to JSON: yaml: line 19: could not find expected ':'
这是我的 configmap.i18n.yaml:
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "app.name" . }}-i18n-configuration
labels:
{{- include "app.labels" . | nindent 4 }}
data:
{{- range $lang, $messages := .Values.application.i18n }}
{{ $lang }}: |
{{ $messages }}
{{- end }}
i18n 在 value.yaml 中给出,如下:
i18n:
en: |
site.name="T"
site.name.Server="Tether"
site.name.Test="Test"
fa: |
site.name="ت"
site.name.Server="تتر"
site.name.Test="تست"
如果值文件如下,则一切正常。
i18n:
en: |
site.name="T"
fa: |
site.name="ت"
我想通过 helm configmap 创建 messages.properties 文件。如果我只输入一条消息,一切都会正常工作,但如果我添加更多消息,则会出现错误。
值中的多行字符串取消了缩进。尝试使用您显示的值运行
helm template --debug
;我希望你会看到类似的东西
data:
en: |
site.name="T"
site.name.Server="Tether"
site.name.Test="Test"
第一行之后的行根本没有缩进。
Helm 值 YAML 文件和输出模板中以
|
结尾的行引入了 YAML 块标量。以下行被视为单个字符串,删除所有前导空格。当你写出来时,你需要重新插入前导空格。 indent
模板函数将在多行字符串的每行前面插入空格,但您需要确保该行本身没有缩进,以免出现双缩进。
data:
{{- range $lang, $messages := .Values.application.i18n }}
{{ $lang }}: |
{{ $messages | indent 4}}
{{- end }}
在
metadata:
块中,您可以使用 nindent
进行类似的调用。这使用模板空白剪切指示符 {{-
来删除在此之前的所有空白,包括行开头的前导空白和前面的换行符;然后 nindent
以换行符开始生成的字符串。这将使您明显正确地缩进模板中的行,但实际的空白将会丢失。
{{ $lang }}: |
{{- $messages | nindent 4}}
{{/*- ^ ^ */}}