在HELM values.yaml中引用先前声明的值

时间:2019-11-06 13:13:12

标签: kubernetes-helm

我有一个HELM图表,其中有一些要求(即子图表)。

在部署该图表时,我使用values.yaml包含主图表和子图表的所有值:

globalFoo: "bar"

subchart1:
  foo: subchart1-{{ globalFoo }}

subchart2:
  localFoo: "bar2"
  foo: subchart2-{{ subchar2.bar2 }}

我想实现两件事:

  • 在子图值(在我的示例中为subchart1.foo )中引用先前声明的全局变量(即,在全局图表范围内)
  • 引用同一子图范围中的先前声明的局部变量(在我的示例中为subchart2.foo

上面的示例不起作用。我尝试了几种语法,但没有一个起作用。我在HELM文档中找不到类似的东西。

这可行吗?

1 个答案:

答案 0 :(得分:1)

<块引用>

在子图值中引用先前声明的全局变量,在同一子图范围内引用先前声明的局部变量

这可以在某种程度上使用 anchors and aliases 实现。

global: 
   foo: &global-foo bar
   
subchart1:
  # this verbatim copies the content of the anchor
  foo: *global-foo
  local: &subchart1-local bar 

subchart2:
  foo: *subchart1-local

值可以自然地组合在一个 helm 模板中:

kind: ConfigMap
...
data:
   FOO: "subchart2-{{ .Values.subchart2.foo }}"

如果发现自己需要“模板化值”,tpl function 可能会有所帮助:

# values 
global:
   user: foo
   pass: bar 
   dbhost: dbserver.com

mychart:
   connection: "db://{{.d.user}}:{{d.pass}}/{{d.dbhost}}"

# template
kind: ConfigMap
...
data:
   DBURL: "{{ tpl .Values.mychart.connection (dict "d" .Values.global "Template" $.Template }}"

请注意,(dict ...) 语法源自 hint in this helm github comment。这有助于通过提供“.d”上下文而不是“.Values”来缩短模板字符串,即 .d.user.Values.global.user

的缩写