我有一个RBAC的图表。
一个模板是
...
rules:
{{- range $rule := .Values.rules }}
- apiGroups: {{ .apiGroupts }}
resources: {{ .resources }}
verbs: {{ .verbs }}
{{- end }}
In my values
rules:
- apiGroups: [""]
...
渲染结果为
- apiGroups: []
问题是helm忽略空字符串作为值。它会导致资源角色出现问题,因为"表示核心组。
rules[0].apiGroups: Required value: resource rules must supply at least one api group
我尝试了以下方法。但是它不能识别语法
- apiGroups: {{ .apiGroups | default [""] }}
不回答这个确切的用例,而是回答标题中的问题,这就是我如何得到这个问题的。答案是使用hasKey
模板函数。if
的问题是它将空字符串或""
视为nil
。
给定:
values.yaml
string: foo
emptyString: ""
模板/test.yaml
{{- with .Values}}
{{- if .string }}
{{ printf "if string=%q" .string }}
{{- end }}
{{- if .emptyString }}
{{ printf "if emptyString=%q" .emptyString }}
{{- end }}
{{- if hasKey . "string" }}
{{ printf "haskey string=%q" .string }}
{{- end }}
{{- if hasKey . "emptyString" }}
{{ printf "haskey emptyString=%q" .emptyString }}
{{- end }}
{{- end }}
将返回:
if string="foo"
haskey string="foo"
haskey emptyString=""
也许可以尝试使用quote
添加管道以允许空字符串
- apiGroups: {{ .apiGroups | quote }}
https://helm.sh/docs/howto/charts_tips_and_tricks/quote-strings-dont-quote-integers