在 Helm 中创建“如果存在则插入”辅助函数

问题描述 投票:0回答:1

我正在创建一个库图表,该图表将在十多个不同的部署中使用。每个容器只有一个容器,在容器描述中,我在某些容器中有以下定义,但在其他容器中没有:

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 检查?

kubernetes-helm go-templates
1个回答
0
投票

我能想到的绝对最短路径使用

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 }}

这似乎并不比前面的选项更好。

© www.soinside.com 2019 - 2024. All rights reserved.