我正在创建一个库图表,该图表将在十多个不同的部署中使用。每个容器只有一个容器,在容器描述中,我在某些容器中有以下定义,但在其他容器中没有:
spec:
containers:
- image: hostname/imagename:versionNumber
**imagePullPolicy: Always** # only some charts list this
**ports:
- containerPort: xxxx** # also not in every yaml file
我已经让它在库图表中使用它,但必须重复使用多次似乎不太干燥。
{{ if .Values.container }}
{{ if .Values.container.port }}
ports: {{ .Values.container.port }}
{{ end }}
{{ end }}
现有的 helm 函数是否已经具备此功能?如果没有,是否有一种方法可以编写一个辅助函数(为了清晰起见,最好有 1 个参数),在给定完整路径的情况下运行这些 if 检查?
dig
模板函数从嵌套路径中提取版本,结合 with
块表达式将其结果分配给 .
特殊变量。
{{- with .Values | dig "container" "port" "" }}
ports: {{ . }}
{{- end }}
如果您要在同一字典中进行多次查找,另一种有用的技术是将其提取到变量中,用空字典替换
nil
缺失值。
{{- $containers := .Values.containers | default dict }}
{{- with $containers.port }}
ports: {{ . }}
{{- end }}
在辅助函数中执行此操作可能有点棘手,因为您需要将多个参数编组为单个参数,然后辅助函数只能返回一个字符串。你的调用看起来像这样
{{- with include "check-path" (list .Values "container" "port") }}
ports: {{ . }}
{{- end }}
这似乎并不比前面的选项更好。