SoulChild随笔记

运算符

eq,ne,lt,gt,and,or,not

流程控制

  • if/else 条件
  • with 控制作用域
  • range,循环

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: coffeefood: 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中收到一些空行。为什么?模板引擎运行时,它会删除{{中的内容}},但会完全保留其余空白。

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

解决空行问题:

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 }}

使用{{- with .Values.favorite }} {{- end }}后,with区块内的当前作用域就是.Values.favorite
所以当我们再使用.drink时,就代表是.Values.favorite.drink

3.range

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

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

favorite:drink: coffeefood: 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,依此类推。

我们可以.直接沿管道发送值,所以当我们这样做时{{ . | 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,$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: truetoppings: |-drink: coffeefood: 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: truetoppings: |-- "0": "Mushrooms"- "1": "Cheese"- "2": "Peppers"- "3": "Onions"

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

  1. helm模板开发-流程控制、作用域、循环

    1.if 条件语句的基本结构如下所示: {{ if PIPELINE }} Do something {{ else if OTHER PIPELINE }} Do something else {{ ...

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

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

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

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

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

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

  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. 【Vue】v-if 、v-show、v-for指令,最基础的流程控制和循环处理

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

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

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

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

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

最新文章

  1. 在ApacheHTTPD服务器中使用DSO完全分析
  2. 【深度学习】超强优化器如何与网络有机结合
  3. svn 安装_Tortoise SVN 安装
  4. 现代农业谋定县域经济-农业大健康·万祥军:载体幸福美丽
  5. 几种C++ std::string和std::wstring相互转换的转换方法
  6. leetcode200. 岛屿数量
  7. python编程教学软件-Python编程教学app
  8. JavaWeb框架之Struts2 ---- 系列学习
  9. mysql高可用架构_MySQL高可用架构对比
  10. 利用MATLAB求均值、方差和标准差
  11. rs485接口与计算机,电脑有USB接口就能连接RS485产品了
  12. mysql json unquote_JSON_UNQUOTE() – Remove Quotes from a JSON Document in MySQL
  13. 调用阿里云身份证识别服务识别本地图片,很详细,附工具类
  14. php 在文本域中添加qq表情 createelement,仿微信在对话框文字中插入Emoji表情包
  15. 英飞凌TC397移植FreeRTOS
  16. UVM m_sequencer 和 p_sequencer
  17. 删除AWS绑定的信用卡账户
  18. python计算化学浓度_python 计算化学
  19. 公司股东该发工资吗?发多少?
  20. Zxing和QR CODE 生成与解析二维码实例(带logo篇)

热门文章

  1. 1800 Flying to the Mars 大数 最多不上升序列 简化题意
  2. 关于tensorflow版本更新
  3. 5328笔记 Advanced ML Chapter1-Introduction to Machine Learning Problems
  4. 2021总结2022规划
  5. 如何在富文本中插入表情,word文档,及数学公式?
  6. js获取传统节假日_js判断节假日的代码分享
  7. 14个java编程技巧,小白必学
  8. 市场分析文档(从0到1开始设计产品,明确你想做的产品的方向)
  9. vue中缓存当前路由的实现
  10. Fragstats计算景观格局指数不出结果和分维数PAFRAC出现N/A的问题