使用Helm Template部署akv2k8s Secrets失败,YAML转JSON报错
解决Helm Template部署akv2k8s Secrets时的YAML格式错误
问题描述
使用Helm Template部署akv2k8s Secrets时执行失败,报错信息:
error converting YAML to JSON: yaml: mapping values are not allowed in this context
已尝试在线YAML校验工具排查但未发现问题,使用--debug参数能够渲染出预期的清单文件。相关配置文件如下:
values.yaml
akv2k8s: enabled: true vaults: vaultcmms: secretkey: secretvalue secretkey1: secretvalue1 vaulttenant: secretkey: secretvalue secretkey1: secretvalue2
akv2k8s.yaml(原模板文件)
{{- if .Values.akv2k8s.enabled -}} {{- range $vault, $content := .Values.akv2k8s.vaults }} {{- range $key, $value := $content }} apiVersion: spv.no/v2beta1 kind: AzureKeyVaultSecret spec: vault: {{ $vault }} name: {{ $key}} object: name: {{ $value}} type: secret {{- end }} {{- end }} {{- end }}
错误原因
模板文件的YAML结构存在缩进错误:spec.vault被赋值为字符串{{ $vault }},但后续的name字段缩进级别与vault同级,导致YAML解析器认为vault的值是一个映射结构,与前面的字符串赋值冲突,触发格式错误。
修复方案
调整模板中spec的结构,将vault定义为包含name字段的映射,同时修正整体缩进:
修复后的akv2k8s.yaml
{{- if .Values.akv2k8s.enabled -}} {{- range $vault, $content := .Values.akv2k8s.vaults }} {{- range $key, $value := $content }} apiVersion: spv.no/v2beta1 kind: AzureKeyVaultSecret spec: vault: name: {{ $vault }} name: {{ $key }} object: name: {{ $value }} type: secret --- {{- end }} {{- end }} {{- end }}
说明:
- 将
vault: {{ $vault }}修改为vault:下嵌套name: {{ $vault }},符合AzureKeyVaultSecret资源的规范结构 - 调整
name字段的缩进,使其与vault同级,作为spec的直接子字段 - 添加
---分隔符,确保多个生成的资源能被YAML正确识别为独立文档
验证步骤
执行以下命令测试模板渲染是否正常:
helm template .
确认输出的YAML格式正确后,再进行部署操作。
内容的提问来源于stack exchange,提问作者Usman Khawar
相关产品推荐
相关产品推荐

