Helm 控制语句

庆云2年前技术文章709

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"

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


相关文章

kubernetes RBAC

kubernetes RBAC

认证过程,只是确认通信的双方都确认了对方是可信的,可以相互通信。而鉴权是确定请求方有哪些资源的权限。API Server 目前支持以下几种授权策略 (通过 API Server 的启动参数 “–aut...

Spark接入Kerberos交互式命令窗口提交任务

Spark接入Kerberos交互式命令窗口提交任务

1. Spark-shell首先需要使用有操作hdfs文件权限的keytab用户认证,认证上之后可以通过spark-shell交互命令行窗口执行任务如果集成了Ranger组件,如果创建的普通用户没有在...

Go 错误处理与单元测试

1、错误处理1.1 如何定义错误在 Go 语言中,无论是在类型检查还是编译过程中,都是将错误看做值来对待,和 string 或者 integer 这些类型值并不差别。声明一个 string 类型变量和...

服务器cpu异常抖动排查

服务器cpu异常抖动排查

问题背景      当天下午某某客户服务器cpu使用率80%报警持续10分钟左右后又恢复了,联系客户排查,有出现不同的应用服务器都有收到cpu报警,而且出现这样的抖动不止一次,每隔一段时间就会出现类似...

CDP实操--集群扩容

CDP实操--集群扩容

一、前提准备工作1.确保OS的yum源可以正常使用,通过yum repolist命令可以查看到匹配的OS的所有包2.确保Cloudera Manager的yum源运行正常3.hosts文件配置,需要将...

Kubernetes 因令牌过期新增节点报错问题处理

1、背景Kubernetes 集群初始化完成之后,间隔一天发现 Worker 节点无法正常加入集群。2、报错信息$ kubeadm join api.k8s.com:9443 --token mmvh...

发表评论    

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