1.if
条件语句的基本结构如下所示:

{{ if PIPELINE }}

Do something

{{ else if OTHER PIPELINE }}

Do something else

{{ else }}

Default case

{{ end }}
如果值为以下内容,则将评估为false:

布尔值false
数字零
一个空字符串
一个nil(empty 或 null)
一个空的集合(map,slice,tuple,dict,array)
在任何其他情况下,条件被计算为true。

示例

./values.yaml

name: soulchild
favorite:
drink: coffee
food: pizza
templates/configmap.yaml条件要求.Values.favorite.drink的值等于coffee,则输出mug: true

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: mychart/templates/configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
name: singing-squid-configmap
data:
myvalue: “Hello World”
drink: “coffee”
food: “PIZZA”
mug: true
控制空行
看一下下面的例子

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: mychart/templates/configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
name: killjoy-cow-configmap
data:
myvalue: “Hello World”
drink: “coffee”
food: “PIZZA”

mug: true
可以看到mug上面多了一个空行。

请注意,我们在YAML中收到一些空行。为什么?模板引擎运行时,它会删除{undefined{中的内容}},但会完全保留其余空白。

首先,可以使用特殊字符修改模板声明的花括号语法,以告诉模板引擎压缩空白。{{-(左边加上破折号和空格)表示应该在左边砍掉空白,-}}右边加上破折号代表在右边砍掉空白。换行符是空格!

解决空行问题:

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 }}
2.with
with可以让您将当前范围(.)设置为特定对象。例如,我们一直在与.Values.favorites。让我们重写ConfigMap,将.范围更改为指向.Values.favorites:

apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: “Hello World”
{{- with .Values.favorite }}
drink: {{ .drink | default “tea” | quote }}
food: {{ .food | upper | quote }}
{{- end }}
使用{undefined{- with .Values.favorite }} {undefined{- end }}后,with区块内的当前作用域就是.Values.favorite
所以当我们再使用.drink时,就代表是.Values.favorite.drink

3.range
helm中使用range来进行循环的工作

首先在values.yaml添加要用到的值

favorite:
drink: coffee
food: pizza
pizzaToppings:

  • mushrooms
  • cheese
  • peppers
  • onions
    templates/configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: “Hello World”
{{- with .Values.favorite }}
drink: {{ .drink | default “tea” | quote }}
food: {{ .food | upper | quote }}
{{- end }}
toppings: |-
{{- range .Values.pizzaToppings }}
- {{ . | title | quote }}
{{- end }}
该range函数将遍历pizzaToppings列表。每次通过循环,.的值都会发生改变,即 第一次.为mushrooms。将第二个迭代为cheese,依此类推。

我们可以.直接沿管道发送值,所以当我们这样做时{undefined{ . | title | quote }},它先发送.到title(标题大小写函数),然后发送到quote。如果运行此模板,则输出为:

Source: mychart/templates/configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
name: edgy-dragonfly-configmap
data:
myvalue: “Hello World”
drink: “coffee”
food: “PIZZA”
toppings: |-
- “Mushrooms”
- “Cheese”
- “Peppers”
- “Onions”
4.变量
定义和调用一个变量
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: “Hello World”
{{- $relname := .Release.Name -}}
{{- with .Values.favorite }}
drink: {{ .drink | default “tea” | quote }}
food: {{ .food | upper | quote }}
release: {{ $relname }}
{{- end }}
range遍历对象
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: “Hello World”
{{- with .Values.favorite }}
drink: {{ .drink | default “tea” | quote }}
food: {{ .food | upper | quote }}
{{- if eq .drink “coffee” }}
mug: true
{{- end }}
toppings: |-
{{- end }}
{{- range key,key,key,value := .Values.favorite }}
{{ $key }}: {{ $value }}
{{- end }}
渲染后的结果

Source: mychart/templates/configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
name: right-gibbon-configmap
data:
myvalue: “Hello World”
drink: “coffee”
food: “PIZZA”
mug: true
toppings: |-
drink: coffee
food: pizza
range使用变量来接收遍历出来的值和索引,例如:
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: “Hello World”
{{- with .Values.favorite }}
drink: {{ .drink | default “tea” | quote }}
food: {{ .food | upper | quote }}
{{- if eq .drink “coffee” }}
mug: true
{{- end }}
toppings: |-
{{- end }}
{{- range $index, $topping := .Values.pizzaToppings }}
- {{ $index | toString | quote }}: {{ $topping | title | quote }}
{{- end }}
渲染后:

apiVersion: v1
kind: ConfigMap
metadata:
name: sanguine-hydra-configmap
data:
myvalue: “Hello World”
drink: “coffee”
food: “PIZZA”
mug: true
toppings: |-
- “0”: “Mushrooms”
- “1”: “Cheese”
- “2”: “Peppers”

helm模板开发-流程控制、作用域、循环相关推荐

  1. helm模板开发-流程控制、作用域、循环、变量(三)

    SoulChild随笔记 运算符 eq,ne,lt,gt,and,or,not 流程控制 if/else 条件 with 控制作用域 range,循环 1.if 条件语句的基本结构如下所示: {{ i ...

  2. python语言流程控制语句的格式while循环_Python流程控制-while循环-for循环

    写重复代码 是可耻的行为 -------------- 完美的分割线  -------------- 程序在一般情况下是按顺序执行的,编程语言提供了各种控制结构,允许更复杂的执行路径. 循环(loop ...

  3. 小汤学编程之JavaScript学习day02——运算符、流程控制与循环、函数

    一.运算符 1.算术运算符     2.一元运算符     3.关系运算符     4.逻辑运算符     5.赋值运算符     6.运算符的优先级 二.流程控制与循环 1.顺序结构     2.分 ...

  4. 【Vue】v-if 、v-show、v-for指令,最基础的流程控制和循环处理

    本文我们来学习一下v-if,v-show和v-for指令,也就是最基础的流程控制和循环处理. v-if 和 v-show v-if 和 v-show 的作用有点类似,都是进行条件判断,我们一起来看一下 ...

  5. JavaScript 04 流程控制(循环)

    目录 流程控制(循环)思维导图 1 - 流程控制 1.1 流程控制概念 1.2 顺序流程控制 1.3 分支流程控制 1.4 三元表达式 1.5 switch分支流程控制 附上流程控制思维导图: 2 - ...

  6. shell脚本编程学习笔记8(XDL)——流程控制和循环

    shell脚本编程学习笔记8--流程控制和循环 1,if语句 1,框架 1,单分支:if [条件判断式] ;thenprogramfiif [条件判断式]thenprogramfi注意:if语句使用f ...

  7. 用python实现流程自动化_Python自动化开发 - 流程控制

    一.拾遗主题 1.变量 理解变量在计算机内存中的表示 >>> a = "ABC" Python解释器干了两件事情: 在内存中创建了一个'ABC'的字符串: 在内存 ...

  8. 100内奇数之和流程图_JavaScript基础教程(六)流程控制之循环语句

    JavaScript入门教程之循环语句 循环语句从字面意思理解就是重复执行,能够让计算机按照程序员要求重复执行某种操作的能力是所有程序设计语言所必须具备的基本能力.在JavaScript程序设计语言中 ...

  9. Python【第一篇】python安装、pip基本用法、变量、输入输出、流程控制、循环

    了解python底层(需要C基础) :python源码剖析 一.python安装 Ubuntu下 系统版本已经同时安装了python2和python3 如果没有python3,可以参考这个貌似是印度阿 ...

最新文章

  1. RocketMQ3.2.2生产者发送消息自动创建Topic队列数无法超过4个
  2. springboot + redis + 注解 + 拦截器 实现接口幂等性校验
  3. 唐筛的准确率这么低为什么还要做_【NT 唐筛 四维】 【唐筛结果通知】...
  4. 小程序获取sessionkey_小程序,足不出户获取更多客源
  5. SQL SERVER 运维日记
  6. Logistic 回归(sigmoid函数,手机的评价,梯度上升,批处理梯度,随机梯度,从疝气病症预测病马的死亡率...
  7. apache camel_Apache Camel的性能调整思路
  8. 如何点击打印,直接打印出来,不弹打印设置选项
  9. 【洛谷1341】无序字母对(欧拉回路)
  10. (最全)No dashboards are active for the current data set. 解决tensorboard无法启动和显示问题
  11. Java学习笔记基础(中)
  12. vue中this.$set的用法
  13. Java 运行环境安装(JRE JDK 区别)
  14. java 破解版 aspose-word 切图
  15. 点击“安全删除硬件并弹出媒体”不显示可删除移动设备
  16. 某猫电影 css 加密解决方案
  17. 五子棋游戏程序记录和复盘功能设置
  18. 001 生来天缺之相,剑庐铸剑童子
  19. Linux之mount以rw,remount重新挂载ext4文件系统(二十八)
  20. 2022 年前端技术发展趋势知识小结

热门文章

  1. nginx: [warn] conflicting server name “xxx“ on 0.0.0.0:80解决
  2. 刷脸支付代理收益盈利模式
  3. Johnson–Lindenstrauss Lemma
  4. VUE中V-IF条件判断改变元素的样式
  5. yum是干什么的_linux下的yum命令详解
  6. 新冠无情人间有情,欣隆农业保民生共抗疫——慰问抗疫一线及爱老助困送欣隆酵醒鸡蛋蔬菜进社区公益行动
  7. Markdown编辑器-初始模板参考
  8. Lambert (兰伯特)光照模型
  9. [unreal4入门系列之一] Unreal4引擎是什么
  10. 手机配件市场上的“隐形巨头”:80后长沙夫妻创办,IPO首日市值逼近600亿