• helm-chart4,流程控制和变量


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

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

    if else

    示例:

    {{ if PIPELINE }}
      # Do something
    {{ else if OTHER PIPELINE }}
      # Do something else
    {{ else }}
      # Default case
    {{ end }}
    

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

    一个布尔型的假
    一个数字零
    一个空的字符串
    一个nil(空或null)
    一个空的集合(map,slice,tuple,dict,array)
    

    ConfigMap  示例

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

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

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

    所以当这样写的时候:

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

    最后就会变成:

    food: "pizza"mug:true
    

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

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

    {{indent 2 "mug:true"}}
    

    with

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

    示例:

    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 }}
      release: {{ .Release.Name }} #这里报错
      {{- end }}
    

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

    range

    遍历其后的参数,类似go的range
    

    假设 values.yaml 这样写:

    favorite:
      drink: coffee
      food: pizza
    pizzaToppings:
      - mushrooms
      - cheese
      - peppers
      - onions
    

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

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: {{ .Release.Name }}-configmap
    data:
      toppings: |-
        {{- range .Values.pizzaToppings }}
        - {{ . | title | quote }}
        {{- end }}
    

    即循环 .Values.pizzaToppings 的值集

    结果会是这样的:

    # Source: mychart/templates/configmap.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: edgy-dragonfly-configmap
    data:
      toppings: |-  # 声明多行字符串
        - "Mushrooms"
        - "Cheese"
        - "Peppers"
        - "Onions"
    

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

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

    变量

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

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

    利用变量,将其改正:

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

    变量在循环中的使用:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: {{ .Release.Name }}-configmap
    data:
      myvalue: "Hello World"
      {{- range $key, $val := .Values.favorite }}
      {{ $key }}: {{ $val | quote }}
      {{- end}}  
    

    结果:

    # Source: mychart/templates/configmap.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: eager-rabbit-configmap
    data:
      myvalue: "Hello World"
      drink: "coffee"
      food: "pizza"
    

    变量的作用域,跟写代码时候的作用域一致。
     
    此外,有一个全局变量: $

    .Release.name
    $.Release.name
    

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

  • 相关阅读:
    HDU1013 Digital Roots
    DP---背包问题
    新生代与老年代
    JVM常见问题(二)
    JVM常见问题 一(转载)
    JVM内存模型及分区
    (转载)JVM知识小集
    类加载机制:全盘负责和双亲委托
    mysql 函数GROUP_CONCAT(temp.amount SEPARATOR ',')的用法
    mysql优化--explain关键字
  • 原文地址:https://www.cnblogs.com/mingbai/p/chart4.html
Copyright © 2020-2023  润新知