控制结构(模板说法中称为“动作”)提供了控制模板生成流程的能力。Helm的模板语言提供了以下控制结构:

  1. if/ else用于创建条件块
  2. with 指定范围
  3. range,它提供了一个“for each”风格的循环

if else

示例:

  1. {{ if PIPELINE }}
  2. # Do something
  3. {{ else if OTHER PIPELINE }}
  4. # Do something else
  5. {{ else }}
  6. # Default case
  7. {{ end }}

值为false 的情况,(其他为true)

  1. 一个布尔型的假
  2. 一个数字零
  3. 一个空的字符串
  4. 一个nil(空或null
  5. 一个空的集合(mapslicetupledictarray

ConfigMap  示例

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: {{ .Release.Name }}-configmap
  5. data:
  6. myvalue: "Hello World"
  7. drink: {{ .Values.favorite.drink | default "tea" | quote }}
  8. food: {{ .Values.favorite.food | upper | quote }}
  9. {{ if eq .Values.favorite.drink "coffee" }}mug: true{{ end }}

if 这种条件语句,会在原文处形成空行。这个时候,可以在 {{ }}的左右侧添加 ‘-’ 来删除空格和换行。

  1. 注意 ‘-’和其他指令中间有空格才会生效。
  2. {{- 会删除左侧空格和换行,
  3. -}} 也类似

所以当这样写的时候:

  1. food: "pizza"
  2. {{- if eq .Values.favorite.drink "coffee" -}}
  3. mug: true
  4. {{- end -}}

最后就会变成:

  1. food: "pizza"mug:true

所以 -}} 这个使用的时候要小心。

也可以使用indent 函数,indent 2 表示缩进两个字符

  1. {{indent 2 "mug:true"}}

with

  1. with 相当于声明一下当前的变量上下文,有点类似于相对路径的参照路径。

示例:

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: {{ .Release.Name }}-configmap
  5. data:
  6. myvalue: "Hello World"
  7. {{- with .Values.favorite }}
  8. drink: {{ .drink | default "tea" | quote }}
  9. food: {{ .food | upper | quote }}
  10. release: {{ .Release.Name }} #这里报错
  11. {{- end }}

{{- with .Values.favorite }} 和{{- end }} 之间的部分,context 被改为.Values.favorite。所以可以直接引用 .drink,而再引用 .Release 则会报错。

range

  1. 遍历其后的参数,类似gorange

假设 values.yaml 这样写:

  1. favorite:
  2. drink: coffee
  3. food: pizza
  4. pizzaToppings:
  5. - mushrooms
  6. - cheese
  7. - peppers
  8. - onions

则在yaml文件内可以这样循环:

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: {{ .Release.Name }}-configmap
  5. data:
  6. toppings: |-
  7. {{- range .Values.pizzaToppings }}
  8. - {{ . | title | quote }}
  9. {{- end }}

即循环 .Values.pizzaToppings 的值集

结果会是这样的:

  1. # Source: mychart/templates/configmap.yaml
  2. apiVersion: v1
  3. kind: ConfigMap
  4. metadata:
  5. name: edgy-dragonfly-configmap
  6. data:
  7. toppings: |-  # 声明多行字符串
  8. - "Mushrooms"
  9. - "Cheese"
  10. - "Peppers"
  11. - "Onions"

YAML中的|-标记表示一个多行字符串。还可用于在清单中嵌入大块数据。

除了list和tuple之外,range还可以用于遍历具有键和值的集合(如map 或 dict)。

变量

这是 with 那里的那个错误示例:

  1. {{- with .Values.favorite }}
  2. drink: {{ .drink | default "tea" | quote }}
  3. food: {{ .food | upper | quote }}
  4. release: {{ .Release.Name }}
  5. {{- end }}

利用变量,将其改正:

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: {{ .Release.Name }}-configmap
  5. data:
  6. myvalue: "Hello World"
  7. {{- $relname := .Release.Name -}} #变量声明
  8. {{- with .Values.favorite }}
  9. drink: {{ .drink | default "tea" | quote }}
  10. food: {{ .food | upper | quote }}
  11. release: {{ $relname }} #变量引用
  12. {{- end }}

变量在循环中的使用:

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: {{ .Release.Name }}-configmap
  5. data:
  6. myvalue: "Hello World"
  7. {{- range $key, $val := .Values.favorite }}
  8. {{ $key }}: {{ $val | quote }}
  9. {{- end}}

结果:

  1. # Source: mychart/templates/configmap.yaml
  2. apiVersion: v1
  3. kind: ConfigMap
  4. metadata:
  5. name: eager-rabbit-configmap
  6. data:
  7. myvalue: "Hello World"
  8. drink: "coffee"
  9. food: "pizza"

变量的作用域,跟写代码时候的作用域一致。

 

此外,有一个全局变量: $

  1. .Release.name
  2. $.Release.name

一般情况下,这两个的效果是一样的; 不过,在with作用域内,前者可能会失效,后者不会。

helm-chart4,流程控制和变量的更多相关文章

  1. js的数据类型、函数、流程控制及变量的四种声明方式

    运算符 基本运算符 加 + 减 - 乘 * 除 / 取余 % 自增 ++ eg: 1++ 或 ++1 自减 -- eg: 1-- 或 --1 注:++或--写在前面表示优先级最高,先进行自增或者自减 ...

  2. Java 关键字、标识符、注释、常量与变量、数据类型,算术、赋值、比较、逻辑、位、三元运算符和流程控制、break、continue【3】

    若有不正之处,请多多谅解并欢迎批评指正,不甚感激.请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing/ ...

  3. JAVA:变量,数据类型,运算符,流程控制(简介)<1>

    一.安装和配置jdk 1.jdk是什么? (1).jdk全称是Java Development Kit, Java开发工具包; (2).jdk是sun公司开发的; (3).jdk主要包括:jre(Ja ...

  4. Java学习第一篇:变量,数据类型,运算符,流程控制(简介)

    一.安装和配置jdk 1.jdk是什么? (1).jdk全称是Java Development Kit, Java开发工具包; (2).jdk是sun公司开发的; (3).jdk主要包括:jre(Ja ...

  5. awk(流程控制、内置变量、内置函数、数组)

    摘自:http://bbs.51cto.com/thread-883948-1-1.html awk(流程控制.内置变量.内置函数.数组) ... 参考其他的资料,给大家看看.一.awk流程控制语句 ...

  6. 《Shell脚本学习指南》学习笔记之变量、判断和流程控制

    变量 定义变量 可以使用export和readonly来设置变量,export用于修改或打印环境变量,readonly则使得变量不得修改.语法: export name[=word] ... read ...

  7. Day01_变量,数据类型_程序交互_流程控制

    python执行的两种方式: 1,交互的方式:  优点:可以及时调试程序,调试方法  缺点: 无法永久保存代码 2,保存在文件中执行  优点:可以永久保存代码,在执行的时候调用  缺点:不能即时调试代 ...

  8. MySQL自定义函数用法详解-复合结构自定义变量/流程控制

    自定义函数 (user-defined function UDF)就是用一个象ABS() 或 CONCAT()这样的固有(内建)函数一样作用的新函数去扩展MySQL. 所以UDF是对MySQL功能的一 ...

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

    一.python安装 Ubuntu下 系统版本已经同时安装了python2和python3 如果没有python3,可以参考这个貌似是印度阿三的安装视频:http://v.youku.com/v_sh ...

随机推荐

  1. MyBatis - 5.缓存机制

    MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制.缓存可以极大的提升查询效率. MyBatis系统中默认定义了两级缓存. 一级缓存和二级缓存. 1.默认情况下,只有一级缓存( ...

  2. python---使用递归实现谢尔宾斯基三角形及汉诺塔

    渐入佳境. # coding: utf-8 import turtle ''' # =================turtle练手== def draw_spiral(my_turtle, lin ...

  3. 前端本地存储localStorage

    1.突破cookie 4K限制,一般浏览器支持5M 2.增 删 改 查 <!DOCTYPE html> <html lang="en"> <head& ...

  4. zabbix邮箱报警设置&问题汇总

    zabbix邮件报警部署! Zabbix监控服务端.客户端都已经部署完成,被监控主机已经添加,Zabiix监控运行正常,通过查看Zabbix监控服务器,可以了解服务器的运行状态是否正常,运维人员不会时 ...

  5. mariadb-半同步复制

    半同步复制: 使用插件 对于从节点,有一部分为同步复制,当主节点复制完从节点后才向客户返回ok,同步超时后自动降级为异步 有一部分为异步复制 这样为了与主节点冗余 基于主从的模式上搭建 半同步复制: ...

  6. gitlab之一: gitlab安装配置使用

    参考: gitlab 安装和配置 gitlab下载地址: https://mirror.tuna.tsinghua.edu.cn/gitlab-ce/ 官方教程: https://about.gitl ...

  7. C#基础:委托之Action<T>和Func<T>的用法

  8. 20165235Linux安装及学习

    (一)安装虚拟机 在安装虚拟机的过程中我遇到了许多问题,首先是因为没有将CPU虚拟化,解决方法是我首先通过打开BIOS界面打开security,virtualization,选择Enable.解决了无 ...

  9. centos7如何添加开机启动服务/脚本

    一.添加开机自启服务 在centos7中添加开机自启服务非常方便,只需要两条命令(以Jenkins为例): systemctl enable jenkins.service #设置jenkins服务为 ...

  10. 【官档整理】Visual Studio 2017 VS2017 中文离线安装包下载

    [官档整理]Visual Studio 2017 VS2017 中文离线安装包下载 转 https://blog.csdn.net/fromfire2/article/details/81104648 ...