Helm模板读取values文件数组解析失败,请求解决方法
问题分析与解决方案
当前模板解析失败的核心原因:你的values文件里arguments是对象数组(每个元素都是{val: 路径}的结构),但你期望输出的是字符串数组。用toYaml直接渲染会保留原对象结构,生成的内容不符合JSON解析要求,导致失败。
解决方法
方法1:生成YAML格式的字符串数组
修改模板文件,通过range遍历数组,提取每个元素的val字段:
spec: arguments: {{ range .Values.sparkapplication.spec.arguments }} - {{ .val | quote }} {{ end }}
渲染后输出:
spec: arguments: - "/spark_app_prop/config.properties" - "/spark_app_prop/log4j.properties"
该结构可正常解析为JSON数组。
方法2:直接生成JSON格式的数组
如果希望直接输出方括号包裹的JSON数组格式,用pluck提取所有val值后转成JSON:
spec: arguments: {{ toJson (pluck "val" .Values.sparkapplication.spec.arguments) }}
渲染后会得到你期望的结果:
spec: arguments: ["/spark_app_prop/config.properties","/spark_app_prop/log4j.properties"]
补充:如果需要将路径替换为示例中的/tmp/...,可在模板中增加字符串替换逻辑,比如:
{{ range .Values.sparkapplication.spec.arguments }} - {{ .val | replace "/spark_app_prop" "/tmp/spark-streaming-poc-app-1.0.0.1/infa_conf" | quote }} {{ end }}
内容的提问来源于stack exchange,提问作者shadow0wolf
相关产品推荐
相关产品推荐

