gpt4 book ai didi

kubernetes - 使用 helm 模板助手创建过滤列表

转载 作者:行者123 更新时间:2023-12-02 11:34:20 25 4
gpt4 key购买 nike

我正在尝试使用 helm 模板助手从我的 values.yaml 中的列表中过滤掉值。文件,基于每个列表成员中的一个键的值。

我的图表目前由这些文件组成 -
值.yaml -

namespaces:
- name: filter
profiles:
- nonProduction
- name: dont-filter
profiles:
- production
clusterProfile: production

模板/命名空间.yaml
apiVersion: v1
kind: List
items:
{{ $filteredList := include "filteredNamespaces" . }}
{{ range $filteredList }}
{{ .name }}
{{- end -}}

模板/_profile-match.tpl
{{/* vim: set filetype=mustache: */}}
{{- define "filteredNamespaces" -}}
{{ $newList := list }}
{{- range .Values.namespaces }}
{{- if has $.Values.clusterProfile .profiles -}}
{{ $newList := append $newList . }}
{{- end -}}
{{ end -}}
{{ $newList }}
{{- end -}}

问题是在我的帮助文件中, $newList变量仅在 range 范围内填充循环,我最终得到一个返回 namespaces.yaml 的空列表模板。
有没有办法解决这个问题?我是否采取了错误的方法来解决这个问题?

最佳答案

尽管 Go 模板几乎是通用函数,但它们有一些限制。其中一个限制是它们只返回一个字符串。你不能编写像 map 这样的基本功能助手。或 filter因为您无法返回结果列表。

如您所示,进行过滤的更直接的方法是将其移动到调用者的位置(如果在多个地方需要,可能会重复该条件):

items:
{{- range .Values.namespaces }}
{{- if has $.Values.clusterProfile .profiles }}
- {{ .name }}
{{- end }}
{{- end }}

使这项工作像您一样工作的一种hacky方法是将列表编码为其他一些基于字符串的格式,例如JSON:
{{- define "filteredNamespaces" -}}
...
{{ toJson $newList }}
{{- end -}}

{{- range include "filteredNamespaces" . | fromJson -}}...{{- end -}}

还要记住,您可以使用 helm install -f 注入(inject) Helm 值文件。选项。因此,与其列出选项的每个排列然后过滤掉您不想要的选项,您可以重组它以便 namespaces:仅包含您实际要使用的 namespace 列表,但随后您为每个配置文件使用不同的值文件。

关于kubernetes - 使用 helm 模板助手创建过滤列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61153730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com