如何从 Helm 模板中的 values.yaml 获取父元素的名称?
How do I get the name of a parent element from my values.yaml in a Helm template?
我的 values.yaml 中有一个部分如下所示:
env:
normal:
ENV_VAR_1: value
ENV_VAR_2: otherValue
secret:
secret-location:
ENV_VAR_USERNAME: username
ENV_VAR_PASSWORD: password
different-secret:
ENV_CONN_STRING: my_conn_string
我有一个 _helpers.tpl 函数,如下所示:
{{/*
Add environment variables
*/}}
{{- define "helpers.list-env-variables" }}
{{- range $key, $val := .Values.env.normal }}
- name: {{ $key }}
value: {{ $val }}
{{- end }}
{{- range $name := .Values.env.secret }}
{{- }}
{{- range $key, $val := $name }}
- name: {{ $key }}
valueFrom:
secretKeyRef:
name: {{ $name }}
key: {{ $val }}
{{- end }}
{{- end }}
{{- end }}
它在 deployment.yaml 中被调用,就像您期望的那样:
env:
{{- include "helpers.list-env-variables" . | indent 12 }}
所以正常的环境变量被添加得很好,但秘密的却没有。它将 secretKeyRef.name: 值指定为 map[ENV_VAR_USERNAME:username ENV_VAR_PASSWORD:password]
而不是 secret-key-ref
.
helm 调试输出:
...
env:
- name: ENV_VAR_1
value: value
- name: ENV_VAR_2
value: otherValue
- name: ENV_VAR_PASSWORD
valueFrom:
secretKeyRef:
name: map[ENV_VAR_USERNAME:username ENV_VAR_PASSWORD:password]
key: password
- name: ENV_VAR_USERNAME
valueFrom:
secretKeyRef:
name: map[ENV_VAR_USERNAME:username ENV_VAR_PASSWORD:password]
key: username
- name: ENV_CONN_STRING
valueFrom:
secretKeyRef:
name: map[ENV_CONN_STRING:my_conn_string]
key: my_conn_string
我已经将所有这些秘密加载到我的 K8s 集群中(它们在许多微服务之间共享,所以我不需要添加新的秘密,这正是默认的 Helm 模板似乎想要做的) - 我只需要参考现有的秘密。
我这里的假设是我的函数中缺少一些东西来获取元素的值(例如“秘密位置”),我只是不知道它是什么。如果有其他方法可以构建我的 values.yaml 来完成此任务,我也愿意这样做。
获取secret数据时,也可以通过key-val的形式获取
尝试用以下内容替换 _helpers.tpl
{{/*
Add environment variables
*/}}
{{- define "helpers.list-env-variables" }}
{{- range $key, $val := .Values.env.normal }}
- name: {{ $key }}
value: {{ $val }}
{{- end }}
{{- range $k, $v := .Values.env.secret }}
{{- }}
{{- range $key, $val := $v }}
- name: {{ $key }}
valueFrom:
secretKeyRef:
name: {{ $k }}
key: {{ $val }}
{{- end }}
{{- end }}
{{- end }}
我的 values.yaml 中有一个部分如下所示:
env:
normal:
ENV_VAR_1: value
ENV_VAR_2: otherValue
secret:
secret-location:
ENV_VAR_USERNAME: username
ENV_VAR_PASSWORD: password
different-secret:
ENV_CONN_STRING: my_conn_string
我有一个 _helpers.tpl 函数,如下所示:
{{/*
Add environment variables
*/}}
{{- define "helpers.list-env-variables" }}
{{- range $key, $val := .Values.env.normal }}
- name: {{ $key }}
value: {{ $val }}
{{- end }}
{{- range $name := .Values.env.secret }}
{{- }}
{{- range $key, $val := $name }}
- name: {{ $key }}
valueFrom:
secretKeyRef:
name: {{ $name }}
key: {{ $val }}
{{- end }}
{{- end }}
{{- end }}
它在 deployment.yaml 中被调用,就像您期望的那样:
env:
{{- include "helpers.list-env-variables" . | indent 12 }}
所以正常的环境变量被添加得很好,但秘密的却没有。它将 secretKeyRef.name: 值指定为 map[ENV_VAR_USERNAME:username ENV_VAR_PASSWORD:password]
而不是 secret-key-ref
.
helm 调试输出:
...
env:
- name: ENV_VAR_1
value: value
- name: ENV_VAR_2
value: otherValue
- name: ENV_VAR_PASSWORD
valueFrom:
secretKeyRef:
name: map[ENV_VAR_USERNAME:username ENV_VAR_PASSWORD:password]
key: password
- name: ENV_VAR_USERNAME
valueFrom:
secretKeyRef:
name: map[ENV_VAR_USERNAME:username ENV_VAR_PASSWORD:password]
key: username
- name: ENV_CONN_STRING
valueFrom:
secretKeyRef:
name: map[ENV_CONN_STRING:my_conn_string]
key: my_conn_string
我已经将所有这些秘密加载到我的 K8s 集群中(它们在许多微服务之间共享,所以我不需要添加新的秘密,这正是默认的 Helm 模板似乎想要做的) - 我只需要参考现有的秘密。
我这里的假设是我的函数中缺少一些东西来获取元素的值(例如“秘密位置”),我只是不知道它是什么。如果有其他方法可以构建我的 values.yaml 来完成此任务,我也愿意这样做。
获取secret数据时,也可以通过key-val的形式获取
尝试用以下内容替换 _helpers.tpl
{{/*
Add environment variables
*/}}
{{- define "helpers.list-env-variables" }}
{{- range $key, $val := .Values.env.normal }}
- name: {{ $key }}
value: {{ $val }}
{{- end }}
{{- range $k, $v := .Values.env.secret }}
{{- }}
{{- range $key, $val := $v }}
- name: {{ $key }}
valueFrom:
secretKeyRef:
name: {{ $k }}
key: {{ $val }}
{{- end }}
{{- end }}
{{- end }}