函数与管道
函数与管道
函数
apiVersion: v1
kind: ConfigMap
metadata:
name: {{.Release.Name}}-configmap
data:
myvalue: "Hello World"
drink: {{quote .Values.favorite.drink}}
food: {{quote .Values.favorite.food}}
模板函数遵循语法 functionName arg1 arg2...
。在上面的代码片段中,quote .Values.favorite.drink
调用
default 函数
经常使用的一个函数是 default
:default DEFAULT_VALUE GIVEN_VALUE
。该功能允许在模板内部指定默认值,以防该值被省略。让我们用它来修改上面的饮料示例:
drink: { { .Values.favorite.drink | default "tea" | quote } }
如果我们像往常一样运行,我们会得到我们的
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: virtuous-mink-configmap
data:
myvalue: "Hello World"
drink: "coffee"
food: "PIZZA"
现在,我们将从以下位置删除喜欢的饮料设置
favorite:
#drink: coffee
food: pizza
现在重新运行 helm install --dry-run --debug ./mychart
会产生这个
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: fair-worm-configmap
data:
myvalue: "Hello World"
drink: "tea"
food: "PIZZA"
在实际的
drink:
{
{
.Values.favorite.drink | default (printf "%s-tea" (include "fullname" .)),
},
}
在一些地方,一个 if
条件可能比这 default
更适合。我们将在下一节中看到这些。模板函数和管道是转换信息并将其插入到
运算符函数
对于模板,运算符(eq,ne,lt,gt,and,(
和 )
)分组。
将运算符放到声明的前面,后面跟着它的参数,就像使用函数一样。要多个运算符一起使用,将每个函数通过圆括号分隔。
{{/* include the body of this if statement when the variable .Values.fooString xists and is set to "foo" */}}
{{if and .Values.fooString (eq .Values.fooString "foo") }}
{{...}}
{{end}}
{{/* do not include the body of this if statement because unset variables evaluate o false and .Values.setVariable was negated with the not function. */}}
{{if or .Values.anUnsetVariable (not .Values.aSetVariable) }}
{{...}}
{{end}}
现在我们可以从函数和管道转向流控制
管道
模板语言的强大功能之一是其管道概念。利用
apiVersion: v1
kind: ConfigMap
metadata:
name: {{.Release.Name}}-configmap
data:
myvalue: "Hello World"
drink: {{.Values.favorite.drink | quote}}
food: {{.Values.favorite.food | quote}}
在这个例子中,没有调用 quote ARGUMENT
,我们调换了顺序。我们使用管道(|)将 “参数” 发送给函数:.Values.favorite.drink | quote
。使用管道,我们可以将几个功能链接在一起:
apiVersion: v1
kind: ConfigMap
metadata:
name: {{.Release.Name}}-configmap
data:
myvalue: "Hello World"
drink: {{.Values.favorite.drink | quote}}
food: {{.Values.favorite.food | upper | quote}}
当模板执行时,该模板将产生如下结果:
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: trendsetting-p-configmap
data:
myvalue: "Hello World"
drink: "coffee"
food: "PIZZA"
请注意,我们的原来 pizza
现在已经转换为 "PIZZA"
。
当有像这样管道参数时,第一个评估(.Values.favorite.drink
)的结果将作为函数的最后一个参数发送。我们可以修改上面的饮料示例来说明一个带有两个参数的函数 repeat COUNT STRING
:
apiVersion: v1
kind: ConfigMap
metadata:
name: {{.Release.Name}}-configmap
data:
myvalue: "Hello World"
drink: {{.Values.favorite.drink | repeat 5 | quote}}
food: {{.Values.favorite.food | upper | quote}}
该
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: melting-porcup-configmap
data:
myvalue: "Hello World"
drink: "coffeecoffeecoffeecoffeecoffee"
food: "PIZZA"