我希望能够引用values.yaml
中的当前名称空间,以使用它作为后缀,例如
# in values.yaml
someParam: someval-{{ .Release.Namespace }}
用这种方式定义它比进入我的所有模板并添加{{ .Release.Namespace }}
更好。如果我可以在values.yaml
中做到这一点,那就更清楚了,只需要在一个地方定义即可。
答案 0 :(得分:2)
如果您知道someParam
可能包含模板构造,那么Helm包含一个tpl
函数来对其进行解释。
- name: SOME_VARIABLE
value: {{ .Values.someParam | tpl }}
如果图表允许,则通常对其进行记录。作为一个具体示例,helm/charts PostgreSQL chart说明其configurationConfigMap
设置为
带有PostgreSQL配置文件的ConfigMap(注意:覆盖
postgresqlConfiguration
和pgHbaConfiguration
)。 该值将作为模板进行评估。
因此,对于该特定值,可以将模板宏放入values.yaml
文件中。
答案 1 :(得分:1)
您可以使用named templates定义可重复使用的帮助程序模板。例如
在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
答案 2 :(得分:0)
只需要澄清一下:
如社区Amit Kumar Gupta和David Maze所述,helm本身并没有很好的解决方案来更改此行为而不修改模板。 在您的情况下(不修改头盔模板),看来最好的解决方案将是在头盔安装过程中仅对参数使用 set 。
喜欢:
helm install --set foo=bar --set foo=newbar ./redis
答案 3 :(得分:0)
github中有一个关于您要问的建议:Proposal: Allow templating in values.yaml
摘自最新评论之一:
这是我遇到的第一个线程,比这里还要注释... 另请参见#2514
:)值得庆幸的是,最新的Helm手册说明了如何实现这一目标。 https://helm.sh/docs/howto/charts_tips_and_tricks/#using-the-tpl-function
技巧是将变量包含在
"
或yaml块|-
中,然后 在模板中以{{ tpl .Values.variable . }}
引用它 似乎让Helm开心了。示例:
$ 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)}