kubernetes 升级失败:app/templates.将YAML转换为JSON时出错

7xllpg7q  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(2)|浏览(151)

我刚刚创建了一个新的 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 ':'

这是我的电子Map. 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在值.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创建messages.properties文件。如果我只输入一条消息,则一切正常,但如果我添加更多消息,则会出现错误。

fgw7neuy

fgw7neuy1#

值中的多行字符串正在摆脱缩进。尝试使用您显示的值运行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}}
{{/*- ^             ^      */}}
xfb7svmp

xfb7svmp2#

经过大量的搜索,我找到了该做什么。我修改了我的map.yaml如下:

{{- with .Values.application.i18n }}
  {{- toYaml . | nindent 4 }}
{{- end }}

相关问题