toYaml 导致将 YAML 转换为 JSON 时出错

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

我尝试从值填充我的部署并收到错误:

YAML parse error on helm-general/templates/deployment.yaml: error converting YAML to JSON: yaml: line 46: mapping values are not allowed in this context

我的价值观.yaml

env:
  LIMESURVEY_DB_HOST: 
    value: "host.com"
  LIMESURVEY_DB_PASSWORD: 
    valueFrom:
      secretKeyRef:
        name: limesurvey-pass
        key: pass

部署.yaml

        env:
          {{- range $k, $v := .Values.env }}
          - name: {{ $k }}
            {{- $v | toYaml | indent 7 }}
          {{- end }}
kubernetes kubernetes-helm go-templates
1个回答
0
投票

输出中缺少换行符。 有两种方法可以解决这个问题。 一种是使用

nindent
函数而不是
indent
,它也会插入前导换行符

      - name: {{ $k }}
        {{- $v | toYaml | nindent 7 }}

另一个对空白的考虑更加仔细。

indent
将在每行的开头插入空格,包括第一行,因此包含
indent
的行本身不应缩进。 您确实需要在其前面添加换行符,因此您不需要 Go 模板
-
空白控制标记。 这会引导您

      - name: {{ $k }}
{{ $v | toYaml | indent 7 }}

(缩进很重要,第二行不缩进不是打字错误。)

由于您只是尝试按原样从值中重现整个块,因此您也不需要

range
循环,这可以避免这里的一点复杂性。

spec:
  template:
    spec:
      containers:
        - env:
{{ .Values.env | toYaml | indent 12 }}
© www.soinside.com 2019 - 2024. All rights reserved.