下面是一个action(动作)的列表。"Arguments
"和"pipelines
"代表数据的执行结果,细节定义在后面。
{{/* a comment */}}
// 注释,执行时会忽略。可以多行。注释不能嵌套,并且必须紧贴分界符始止,就像这里表示的一样。
模板语言的强大功能之一是其管道概念。利用 UNIX 的概念,管道是一个链接在一起的一系列模板命令的工具,以紧凑地表达一系列转换。管道是按顺序完成几件事情的有效方式。
{{pipeline}}
// pipeline的值的默认文本表示会被拷贝到输出里
Pipeline是一个(可能是链状的)command序列。Command可以是一个简单值(argument)或者对函数或者方法的(可以有多个参数的)调用:
.Method [Argument...]
方法可以独立调用或者位于链式调用的末端,不同于链式调用中间的方法,可以使用参数;
执行结果是使用给出的参数调用该方法的返回值:dot.Method(Argument1, etc.);functionName [Argument...]
执行结果是使用给定的参数调用函数名指定的函数的返回值:function(Argument1, etc.)
;pipeline通常是将一个command序列分割开,再使用管道符'|'连接起来(但不使用管道符的command序列也可以视为一个管道)。在一个链式的pipeline里,每个command的结果都作为下一个command的最后一个参数。pipeline最后一个command的输出作为整个管道执行的结果。
command的输出可以是1到2个值,如果是2个后一个必须是error接口类型。如果error类型返回值非nil,模板执行会中止并将该错误返回给执行模板的调用者。
如果值为如下情况,则pipeline为 false:
在其他情况下,条件值为true,此管道被执行。
控制结构(模板说法中称为 “动作”)为编写模板提供了控制模板生成流程的能力。Helm 的模板语言提供了以下控制结构:
控制结构可以执行整个管道,而不是一个值。
{{if pipeline}}
// T0
{{else if pipeline}}
// T1
{{else}}
// T2
{{end}}
// pipeline的执行,不改变dot的值
with控制着变量作用域,.
是对当前范围的引用,即.Values
是告诉模板,在当前范围内查找Values对象。
{{with pipeline}}
// 限定的范围
{{end}}
// 修改当前dot,不修改外面的dot
// 请注意!在受限范围内,此时将无法从父范围访问其他对象。
{{with pipeline}}
T1
{{else}}
T0
{{end}}
// 如果pipeline为空,不改变dot并执行T0,否则dot设为pipeline的值并执行T1。
在Helm模板中,遍历集合(数组、切片、字典或者通道)的方式是使用range操作。
如果pipeline的值为字典,且键是可排序的基本类型,元素也会按键的顺序排序。
{{range pipeline}}
T1
{{else}}
T0
{{end}}
// 不改变dot的值