Helm-在values.yaml中对变量进行模板化

时间:2019-05-02 18:48:20

标签: kubernetes kubernetes-helm templating

我正在尝试将来自values.yaml内的映射的变量模板化为最终的Kubernetes ConfigMap YAML。

我已经阅读了https://github.com/helm/helm/issues/2492https://helm.sh/docs/chart_template_guide/,但似乎找不到答案。

在某些情况下,这大致就是我想做的:

values.yaml

config:
  key1: value
  key2: value-{{ .Release.Name }}

configmap.yaml

kind: ConfigMap
data:
  config-file: |
    {{- range $key, $value := .Values.config }}
    {{ $key }} = {{ $value }}
    {{- end }}

所需的输出将是:

头盔模板--name v1 mychart /

kind: ConfigMap
data:
  config-file: |
    key1 = value
    key2 = value-v1

我尝试了使用模板函数和流水线的一些变体,但无济于事:

{{ $key }} = {{ tpl $value . }}
{{ $key }} = {{ $value | tpl . }}
{{ $key }} = {{ tpl $value $ }}

3 个答案:

答案 0 :(得分:2)

上面的方法也可以这样

values.yaml

config:
  key1: "value"
  key2: "value-{{ .Release.Name }}"

configmap.yaml

kind: ConfigMap
data:
  config-file: |
    {{- range $key, $value := .Values.config }}
    {{ $key }} = {{ tpl $value $ }}
    {{- end }}

我更改的是:我将值放在value.yaml中的引号中,并在配置映射中使用模板tpl

答案 1 :(得分:2)

关于这个话题有 in this PR here 争吵。

我知道现在有可能,但这需要在内部维护图表(例如 Amrut 的回答)。

让我们总结一下:

要在 values.yaml 中使用模板,以下是可用选项:

  1. helm 将来可能会支持这一点(观看有关此主题的 thread。)

  2. 在图表内使用 tpl 函数

  3. 在 helm 之上使用另一个工具:terraform 或 helmfile。

答案 2 :(得分:1)

设法使用以下语法解决了这个问题:

configmap.yaml

kind: ConfigMap
data:
  config-file: |
    {{- range $key, $value := .Values.config }}
    {{ $key }} = {{ tpl ($value | toString) $ }}
    {{- end }}