根据节点数量,我需要引用yaml文件中的证书和密钥。
{{- $root := . -}}
{{ range $k, $v := until (int ($root.Values.data.nodeCount) ) }}
apiVersion: v1
kind: Secret
metadata:
name: {{ $root.Values.clusterName }}-nodes-{{$k}}-secret
type: Opaque
data:
crt: {{ printf "$root.Values.data.node_%d_key" $k }}
---
{{- end }}
示例输出:它不显示输出值,仅显示 printf 输出(字符串),我如何评估 printf 输出以获取评估以从values.yaml 检索结果
---
apiVersion: v1
kind: Secret
metadata:
name: test-nodes-0-secret
type: Opaque
data:
crt: $root.Values.data.node_0_key
---
apiVersion: v1
kind: Secret
metadata:
name: test-nodes-1-secret
type: Opaque
data:
crt: $root.Values.data.node_1_key
示例值.yml
nodeCount: 3
clusterName: "test"
data:
nodeCount: 2
node_0_crt: "test"
node_0_key: "test"
node_1_crt: "test1"
node_1_key: "test1"
请注意,Helm 不使用 Jinja 模板语法。如果您尝试在 Helm 模板中使用 Jinja 表达式,它将无法工作。 Helm 使用 Go 模板(带有一堆自定义函数)。
tpl
函数,它可以让您将字符串评估为 Helm 模板。可能看起来像这样:
{{ range until (int $.Values.data.nodeCount) }}
apiVersion: v1
kind: Secret
metadata:
name: {{ $.Values.clusterName }}-nodes-{{.}}-secret
type: Opaque
data:
crt: {{ tpl (printf "{{ .Values.data.node_%d_key }}" .) $ }}
---
{{- end }}
请注意,我还删除了您对
$root
的使用;如果您需要显式引用根上下文,则只需引用 $
变量即可。我还稍微简化了外部 range
循环。
鉴于上述模板和您的示例数据,我得到以下输出:
---
# Source: example/templates/secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: test-nodes-0-secret
type: Opaque
data:
crt: test
---
# Source: example/templates/secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: test-nodes-1-secret
type: Opaque
data:
crt: test1