如何在 values.yaml 中引用命名空间?



我希望能够在values.yaml中引用当前命名空间,以使用它来为一些值添加后缀,例如

# in values.yaml
someParam: someval-{{ .Release.Namespace }}

以这种方式定义它比进入我的所有模板并添加{{ .Release.Namespace }}要好得多。如果我能用values.yaml做到这一点,那就更清楚了,只需要在一个地方定义。

可以使用命名模板来定义可重用的帮助程序模板。 例如

templates/_helpers.tpl

{{- define "myChart.someParam" -}}someval-{{ .Release.Namespace }}{{- end -}}

templates/configmap.yaml中(例如(:

apiVersion: v1
kind: ConfigMap
metadata:
name: something
data:
foo: {{ template "myChart.someParam" . }}

结果:

$ helm template . --namespace=bar
---
# Source: helm/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: something
data:
foo: someval-bar

如果您知道someParam可能包含模板构造,Helm 包含一个解释它的tpl函数。

- name: SOME_VARIABLE
value: {{ .Values.someParam | tpl }}

如果图表允许这样做,它通常会记录它。 作为一个具体的例子,helm/charts PostgreSQL 图表记录了它的configurationConfigMap设置为

带有PostgreSQL配置文件的ConfigMap(注意:覆盖postgresqlConfigurationpgHbaConfiguration(。该值作为模板进行评估。

因此,对于该特定值,您可以将模板宏放入values.yaml文件中。

只是为了澄清:

正如社区所描述的:Amit Kumar Gupta和David Maze,没有好的解决方案由helm原生支持,以便在不修改模板的情况下更改此行为。 看起来在您的情况下(不修改 helm 模板(最好的解决方案就是在 helm 安装期间使用带有参数的设置

喜欢:

helm install --set foo=bar --set foo=newbar ./redis

github中有一个关于你的问题的建议: 建议:允许在values.yaml中模板化

来自最新评论之一:

这是我遇到的第一个线程,而不是在这里发表评论...... 另请参阅#2514

:)值得庆幸的是,最新的Helm手册说明了如何实现这一目标。 https://helm.sh/docs/howto/charts_tips_and_tricks/#using-the-tpl-function

诀窍是将变量括在"或 yaml 块中|-中,然后 在模板中引用它,{{ tpl .Values.variable . }}似乎让赫尔姆开心。

例:

$ cat Chart.yaml | grep appVersion appVersion: 0.0.1-SNAPSHOT-d2e2f42

$ cat platform/shared/t/values.yaml | grep -A2 image: image:    tag:
|-
{{ .Chart.AppVersion }}

$ cat templates/deployment.yaml | grep image:
image: "{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }}"

$ helm template . --values platform/shared/t/values.betradar.yaml |
grep image
image: "docker-registry.default.svc:5000/namespace/service:0.0.1-SNAPSHOT-d2e2f42"
imagePullPolicy: Always
image: busybox 

否则会抛出错误。.

$ cat platform/shared/t/values.yaml | grep -A1 image: image:    tag:
{{ .Chart.AppVersion }}
1 $ helm template . --values platform/shared/t/values.yaml | grep
image Error: failed to parse platform/shared/t/values.yaml: error
converting YAML to JSON: yaml: invalid map key: map[interface
{}]interface {}{".Chart.AppVersion":interface {}(nil)}

最新更新