Helm ABC:修订间差异

来自牛奶河Wiki
跳到导航 跳到搜索
无编辑摘要
 
(未显示1个用户的6个中间版本)
第72行: 第72行:


==== range ====
==== range ====
range 方法遍历列表(list)、元组(tuple )、map、dict 等多值结构,若不指定变量,则 . 为当前的值。
range 方法遍历列表(list)、元组(tuple )、map、dict 等多值结构,若不指定变量(如:列表、元组),则 . 为当前的值。
* range 内部会改变变量路径,相当于 with。解决办法是预先定义变量,或者使用 $. 绝对路径
* 在 Helm 模板中,$index 内置变量会在 range 循环内自动生成,代表着循环中当前迭代的索引
  <small><nowiki>  ## 1
  <small><nowiki>  ## 1
   toppings: |-
   toppings: |-
第96行: 第98行:
     - small
     - small
     - medium
     - medium
     - large
     - large</nowiki></small>


</nowiki></small>
==== Sample ====
需要说明的是默认值:如果值是 true/false,<nowiki>{{ ...| default false }}</nowiki> 显然是正确的(default true 不合适),否则当原值不存在,或者是 false,都会触发 default。
<small><nowiki># values.yaml
loop:
  - 1
  - 2
enable:
  pizza: true
  baozi: false
favorite:
  drink: coffee
  food: pizza
pizzaToppings:
  - mushrooms
  - cheese
  - peppers
  - onions
 
# templates/configmap.yaml
{{- $Release        := .Release.Name }}
{{- $enable        := .Values.enable.pizza | default false }}
{{- $favorite      := .Values.favorite }}
{{- $pizzaToppings  := .Values.pizzaToppings }}
{{- if $enable }}
{{- range $loop1 := .Values.loop }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ $Release }}-configmap-{{ $loop1 }}
  myvalue: "Hello World"
  {{- range $ky, $val := $favorite }}
  {{ $ky }}: {{ $val }}
  {{- end }}
toppings: |-
  {{- range $pizzaToppings }}
  - {{ . | title }}
  {{- end }}
---
{{- end }}
{{- end }}</nowiki></small>
 
=== 数据 ===
==== Dict ====
<small><nowiki># values.yaml
podLabels:
  a: 1
  b: 2
 
-.OR.-
podLabels: {a: 1, b: 2}
 
# deployment.yaml
      labels:
        {{- include "dftrd.labels" . | nindent 8 }}
        {{- with .Values.podLabels }}
        {{- toYaml . | nindent 8 }}
        {{- end }}
 
# Output
      labels:
        helm.sh/chart: dftrd-0.1.0
        app.kubernetes.io/name: dftrd
        app.kubernetes.io/instance: dftrd
        app.kubernetes.io/version: "1.16.0"
        app.kubernetes.io/managed-by: Helm
        a: 1
        b: 2</nowiki></small>


=== 函数 ===
=== 函数 ===


Helm 函数的一般建议使用方法是类似于管道的方法,如:
* .Values.pizza | default false
* .Values.pizza | quote
{| class="wikitable"
|+
!分类
!名称
!功能
!备注
|-
|字符串
|quote
|转为字符串
|
|-
|
|default
|默认值
|空、0、false 等均被判定
|-
|
|
|
|
|}


=== Error ===
=== Error ===

2024年7月26日 (五) 11:17的最新版本

yaml 中的语法、函数。

控制结构

# values.yaml
favorite:
  drink: coffee
  food: pizza
pizzaToppings:
  - mushrooms
  - cheese
  - peppers
  - onions

# Source: mychart/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 }}
  {{ if eq .drink "coffee" }}mug: "true"{{ end }}
  {{- end }}
  toppings: |-
    {{- range .Values.pizzaToppings }}
    - {{ . | title | quote }}
    {{- end }}

# Output
apiVersion: v1
kind: ConfigMap
metadata:
  name: edgy-dragonfly-configmap
data:
  myvalue: "Hello World"
  drink: "coffee"
  food: "PIZZA"
  mug: "true"
  toppings: |-
    - "Mushrooms"
    - "Cheese"
    - "Peppers"
    - "Onions"

if

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

  # if 写成换行,就需要用 {{- 格式删除空格/回车
  {{- if eq $.Values.favorite.drink "coffee" }}
  mug: "true"
  {{- end }}

  # 要确保 {{- 和其他命令之间有一个空格。{{- 3 }} 表示“删除左边空格并打印3”,而 {{-3 }} 表示“打印 -3 ”。

with

用来指定范围,PIPELINE 值不为空时执行

{{- with PIPELINE }}
# restricted scope
{{- end }}

# 修改配置映射中的 . 的作用域指向 .Values.favorite
# .drink --> .Values.favorite.drink
# $.Release --> .Release

range

range 方法遍历列表(list)、元组(tuple )、map、dict 等多值结构,若不指定变量(如:列表、元组),则 . 为当前的值。

  • range 内部会改变变量路径,相当于 with。解决办法是预先定义变量,或者使用 $. 绝对路径
  • 在 Helm 模板中,$index 内置变量会在 range 循环内自动生成,代表着循环中当前迭代的索引
  ## 1
  toppings: |-
    {{- range $index, $topping := .Values.pizzaToppings }}
    {{ $index }}: {{ $topping }}
    {{- end }}

  ## 1 - output
  toppings: |-
    0: mushrooms
    1: cheese
    2: peppers
    3: onions 

  ## 2
  sizes: |-
    {{- range tuple "small" "medium" "large" }}
    - {{ . }}
    {{- end }}

  ## 2 - output
  sizes: |-
    - small
    - medium
    - large

Sample

需要说明的是默认值:如果值是 true/false,{{ ...| default false }} 显然是正确的(default true 不合适),否则当原值不存在,或者是 false,都会触发 default。

# values.yaml
loop:
  - 1
  - 2
enable:
  pizza: true
  baozi: false
favorite:
  drink: coffee
  food: pizza
pizzaToppings:
  - mushrooms
  - cheese
  - peppers
  - onions

# templates/configmap.yaml
{{- $Release        := .Release.Name }}
{{- $enable         := .Values.enable.pizza | default false }}
{{- $favorite       := .Values.favorite }}
{{- $pizzaToppings  := .Values.pizzaToppings }}
{{- if $enable }}
{{- range $loop1 := .Values.loop }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ $Release }}-configmap-{{ $loop1 }}
  myvalue: "Hello World"
  {{- range $ky, $val := $favorite }}
  {{ $ky }}: {{ $val }}
  {{- end }}
toppings: |-
  {{- range $pizzaToppings }}
  - {{ . | title }}
  {{- end }}
---
{{- end }}
{{- end }}

数据

Dict

# values.yaml
podLabels: 
  a: 1
  b: 2

-.OR.-
podLabels: {a: 1, b: 2}

# deployment.yaml
      labels:
        {{- include "dftrd.labels" . | nindent 8 }}
        {{- with .Values.podLabels }}
        {{- toYaml . | nindent 8 }}
        {{- end }}

# Output
      labels:
        helm.sh/chart: dftrd-0.1.0
        app.kubernetes.io/name: dftrd
        app.kubernetes.io/instance: dftrd
        app.kubernetes.io/version: "1.16.0"
        app.kubernetes.io/managed-by: Helm
        a: 1
        b: 2

函数

Helm 函数的一般建议使用方法是类似于管道的方法,如:

  • .Values.pizza | default false
  • .Values.pizza | quote
分类 名称 功能 备注
字符串 quote 转为字符串
default 默认值 空、0、false 等均被判定

Error

  • Error: YAML parse error on ??.yaml: error converting YAML to JSON: yaml: line 8: did not find expected key

一般此种情况,多是缩进格式问题