Helm 控制语句

庆云2年前技术文章647

Helm 控制结构(在模板语言中称为 "actions")提供给你和模板作者控制模板迭代流的能力。 Helm 的模板语言提供了以下控制结构:

  • if/else,用来创建条件语句

  • with,用来指定范围

  • range,提供 "for each" 类型的循环

除了这些之外,还提供了一些声明和使用命名模板的关键字:

  • define 在模板中声明一个新的命名模板

  • template 导入一个命名模板

  • block 声明一种特殊的可填充的模板块


1、If/Else

If/Else 语句中的条件在模板中称为管道,基本结构如下:

{{ if PIPELINE }}
 # Do something
{{ else if OTHER PIPELINE }}
 # Do something else
{{ else }}
 # Default case
{{ end }}


如果是以下值时,管道会被设置为 false,否则为 true:

  • 布尔 false

  • 数字 0

  • 空字符串

  • nil

  • 空集合(map, slice, tuple, dict, array


实例:

$ cat > mychart/values.yaml <<EOF
grayscale: "open"  # open or close
EOF

$ cat > mychart/templates/configmap.yaml <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
 name: {{ .Release.Name }}-cm
 namespace: {{ .Release.Namespace }}
data:
 {{- if eq .Values.grayscale "open" }}
 environment: "Restricted"
 {{- else }}
 environment: "Prod"
 {{- end }}
EOF

$ helm install mychart ./mychart/ --debug --dry-run
......
......
......
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
 name: mychart-cm
 namespace: default
data:
 environment: "Restricted"


2、With

With 语句主要是用来控制变量的范围,也就是修改查找变量的作用域,基本结构如下:

{{ with PIPELINE }}
 # restricted scope
{{ end }}


实例:

$ cat > mychart/values.yaml <<EOF
support:
 author:
   name: "JokerZhang"
   mail: "jokerzhang@outlook.com"
EOF

$ cat > mychart/templates/configmap.yaml <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
 name: {{ .Release.Name }}-cm
 namespace: {{ .Release.Namespace }}
data:
 {{- with .Values.support }}
 author_name: {{ .author.name }}
 author_mail: {{ .author.mail }}
 {{- end }}
EOF

$ helm install mychart ./mychart/ --debug --dry-run
......
......
......
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
 name: mychart-cm
 namespace: default
data:
 author_name: JokerZhang
 author_mail: jokerzhang@outlook.com

注意:我们需要注意对象的作用域,使用 $ 符号从父作用域中访问对象而不是直接获取。当模板开始执行后 $ 会被映射到根作用域,且执行过程中不会更改。


3、Range

Range 语句用于提供循环遍历集合输出的功能,基本结构如下:

{{- range 要遍历的对象 }}
 # do something
{{- end }}


实例:

$ cat > mychart/values.yaml <<EOF
depends:
 - jdk
 - mysql
 - npm
EOF

$ cat > mychart/templates/configmap.yaml <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
 name: {{ .Release.Name }}-cm
 namespace: {{ .Release.Namespace }}
data:
 preconditions: |-
   {{- range .Values.depends }}
   - {{ . | title | quote }}
   {{- end }}
EOF

$ helm install mychart ./mychart/ --debug --dry-run
......
......
......
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
 name: mychart-cm
 namespace: default
data:
 preconditions: |-
   - "Jdk"
   - "Mysql"
   - "Npm"

注意: |- 表示在该数据项中允许使用多行文本。


相关文章

Kubevela源码解读(一):application_controller解读

application_controller是kubevela最主要的一个控制器,作用就是将用户创建的applicaion转化为实际需要创建的资源对象,通过本文可以:1、了解cue模版在kubevel...

SpringBootWeb 篇-深入了解 SpringBoot + Vue 的前后端分离项目部署上线与 Nginx 配置文件结构(1)

SpringBootWeb 篇-深入了解 SpringBoot + Vue 的前后端分离项目部署上线与 Nginx 配置文件结构(1)

  1.0 云服务器的准备        使用云服务是为了可以得到一个 Linux 环境,比如说常用到的 Ubuntu 的配套程序。  &n...

Spark thriftserver对接cdh hive

Spark thriftserver对接cdh hive

1、背景客户需要使用spark的thriftserver来通过beeline或者jdbc 来使用spark sql环境: spark 3.2.0hive: 2.1.1-cdh6.3.2hadoop:...

慢查询导致ES CPU资源打满

慢查询导致ES CPU资源打满

o   一、问题背景§  1.1 集群背景信息§  1.2 收到告警o   二、处理过程§  2.1 查看监控§  2.2 登录kibana查看§  2.3 登录服务器使用命令查看·       2....

ACOS无数据告警实践

ACOS无数据告警实践

1.说明在实现数据监控的过程中告警能力无疑是重中之重,无数据告警亦是告警能力中重要的场景,这里我们聊聊关于无数据一些场景和实践方法。2.无数据可能场景对于运维监控平台来说无数据是一个比较复杂的情况,从...

RAC和DG的选择

RAC和DG的选择

RAC和DG的选择一、RAC1、什么是RAC实时应用集群,是负载均衡模式,两台机器同时工作参与到业务系统中,如果其中一个节点出现问题,所有的会话连接会转到另一个节点,保证业务系统正常运行,但是数据只有...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。