基于Values文件列表实现Helm Chart条件化安装失败求指导
解决Helm中基于Values列表/映射实现Manifest可选安装的问题
先理清两种写法的正确用法:
1. 列表类型的正确实现
Values文件里两种列表格式都合法:
# 行内写法 provisioners: ["gp","test"] # 多行写法 provisioners: - "gp" - "test"
在Manifest里判断列表是否包含指定值,要用has函数,但必须先处理变量未定义的情况,避免空值触发模板报错:
{{- if has "test" (default list .Values.provisioners) }} # 这里写你需要可选安装的Manifest内容 {{- end }}
如果直接写has "test" .Values.provisioners,当Values里没定义provisioners时会导致模板渲染失败,Chart自然无法安装。
2. 映射(字典)类型的正确实现
如果想用映射来控制,Values要写成键值对(通常用布尔值标记是否启用):
provisioners: gp: true test: true
这时在Manifest里可以用两种方式判断:
# 方式1:检查键是否存在 {{- if hasKey .Values.provisioners "test" }} # 方式2:更常用,直接判断是否启用(键不存在时默认返回false) {{- if .Values.provisioners.test }} # 可选安装的Manifest内容 {{- end }}
你之前的问题根源:
- 第二种写法用了列表却误用
hasKey函数——hasKey只适用于映射类型,列表用它判断永远不成立,所以不会渲染任何内容。 - 第一种写法大概率是没处理provisioners未定义的情况,触发了模板报错,导致Chart安装失败。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

