You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Helm模板渲染values.yaml含{}字段失败,求解决方案

Argo Rollout金丝雀步骤Helm模板渲染错误修复

问题场景

你的values.yaml中定义了Istio金丝雀发布的步骤数组:

istio:
  canary:
    enabled: true
    steps:
    - setWeight: 10
    - pause: {}
    - setWeight: 20
    - pause: { duration: 20 }
    - setWeight: 30
    - pause: {}
    - setWeight: 40
    - pause: { duration: 20 }
    - setWeight: 50
    - pause: {}
    - setWeight: 75
    - pause: { duration: 20 }
    - setWeight: 90
    - pause: {}

需要将该数组渲染到argos-rollout.yaml的spec.strategy.canary.steps位置,但原模板写法报错:

error converting YAML to JSON: yaml: mapping values are not allowed in this context

原错误模板代码:

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: my-rollout
spec:
  strategy:
    canary:
      steps:
      {{- range .Values.istio.canary.steps }}
        - {{ toYaml . | nindent 8 }}
      {{- end }}

错误原因

原写法中使用nindent 8会在toYaml输出的每一行前额外添加8个空格,结合列表项- 的已有缩进,导致YAML层级错乱,触发解析错误。

修复方案

有两种简洁的修复方式:

方式1:直接渲染整个数组(推荐)

不需要循环单个元素,直接将values中的steps数组完整渲染到目标位置,自动保持正确格式:

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: my-rollout
spec:
  strategy:
    canary:
      steps:
{{ toYaml .Values.istio.canary.steps | indent 8 }}

方式2:调整循环中的缩进处理

如果必须使用range循环,改用indent并调整缩进数值,同时用trim去除多余换行:

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: my-rollout
spec:
  strategy:
    canary:
      steps:
      {{- range .Values.istio.canary.steps }}
      - {{ toYaml . | indent 6 | trim }}
      {{- end }}

两种方式都能确保生成的YAML格式正确,避免解析错误。

内容的提问来源于stack exchange,提问作者esahmo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 18:05:23