Helm 控制语句

庆云2年前技术文章781

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"

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


相关文章

MySQL运维实战(5.6) 字符集设置对mysqldump的影响

mysqldump不指定字符集不指定字符集时,默认使用了utf8。可能和环境有关系。mysqldump -uroot test test_load >&n...

MySQL运维实战之ProxySQL(9.3)使用ProxySQL实现读写分离

proxysql读写分离主要通过mysql_query_rules表中的规则来实现。下面是具体的配置步骤:hostgroup配置insert into mysql_servers&...

idea打包java可执行jar包

idea打包java可执行jar包

1,在项目上鼠标右键 --> Open Module SettingsArtifacts --> + --> JAR --> From modules with depende...

helm简介

helm简介

一、Helm 是什么在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理...

大数据自动化巡检系统使用说明

大数据自动化巡检系统使用说明

1. 大数据自动化巡检系统首页显示巡检集群数量、巡检模版、巡检指标、当日巡检情况等,如下图所示2. 自动化巡检提供基础配置,提供给两种巡检集群对接方式,一种是可以对接外部集群,通过系统接口调用,一种是...

Helm 控制函数

Helm 控制结构(在模板语言中称为 "actions")提供给你和模板作者控制模板迭代流的能力。 Helm 的模板语言提供了以下控制结构:if/else,用来创建条件语句with,用来指定范围ran...

发表评论    

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