gpt4 book ai didi

kubernetes-helm - kubernetes-helm 模板可以使用变量吗?

转载 作者:行者123 更新时间:2023-12-04 05:11:45 28 4
gpt4 key购买 nike

我有一个 k8s 资源的通用模板,我想将其扩展 n 次(如果您好奇,这样我就可以创建 mongo 集群的 n 个成员,并且他们使用 statefulset 资源,以便每个成员都有一个稳定的网络姓名)。

显然,我每次循环都需要不同的值。我正在遍历由 Sprig“直到”函数生成的一系列索引。但是循环的 $index 没有在“.”中设置。命名空间。所以我无法在我的 _helpers.tpl 文件中引用我定义的模板中的当前迭代。

这是一个带有完整 k8s 资源 yaml 的示例模板(我将其中的大部分缩写):

{{- define "mytest" -}} 
---
apiVersion: apps/v1beta1
kind: StatefulSet
abbreviated...
containers:
- name: mongod-$index
abbreviated...
{{- end -}}

调用者:
{{ range $index, $e := until .Values.mongod_count }}
{{include "mytest" .}}
{{ end}}

我只是得到: undefined variable “$index”

我也尝试过使用块,就像在我的(调用者)模板中这样:
{{ $foo := "somevalue" }}
{{ define "my_extra_labels" }} bla {{ .Values.test }}_{{$foo}}{{end}}
{{ template "mytest" . }}

这在我的 _helpers.tpl
{{/* Test stuff */}} 
{{- define "mytest" -}}
hello: world_how_are_{{ block "my_extra_labels" . }}{{ end }}
{{- end -}}

变量 $foo 未在“define”主体中定义。

这个模板范围感觉非常有限,以至于此时我无法看到如何使用它来解决我当前的场景。

有没有办法将变量插入“。”命名空间?如果是这样(交叉我的手指)有没有办法以某种方式合并命名空间,以便我仍然可以访问 .Values 和 .Chart 变量?

最佳答案

helm 中的模板无法访问变量。但是,传递给模板的上下文是字典。 sprig 库可从 Go 模板中访问,并可用于操作字典。

拿这个简化的模板:

{{- define "mytest" -}} 
- name: mongod-{{ .index }}
{{- end -}}

您现在可以将此模板称为示例:
{{ range $index := until 5 }}
{{- $p := dict "index" $index }}
{{include "mytest" $p}}
{{- end -}}

这将输出:
- name: mongod-0
- name: mongod-1
- name: mongod-2
- name: mongod-3
- name: mongod-4

您还可以将项目添加到现有或当前范围的字典中:
{{- $_ := set . "index" "none" }}
{{include "mytest" .}}

$_ 用于抑制不需要的输出,因为“set”返回新字典。以上返回:
- name: mongod-none

添加到字典中的任何值都将超出调用范围。如果您想避免污染现有字典,您可以使用以下命令强制进行深层复制:
{{-  $d := merge (dict) . -}}

添加到“$d”的任何东西都不会存在于“.”中。

关于kubernetes-helm - kubernetes-helm 模板可以使用变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42823623/

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