Helm 模板流程控制

Helm 的模板语言提供了多种控制结构,以允许模板作者根据条件逻辑生成模板内容。以下是 Helm 模板控制结构的核心内容总结:

控制结构

Helm 模板支持以下控制结构:

  • if/else:用于创建条件语句,根据给定的条件包含或排除模板中的文本块。
  • with:用于指定作用域,改变当前作用域(.)的上下文。
  • range:提供“for each”类型的循环,用于迭代集合,如列表、元组、映射或字典。

命名模板

除了控制结构,Helm 还提供了声明和使用命名模板的关键字:

  • define:在模板中声明一个新的命名模板。
  • template:导入一个命名模板。
  • block:声明一种特殊的可填充的模板块。

条件语句 (if/else)

if/else 结构允许执行管道操作,而不仅仅是计算值。以下值被视为 false

  • 布尔值 false
  • 数字 0
  • 空字符串
  • nil(空或 null)
  • 空集合(如 map, slice, tuple, dict, array

示例

[root@master ~]# tail -5 python-flask/values.yaml

affinity: {}
favorite:
  drink: coffee
  food: pizza
  
[root@master ~]# cat python-flask/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  drink: {{ .Values.favorite.drink | default "tea" | quote }}
  food: {{ .Values.favorite.food | upper | quote }}
  {{ if eq .Values.favorite.drink "coffee" }}mug: "true"{{ end }}

结果

# Source: python-flask/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: geared-marsupi-configmap
data:
  myvalue: "Hello World"
  drink: "coffee"
  food: "PIZZA"
  mug: "true"

YAML文件中空格是有意义的,因此管理空格变得很重要。这里把缩进去掉就执行成功了。

作用域 (with)

with 语句可以改变当前作用域,使得模板中的 . 指向特定的对象。这允许模板作者在不重复前缀的情况下引用对象的字段。

循环 (range)

range 操作符允许对集合进行迭代,每次迭代 . 都会指向当前迭代的元素。这使得模板能够为集合中的每个元素生成内容。

空格控制

Helm 模板中的空格控制非常重要,因为 YAML 格式中空格是有意义的。Helm 提供了特殊的语法来控制空格:

  • {{-:表示左侧的空格应该被删除。
  • -}}:表示右侧的空格应该被删除。

正确管理空格可以避免生成无效的 YAML 文件。

示例

[root@master ~]# cat python-flask/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  drink: {{ .Values.favorite.drink | default "tea" | quote }}
  food: {{ .Values.favorite.food | upper | quote }}
  {{ if eq .Values.favorite.drink "coffee" }}
    mug: "true" # 此处多了空格
  {{ end }}

结果

[root@master ~]# helm install geared-marsupi ./python-flask  --dry-run --debug -n default
install.go:214: [debug] Original chart version: ""
install.go:231: [debug] CHART PATH: /root/python-flask

Error: INSTALLATION FAILED: YAML parse error on python-flask/templates/configmap.yaml: error converting YAML to JSON: yaml: line 9: did not find expected key
helm.go:84: [debug] error converting YAML to JSON: yaml: line 9: did not find expected key

实例应用

通过 ifwithrange,模板可以动态地根据 values.yaml 中定义的值来生成 Kubernetes 配置文件。例如,可以根据不同条件设置 ConfigMap 的数据字段,或者根据列表生成复杂的多行字符串。

结论

掌握 Helm 模板的控制结构对于创建灵活且动态的 Kubernetes 部署配置文件至关重要。这些控制结构提供了强大的工具,以适应不同的部署需求和条件。

更多详细信息和高级用法可以在 Helm 的官方文档中找到。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值