升级失败:app/templates/configmap.i18n.yaml 上的 YAML 解析错误:将 YAML 转换为 JSON 时出错

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

我刚刚创建了一个新的 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 文件。如果我只输入一条消息,一切都会正常工作,但如果我添加更多消息,则会出现错误。

spring-boot kubernetes kubernetes-helm
1个回答
0
投票

值中的多行字符串取消了缩进。尝试使用您显示的值运行

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}}
{{/*- ^             ^      */}}
© www.soinside.com 2019 - 2024. All rights reserved.