我希望能够在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(注意:覆盖
postgresqlConfiguration
和pgHbaConfiguration
(。该值作为模板进行评估。
因此,对于该特定值,您可以将模板宏放入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)}