未知属性名时如何检查values.yaml中secrets字段是否存在有效条目?
你可以通过Helm内置的len函数判断.Values.secrets的元素数量,不需要预知具体属性名,同时增加非空校验避免未定义报错,仅当存在有效条目时才渲染该段volume配置即可。
调整后模板示例
如果你的volumes列表还有其他固定配置,可以只给secrets相关的volume段加判断:
volumes: # 其他固定的volume配置写在这里,不受影响 {{- if and .Values.secrets (gt (len .Values.secrets) 0) }} - name: secrets projected: sources: {{- range $secretKey := .Values.secrets }} - secret: name: {{ $secretKey | kebabcase }}-secret {{- end }} {{- end }}
如果volumes列表仅包含这一个secrets相关配置,可以直接把整个volumes字段包在判断里,避免生成无效的空volumes字段:
{{- if and .Values.secrets (gt (len .Values.secrets) 0) }} volumes: - name: secrets projected: sources: {{- range $secretKey := .Values.secrets }} - secret: name: {{ $secretKey | kebabcase }}-secret {{- end }} {{- end }}
逻辑说明
and .Values.secrets先校验.Values.secrets字段存在且不为空值,避免取值报错gt (len .Values.secrets) 0校验.Values.secrets的元素数量大于0,不管它是数组类型还是字典类型,len函数都可以正确返回元素个数- 只有两个条件同时满足时,才会渲染secrets对应的配置段,自然就不会出现
sources为空的校验错误
内容的提问来源于stack exchange,提问作者Vaccano
相关产品推荐
相关产品推荐

