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

时间:2019-08-23 22:02:58

标签: kubernetes kubernetes-helm

我希望能够引用values.yaml中的当前名称空间,以使用它作为后缀,例如

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

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

4 个答案:

答案 0 :(得分:2)

如果您知道someParam可能包含模板构造,那么Helm包含一个tpl函数来对其进行解释。

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

如果图表允许,则通常对其进行记录。作为一个具体示例,helm/charts PostgreSQL chart说明其configurationConfigMap设置为

  

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

因此,对于该特定值,可以将模板宏放入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 GuptaDavid 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)}
相关问题