舵模板语言中的全局变量,以避免重复

时间:2019-10-04 15:03:18

标签: kubernetes kubernetes-helm

我是掌舵人和掌舵模板语言的新手。我的_helper.tpl中包含以下内容:

{{/*
Get couchdb password
*/}}
{{- define "couchdb.password" -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- printf "'@refsec/couchdb-%s/adminPassword'" $name -}}
{{- end -}}

{{/* 
Get couchdb username 
*/}}
{{- define "couchdb.username" -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- printf "'@refsec/couchdb-%s/adminUsername'" $name -}}
{{- end -}}

但是这段代码有问题。重复!!如您所见,此行重复了2次:{{- $name := default .Chart.Name .Values.nameOverride -}}

我可以为这些情况定义一个全局变量a并反复使用它吗?

1 个答案:

答案 0 :(得分:2)

原则上,您可以仅为那一行定义模板

{{- define "couchdb.chart.name" -}}
{{- default .Chart.Name .Values.nameOverride -}}
{{- end -}}

但是调用它的语法实际上并不短

{{- define "couchdb.password" -}}
{{- $name := include "couchdb.chart.name" . -}}
{{- printf "'@refsec/couchdb-%s/adminPassword'" $name -}}
{{- end -}}

{{- define "couchdb.username" -}}
{{- printf "'@refsec/couchdb-%s/adminUsername'" (include "couchdb.chart.name" .) -}}
{{- end -}}

我很确定Go文本/模板语言没有您在此处建议的形式的全局变量。 documentation描述了变量的语法和调用,但包含了一些隐晦的注释

  

模板调用不会从调用点继承变量。

而且我认为从阅读其他上下文来看,“全局范围”没有“主模板”那么重要。

无论如何,我从未在Helm图表中看到过全局变量,甚至您在问题中显示的形式的变量也有点不寻常。