首页 > 解决方案 > helm 中嵌入的 tpl 语句

问题描述

我正在使用掌舵。

我有一个条件,其中 values.yaml 中的变量(变量名是 db)将获得条件值(oracle 或 postgres)。

在相同的 values.yaml 中,我有两个部分分别包含 oracle 和 postgres 的属性。

如何以嵌套方式使用 db 中的变量?我想避免 if else 阻塞。

我试过 {{tpl .Values.{{tpl .Values.db .}}.port .}}。但它不起作用。

请在下面找到代码片段

值.yaml

db: postgres
postgres:
  port:5432
oracle:
  port:1521

模板文件.yaml

port: "{{tpl .Values.{{tpl .Values.db .}}.port .}}"

标签: kuberneteskubernetes-helm

解决方案


您不能{{ ... }}在 Helm 模板语言中嵌套块。

您可以将变量设置为内部“模板”的值,或者直接将其作为表达式调用

{{- $dbname := tpl .Values.db . -}}
{{- printf "%s" (tpl .Values.db .) -}}

要将其实际用作.Values结构中的字段,您需要text/template index函数。

{{- $settings := index .Values (tpl .Values.db .) -}}
port: "{{ $settings.port }}"

推荐阅读