一、helm3函数

在 Helm模板中,以下情况被认为是"空"(false):

  • nil (空指针)
  • 0 (数字零)
  • false (布尔假)
  • “” (空字符串)
  • 空数组 []
  • 空map map[]

1. 内置函数

quote    # 调用的变量值加一个双引号,使用方法: 参数 | quote

squote   # 调用的变量值加一个单引号,,使用方法: 参数 | squote

upper    # 调用的变量值转换为大写,,使用方法: 参数 | upper

lower    # 调用的变量值转换为小写,使用方法:参数 | lower

repeat   # 调用的变量值的重复次数,使用方法: 参数 | repeat 次数

default  # 给调用的变量一个默认值,使用方法:参数 | default 默认值

lookup   #用于获取k8s集群内的一些信息,功能类似与kubectl get命令

#基本语法:lookup "apiVersion" "kind" "namespace" "name"

#  apiVersion:api版本,v1或apps/v1
#  kind:资源类型,如Pod,Deployment,Namespace
#  namespace:命名空间名称,空字符串表示所有资源
#  name:资源名称,空字符串表示所有资源

函数的使用

# 定义变量值
[root@k8s-master m1]# cat chart1/values.yaml 
address1: china
address2: LIAONING

# 函数使用
[root@k8s-master m1]# cat chart1/templates/configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}
data:
  value1: {{ .Values.address1 | quote }}
  value2: {{ .Values.address1 | squote }}
  value3: {{ .Values.address1 | upper | quote }}
  value4: {{ .Values.address2 | lower | quote }}
  value5: {{ .Values.address3 | default "shenyang" | quote }}
  value6: {{ .Values.address2 | repeat 2 | quote }}
  value7: {{ lookup "apps/v1" "Deployment" "default" "nginx" | quote}}


# 输出变量值
[root@k8s-master m1]# helm install chart1 chart1/ --debug --dry-run
install.go:178: [debug] Original chart version: ""
install.go:199: [debug] CHART PATH: /home/m1/chart1

NAME: chart1
LAST DEPLOYED: Mon Oct 20 15:32:34 2025
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
USER-SUPPLIED VALUES:
{}

COMPUTED VALUES:
address1: china
address2: LIAONING

HOOKS:
MANIFEST:
---
# Source: chart1/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: chart1
data:
  value1: "china"
  value2: 'china'
  value3: "CHINA"
  value4: "liaoning"
  value5: "shenyang"
  value6: "LIAONINGLIAONING"
  value7: "map[apiVersion:apps/v1 kind:Deployment metadata:map[annotations:map[deployment.kubernetes.io/revision:6 kubectl.kubernetes.io

2. 逻辑函数和流控制函数

eq

用于比较两个参数是否相等,如果相等为true,否则为false

用法: eq 参数1 参数2


[root@k8s-master m1]# cat chart2/templates/configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}
data:
  value1: {{ eq 1 2 | quote }}    # 值为false
  value2: {{ eq 2 2 | quote }}    # 值为true

ne

用于比较两个参数是否不等,如果不等为true,否则为false

用法: ne 参数1 参数2


[root@k8s-master m1]# cat chart2/templates/configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}
data:
  value1: {{ ne 1 2 | quote }}    # 值为true
  value2: {{ ne 2 2 | quote }}    # 值为false

lt

判断第一个参数是否小于第二个参数,小于为true,否则为false

用法: lt 参数1 参数2

[root@k8s-master m1]# cat chart2/templates/configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}
data:
  value1: {{ lt 1 2 | quote }}   # 值为true
  value2: {{ lt 3 2 | quote }}    # 值为false

le

判断第一个参数是否小于等于第二个参数,小于等于为true,否则为false

用法: le 参数1 参数2

[root@k8s-master m1]# cat chart2/templates/configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}
data:
  value1: {{ le 1 2 | quote }}
  value2: {{ le 3 2 | quote }}
  value3: {{ le 3 3 | quote }}

# 输出
data:
  value1: "true"
  value2: "false"
  value3: "true"

gt

判断第一个参数是否大于第二个参数,大于为true,否则为false

用法: gt 参数1 参数2

ge

判断第一个参数是否大于等于第二个参数,大于等于为true,否则为false

用法: ge 参数1 参数2

and

返回第一个为false的值 ,或者最后一个值

用法: and 参数1 参数2 参数3 ...


[root@k8s-master m1]# cat chart2/templates/configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}
data:
  value1: {{ and 0 2 | quote }}
  value2: {{ and true false | quote }}
  value3: {{ and true true 5 | quote }}
  value4: {{ and 0 true | quote }}
  value5: {{ and "" true | quote }}
  value5: {{ and "" true | quote }}

# 输出
data:
  value1: "0"
  value2: "false"
  value3: "5"
  value4: "0"
  value5: ""
  value5: ""

or

返回第一个为true的参数或者最后一个参数

用法: or 参数1  参数2  参数3 ...

[root@k8s-master m1]# cat chart2/templates/configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}
data:
  value1: {{ or 0 2 | quote }}
  value2: {{ or true false | quote }}
  value3: {{ or true true 5 | quote }}
  value4: {{ or 0 true | quote }}
  value5: {{ or "" true | quote }}
  value5: {{ or "" "11" | quote }}


# 输出
data:
  value1: "2"
  value2: "true"
  value3: "true"
  value4: "true"
  value5: "true"
  value5: "11"

not

对参数的布尔值取反,由false取为true,或者由true取为false

用法: not 参数


[root@k8s-master m1]# cat chart2/templates/configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}
data:
  value1: {{ not 0 | quote }}
  value2: {{ not true | quote }}
  value3: {{ not 5 | quote }}
  value4: {{ not "" | quote }}
  value5: {{ not "11" | quote }}

# 输出
data:
  value1: "true"
  value2: "false"
  value3: "false"
  value4: "true"
  value5: "false"

empty

判断参数值是否为空,若为空,则为true

用法: empty 参数


[root@k8s-master m1]# cat chart2/templates/configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}
data:
  value1: {{ empty 0 | quote }}
  value2: {{ empty true | quote }}
  value3: {{ empty 5 | quote }}
  value4: {{ empty "" | quote }}
  value5: {{ empty "11" | quote }}
  value5: {{ empty false | quote }}


# 输出
data:
  value1: "true"
  value2: "false"
  value3: "false"
  value4: "true"
  value5: "false"
  value5: "true"

coalesce

获取一个非空列表中第一个非空的值

用法:coalesce 参数1 参数2 参数3 参数4 ...

[root@k8s-master m1]# cat chart2/templates/configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}
data:
  value1: {{ coalesce 0 1 2 34 | quote }}
  value2: {{ coalesce "" 50 2 34 | quote }}
  value3: {{ coalesce false 66 2 34 | quote }}
  value4: {{ coalesce true 1 2 34 | quote }}


data:
  value1: "1"
  value2: "50"
  value3: "66"
  value4: "true"

ternary

接收两个参数和一个test值,如果test的布尔值为true,则返回第一个参数的值,否则返回第二个参数的值

用法: ternary 参数1 参数2 true/false

[root@k8s-master m1]# cat chart2/templates/configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}
data:
  value1: {{ ternary 1 2 true | quote }}
  value2: {{ coalesce 1 2 false | quote }}

# 输出
data:
  value1: "1"
  value2: "1"

3. 字符串函数

print和println

将所有参数按照字符串进行输出,用法:print/println "字符串"
println会在每个字符串后面加一个空格,并在输出的末尾加一个换行符;
如果参数中包含非字符串类型,输出时转为字符串;
当相邻的两个参数不是字符串时,会在其中加上空格;

[root@k8s-master m1]# cat chart3/templates/configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}
data:
  value1: {{ print "this" 1 2 "print" }}
  value2: {{ println "this" 1 2 "print" }}

# 输出
data:
  value1: this1 2print
  value2: this 1 2 print


printf

格式化字符串输出内容,支持使用占位符,占位符取决于传入的参数类型
用法:printf "字符串 占位符" 占位符值

printf常用占位符

数据类型常用占位符
整数%d(十进制,如18)
浮点数%f(小数,如3.14159,%2.f指定保留两位小数)
字符串%s(字符串,如test)
布尔值%t(指定输出的布尔值,true/false)
[root@k8s-master m1]# cat chart3/templates/configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}
data:
  value1: {{ printf "this is printf %t" true }}
  value2: {{ printf "this is printf %s" "strs" }}
  value3: {{ printf "this is printf %d" 15 }}
  value4: {{ printf "this is printf %.2f" 3.14 }}


#输出
data:
  value1: {{ printf "this is printf %t" true }}
  value2: {{ printf "this is printf %s" "strs" }}
  value3: {{ printf "this is printf %d" 15 }}
  value4: {{ printf "this is printf %.2f" 3.14 }}

trim、trimPrefix、trimSuffix

trim:移除字符串两边的空格,使用:trim "字符串"
trimPrefix:移除字符串中指定的前缀,使用:trimPrefix "指定字符" "字符串"
trimSuffix:移除字符串中指定的后缀,使用:trimSuffix "指定字符" "字符串"

data:
  value1: {{ trim " this is printf  " }}
  value3: {{ trimPrefix "%" "%this is printf" }}
  value4: {{ trimSuffix "%" "this is printf %" }}


# 输出
data:
  value1: this is printf
  value3: this is printf
  value4: this is printf

titel、untitle

title:将首字母转换为大写,使用:title "字符串"
untitle:将首字母转为小写,使用:untitle "字符串"

data:
  title: {{ title "test" }}
  untitle: {{ untitle "Untitle" }}

#输出
data:
  title: Test
  untitle: untitle

snakecase、camelcase、kebabcase

snakecase:将驼峰命名改为下划线命名,使用:snakecase "UserName"
camelcase:将下划线改为驼峰命令,使用:camelcase "user_name"
kebabcase:将驼峰命名改为-命名,使用:kebabcase "UserName"

data:
  snakecase: {{ snakecase "UserName" }}
  camelcase: {{ camelcase "user_name" }}
  kebabcase: {{ kebabcase "UserName" }}

# 输出
data:
  snakecase: user_name
  camelcase: UserName
  kebabcase: user-name

字符串切割函数:substr

用于切割字符串,使用:substr 开始位置 结束位置 "字符串"
注意:索引从0开始,包含开始位置,不包含结束位置

data:
  substr: {{ substr 2 7 "UserName" }}

#输出
data:
  substr: erNam

字符串截取函数:trunc

截取字符串,使用:trunc 整数 "字符串"
注意:正整数表示从前往后截,负整数表示从后往前截取

data:
  trunc1: {{ trunc 2 "UserName" }}
  trunc2: {{ trunc -2 "UserName" }}


#输出
data:
  trunc1: Us
  trunc2: me

字符串加密函数:randAlphaNum、randAlpha、randNumeric、randAscii

randAlphaNum:使用0-9a-zA-Z生成随机字符串,用法:randAlphaNum 长度
randAlpha:使用a-zA-Z生成随机字符串,用法:randAlpha 长度
randNumeric:使用0-9生成随机字符串,用法:randNumeric 长度
randAscii:使用所有可用Ascii生成随机字符串,用法:randAscii 长度

data:
  randAlpha: {{ randAlpha 6 }}
  randAlphaNum: {{ randAlphaNum 6 }}
  randNumeric: {{ randNumeric 6 }}
  randAscii: {{ randAscii 6 }}

# 输出
data:
  randAlpha: gJipGY
  randAlphaNum: ZKDmCl
  randNumeric: 752062
  randAscii: <YY:&=

contains

测试字符是否包含在字符串内,使用:contains 字符 字符串

data:
  contains1: {{ contains "er" "her"}}
  contains2: {{ contains "ee" "her" }}

# 输出
data:
  contains1: true
  contains2: false

hasPrefix、hasSuffix

hasPrefix:指定字符是否为字符串前缀,使用:hasPrefix 字符 字符串
hasSuffix:指定字符是否为字符串后缀,使用:hasSuffix 字符 字符串

data:
  hasPrefix: {{ hasPrefix "us" "user"}}
  hasSuffix: {{ contains "er" "user" }}

# 输出
data:
  hasPrefix: true
  hasSuffix: true

nospace

nospace:去掉字符串所有空格,用法:nospace 字符串

data:
  nospace: {{ nospace "i a l"}}

# 输出
data:
  nospace: ial

wrapWith

在字符串的指定列加内容,用法:wrapWith 列数 字符 字符串

data:
  wrapWith: {{ wrapWith 5 "\t" "helloworld" }}


# 输出
data:
  wrapWith: hello       world

合并字符串:cat

将多个字符串合并为一个字符串,并在中间加上空格,用法:cat 字符串1 字符串2 字符串3

data:
  cat: {{ cat "hello" "world" }}

# 输出
data:
  cat: hello world

字符串替换函数:replace

替换字符串内的指定字符,用法:字符串 | replace 字符 替换字符

data:
  replace: {{ "i-am-ironman" | replace "-" " " }}

# 输出
data:
  replace: i am ironman

字符串缩进函数:indent、nindent

指定长度对字符串进行缩进,nindent在缩进时会在字符串前加一个新行
用法:ident/nindent 缩进长度 字符串
注意:ident和nindent函数最好顶格写

data:
  data1: |
{{ indent 4 "test" }}
{{ nindent 4 "test" }}


# 输出
data:
  data1: |
    test

    test

plural

判断字符串长度,根据字符串长度返回参数,字符串长度为1,返回第一个参数,否则返回第二个参数
用法:len 字符串 | plural 参数1 参数2

data:
  plural1: {{ len "a" | plural "a" "abc" }}
  plural2: {{ len "ab" | plural "a" "abc" }}
  plural3: {{ len "" | plural "a" "abc" }}

# 输出
data:
  plural1: a
  plural2: abc
  plural3: abc

4. helm3的类型转换

常用的类型转换函数有int、float、toString、atoi等函数。
int/atoi:将参数转换为整型,使用:int/atoi 字符串
float64:将参数转换为float64类型,使用:float 字符串
toString:将参数转换为字符串类型,使用:toString 字符串

data:
  value1: {{ float64 "1.0" | kindOf }}
  value2: {{ int "5" | kindOf }}
  value3: {{ atoi "5" | kindOf }}
  value4: {{ toString 1 | kindOf }}


# 输出
data:
  value1: float64
  value2: int
  value3: int
  value4: string

5. 正则表达式函数

正则匹配函数:regexMatch、mustRegexMatch

根据指定的正则表达式匹配字符串,如果匹配成功,返回true,否则返回false。regexMatch匹配失败会返回false,mustRegexMatch匹配失败报错。

使用:regexMatch/mustRegexMatch 正则表达式 字符串

data:
  value1: {{ regexMatch "^[0-9a-zA-Z._%+-]+@[0-9a-zA-Z.-]+\\.[a-zA-Z]{2,}$" "aaa@qq.com" }}
  value2: {{ mustRegexMatch "^[0-9a-zA-Z._%+-]+@[0-9a-zA-Z.-]+\\.[a-zA-Z]{2,}$" "aaa@qq.com" }}


# 输出
data:
  value1: true
  value2: true

regexFindAll、mustRegexFindAll

获取字符串中匹配正则表达式的字符串内容,并指定返回的数量,-1表示返回全部

用法:regexFindAll/mustRegexFindAll 正则表达式 字符串 数量

data:
  value1: {{ regexFindAll "[0-9a-zA-Z]" "aaa@qq.com" 3 | quote }}
  value2: {{ mustRegexFindAll "[0-9a-zA-Z]" "aaa@qq.com" -1 | quote }}

# 输出
data:
  value1: "[a a a]"
  value2: "[a a a q q c o m]"

regexFind、mustRegexFind

根据正则表达式匹配字符串的内容,并返回匹配到的第一个结果

用法:regexFind/mustRegexFind 正则表达式 字符串

data:
  value1: {{ regexFind "[0-9][a-z]" "sa1asdasd5" |quote }}
  value2: {{ mustRegexFind "[0-9][a-z]" "sa1asdasd5"|quote }}


# 输出
data:
  value1: "1a"
  value2: "1a"

正则替换函数:regexReplaceAll、mustRegexReplaceAll

根据正则表示式匹配内容,并进行替换

用法:regexReplaceAll/mustRegexReplaceAll 正则 字符串 替换内容

data:
  value1: {{ regexReplaceAll "ad" "sa1asdasd5" "$" }}
  value2: {{ mustRegexReplaceAll "a(s*)d" "sa1asdasd5" "$" }}
  value3: {{ mustRegexReplaceAll "a(s*)d" "sa1asdasd5" "${1}A" 
 }}
# ${1}指的是(s*)

# 输出
data:
  value1: sa1asdasd5
  value2: sa1$$5
  value3: sa1sAsA5

regexReplaceAllLiteral、mustRegexReplaceAllLiteral

与正则替换基本相同,唯一不同在于,${1}不会进行替换

data:
  value1: {{ regexReplaceAllLiteral "ad" "sa1asdasd5" "$" }}
  value2: {{ mustRegexReplaceAllLiteral "a(s*)d" "sa1asdasd5" "$" }}
  value3: {{ mustRegexReplaceAllLiteral "a(s*)d" "sa1asdasd5" "${1}A" }}


# 输出
data:
  value1: sa1asdasd5
  value2: sa1$$5
  value3: sa1${1}A${1}A5

6. 加密解密函数

加密函数:sha1sum、sha256sum、adler32sum、htpasswd

用法:sha1sum/sha256sum/adler32sum 字符串、htpasswd "用户名 密码"
sha1sum:计算字符串的SHA1值进行加密
sha256sum:计算字符串的SHA256值进行加密
adler32sum:计算字符串的Adler32值进行加密
htpasswd:根据传入的两组字符串生成用户名:密码(哈希值),用于http server认证

data:
  value1: {{ sha1sum "test" | quote }}
  value2: {{ sha256sum "test" | quote }}
  value3: {{ adler32sum "test" | quote }}
  value4: {{ htpasswd "test" "123456" | quote }}

# 输出
data:
  value1: "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3"
  value2: "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
  value3: "73204161"
  value4: "test:$2a$10$XU0HJr2E0GITZSUYM5KEs.UBScajX0FnbZ1JHewR1jS0QIjttNbw."
# value4中test为用户名,冒号后面为密码

加密解密函数:encryptAES、decryptAES

encryptAES:加密函数,使用AES256加密字符串,并设定加密的key值,返回字符串的base64编码值
用法:encryptAES key值 要加密的字符串
decryptAES:解密函数,对AES256加密的字符串进行解密
用法:decryptAES key值 加密字符串

encryptAES

data:
  value1: {{ encryptAES "key" "test" }}

# 输出
data:
  value1: kui85k9DYteMoTqvMkIFckFaI+Yk1h/xaqhcFOPopKc=

decryptAES

data:
  value1: {{ decryptAES "key" "kui85k9DYteMoTqvMkIFckFaI+Yk1h/xaqhcFOPopKc=" }}

# 输出
data:
  value1: test

编码解码函数:b64enc、b64dec(k8s的secret.yml文件常用)

b64enc:按照base64对字符串进行编码,用法:b64enc 字符串
b64dec:对base64编码的字符串进行解码,用法:b64dec 字符串

b64enc

data:
  value1: {{ b64enc "test" }}
#输出
data:
  value1: dGVzdA==

b64dec

data:
value1: {{ b64dec "dGVzdA==" }}

#输出
data:
value1: test

7. 日期函数

函数说明用法
now获取当前日期和时间用法:now
date对于返回的日期信息格式化,可使用"2006-01-02"或"02/01/2006"进行格式化用法:日期信息 | date "2006-01-02"/02/01/2006,传递格式只能是上面两种信息
dateInZone指定时区返回时间信息用法:dateInZone "格式" 时间 "时区"
duration将秒数按照时分秒显示用法:duration "秒数"
durationRound将日期信息取整,返回大的时间单位用法:durationRound "时分秒"
unixEpoch将日期信息转换为时间戳用法:unixEpoch "日期信息"|
dateModify/mustDateModify对日期信息进行修改用法:"日期信息" | dateModify/mustDateModify "修改内容"
toDate/mustToDate将指定字符串按照格式转为日期用法:toDate/mustToDate "日期格式" "字符串"
data:
  value1: {{ now }}
  value2: {{ now | date "2006-01-02"}}
  value3: {{ now | date "02/01/2006"}}
  value4: {{ dateInZone "2006-01-02" now "UTC" }}
  value5: {{ duration now }}
  value6: {{ durationRound "1h30m5s" }}
  value7: {{ unixEpoch now }}
  value8: {{ now | dateModify "-2h" }}   # 当前时间减去两个小时
  value9: {{ now | mustDateModify "+2h" }} # 当前时间加上两个小时
  value10: {{ toDate "2006-01-02" "2025-10-27" }}
  value11: {{ mustToDate "02/01/2006" "27/10/2025" }}


# 输出
data:
  value1: 2025-10-27 17:11:37.914457528 +0800 CST m=+0.291771379
  value2: 2025-10-27
  value3: 27/10/2025
  value4: 2025-10-27
  value5: 0s
  value6: 1h
  value7: 1761556297
  value8: 2025-10-27 15:11:37.914594202 +0800 CST m=-7199.708091953
  value9: 2025-10-27 19:11:37.914610188 +0800 CST m=+7200.291924034
  value10: 2025-10-27 00:00:00 +0800 CST
  value11: 2025-10-27 00:00:00 +0800 CST

8. 字典函数

helm3中,字典里面放的是键值对的集合。字典函数包含dict、get、set、unset、keys、hasKey、pluck、merge/mustMerge、mergeOverWrite/mustMergeOverWrite等。

dict

dict:用于定义字典,用法:dict "key1" "value1" "key2" value2 "...
注意:字典内的key必须为字符串,value可以是任何类型

get

get:用于根据指定的key值获取对应的value值,用法:get 字典 "key"
注意:get只会返回value值

set

set:用于向字典中新增键值对,也可修改键值对,用法:set 字典 "key" "value"
注意:由于set是向列表做操作,还是返回列表

unset

用于删除字典中已有的键值对,用法:unset 字典 "key"

data:
# 定义字典,并将其赋值给$dict1变量
  {{- $dict1 := dict "key1" "value1" "key2" "value2" "key3" "value3"}}
  value1: {{ get $dict1 "key1"}}
  value2: {{ set $dict1 "key4" "value4"}}
  value3: {{ unset $dict1 "key3" }}


# 输出
data:
  value1: value1
  value2: map[key1:value1 key2:value2 key3:value3 key4:value4]
  value3: map[key1:value1 key2:value2 key4:value4]
# map[]为字典

keys

keys:用于获取一个或多个字典中的key值,并返回一个无序列表。如果多个字典有相同的key,并不会被去重。如果要去重和排序可以使用sortAlpha和uniq函数处理。
用法:keys 字典1 字典2 字典3

data:
  {{- $dict1 := dict "key1" "value1" "key2" "value2" "key3" "value3"}}
  {{- $dict2 := dict "key1" "value1" "key4" "value4" "key5" "value5"}}
  value1: {{ keys $dict1 $dict2}}
  value2: {{ keys $dict1 $dict2 | sortAlpha | uniq}}


# 输出
data:
  value1: "[key1 key2 key3 key5 key1 key4]"
  value2: "[key1 key2 key3 key4 key5]"

# 列表是[]

hasKey

hasKey:判断字典中是否包含指定的key,如果包含,返回true,否则返回false
用法:hasKey 字典 "key"

data:
  {{- $dict1 := dict "key1" "value1" "key2" "value2" "key3" "value3"}}
  {{- $dict2 := dict "key1" "value1" "key4" "value4" "key5" "value5"}}
  value1: {{ hasKey $dict1 "key1" | quote}}
  value2: {{ hasKey $dict1 "key5" | quote}}

# 输出
data:
  value1: "true"
  value2: "false"

pluck

pluck:根据一个或多个字典的key,返回对应的所有value的列表。
用法:pluck "key" 字典1 字典2

data:
  {{- $dict1 := dict "key1" "value1" "key2" "value2" "key3" "value3"}}
  {{- $dict2 := dict "key1" "value5" "key4" "value4" "key5" "value5"}}
  value1: {{ pluck "key1" $dict1 $dict2 | quote}}


#输出
data:
  value1: "[value1 value5]"

mustMerge/merge

merge/mustMerge:合并函数,有源字典向目标字典合并,如果源字典和目标字典中有相同的key,则value值以源字典为主
用法:merge 目标字典 源字典1 源字典2...

data:
  {{- $dict1 := dict "key1" "value1" "key2" "value2" "key3" "value3"}}
  {{- $dict2 := dict "key1" "value5" "key4" "value4" "key5" "value5"}}
  {{- $dict3 := dict "key1" "value6" "key6" "value6" "key7" 123 }}
  value1: {{ merge $dict1 $dict2 $dict3| quote}}
  value1: {{ mustMerge $dict1 $dict2 $dict3| quote}}


# 输出
data:
  value1: "map[key1:value1 key2:value2 key3:value3 key4:value4 key5:value5 key6:value6 key7:123]"
  value1: "map[key1:value1 key2:value2 key3:value3 key4:value4 key5:value5 key6:value6 key7:123]"

mergeOverwrite/mustMergeOverwrite

字典合并函数,有源字典向目标字典合并,有相同的key时,value以源字典为主

data:
  {{- $dict1 := dict "key1" "value1" "key2" "value2" "key3" "value3"}}
  {{- $dict2 := dict "key1" "value5" "key4" "value4" "key5" "value5"}}
  {{- $dict3 := dict "key1" "value6" "key6" "value6" "key7" 123 }}
  value1: {{ mergeOverwrite $dict1 $dict2 $dict3| quote}}
  value1: {{ mustMergeOverwrite $dict1 $dict2 $dict3| quote}}


# 输出
data:
  value1: "map[key1:value6 key2:value2 key3:value3 key4:value4 key5:value5 key6:value6 key7:123]"
  value1: "map[key1:value6 key2:value2 key3:value3 key4:value4 key5:value5 key6:value6 key7:123]"

values

获取一个字典中所有的value值并返回一个列表,用法:values 字典

data:
  {{- $dict1 := dict "key1" "value1" "key2" "value2" "key3" "value3"}}
  value1: {{ values $dict1 | quote}}


# 输出
data:
  value1: "[value2 value3 value1]"

pick/omit

pick:根据指定的字典及key值,返回键值对集合,即新的字典,用法:pick 字典 "key1" "key2"
omit:根据指定的字典及key值,返回字典中不包含key的键值对集合,即新的字典

data:
  {{- $dict1 := dict "key1" "value1" "key2" "value2" "key3" "value3"}}
  value1: {{ pick $dict1 "key1" "key2"| quote}}
  value2: {{ omit $dict1 "key1" "key2"| quote}}


# 输出
data:
  value1: "map[key1:value1 key2:value2]"
  value2: "map[key3:value3]"

deepCopy/mustDeepCopy

用于字典拷贝,拷贝一个新字典,用法:字典 | deepCopy

data:
  {{- $dict1 := dict "key1" "value1" "key2" "value2" "key3" "value3"}}
  value1: {{ $dict1 | deepCopy | quote}}

# 输出
data:
  value1: "map[key1:value1 key2:value2 key3:value3]"

9. 列表函数

helm3的列表函数包含list、first、rest、last、initial、append、prepend、contact、reverse、uniq、without、has、compact等。

函数说明用法
list用于生成一个列表list 1 2 3 "one" "two" "three"
first用于获取列表中的第一项first 列表
rest用于获取列表中除了第一项的其他,并返回列表rest 列表
last用于获取列表中的最后一项last 列表
initial用于获取列表中除最后一项的其他项,并返回列表initial 列表
append用于向列表中追加一项内容append 列表 追加的内容
prepend用于在列表第一项前插入内容prepend 列表 追加的内容
concat用于合并多个列表concat 列表1 列表2
reverse用于反转列表reverse 列表
uniq用于去重列表中的重复项uniq 列表
without用于过滤掉列表中的指定内容without 列表 要过滤的内容
has用于判断列表中的指定内容是否存在has 内容 列表
compact用来删除列表中的空值,控制包含:“”,0,[],{},null或nilcompact 列表
slice用于列表的切片,索引从0开始,包含起始索引,不包含结束索引,如果只有起始索引,表示从起始索引切片到最后slice 列表 起始索引 结束索引
until用于构建指定整数范围内的列表,从0至整数-1until 结束数字
untilStep用于构建指定整数范围内的列表,可设定步长untilStep 起始数字 结束数字 步长
seq用于生成指定范围内的整数,如果只有一个数字,表示结束数字,从1-结束;如果两个数字默认步长为1;seq 起始数字 步长 结束数字
data:
# list
  {{- $list1 := list "" 1 2 3 "A" "B" "C" true }}
  value1: {{ $list1 | quote }}
# first
  value2: {{ $list1 | first|quote }}
# rest
  value3: {{ rest $list1 | quote }}
# last
  value4: {{ last $list1 | quote }}
# initial
  value5: {{ initial $list1 | quote }}
# append
  value6: {{ append $list1 false| quote }}
# prepend
  value7: {{ prepend $list1 0| quote }}
# concat
  value8: {{ concat $list1 (list 1 6 7)| quote }}
# reverse
  value9: {{ reverse $list1 | quote }}
# uniq
  value10: {{ concat $list1 (list 1 6 7)| uniq|quote }}
# without
  value11: {{ without $list1 "A" | quote }}
# has
  value12: {{ has "" $list1  | quote }}
# compact
  value13: {{ compact $list1  | quote }}
# slice
  value14: {{ slice $list1 5 | quote }}   # 起始索引为5,到列表最后
  value15: {{ slice $list1 1 5 | quote }} # 起始索引为1,结束索引为5
# util
  value16: {{ until 5 | quote }} # 开始为0,结束为5,不包含5
  value17: {{ untilStep 1 9 2 | quote }} # 开始为1,结束为9,步长为2
# seq
  value18: {{ seq 1 6 | quote }} # 开始为1,结束为6,步长为1
  value19: {{ seq 1  2 9 | quote }} # 开始为1,结束为9,步长为2
  value20: {{ seq 9 | quote }} # 开始为1,结束为9



# 输出
data:
  value1: "[ 1 2 3 A B C true]"
  value2: ""
  value3: "[1 2 3 A B C true]"
  value4: "true"
  value5: "[ 1 2 3 A B C]"
  value6: "[ 1 2 3 A B C true false]"
  value7: "[0  1 2 3 A B C true]"
  value8: "[ 1 2 3 A B C true 1 6 7]"
  value9: "[true C B A 3 2 1 ]"
  value10: "[ 1 2 3 A B C true 6 7]"
  value11: "[ 1 2 3 B C true]"
  value12: "true"
  value13: "[1 2 3 A B C true]"
  value14: "[B C true]"
  value15: "[1 2 3 A]"
  value16: "[0 1 2 3 4]"
  value17: "[1 3 5 7]"
  value18: "1 2 3 4 5 6"
  value19: "1 3 5 7 9"
  value20: "1 2 3 4 5 6 7 8 9"

10. 数学计算函数

函数说明用法
add用于参数的加法计算add 参数1 参数2 ...
sub用于参数的减法计算add 减数 被减数
mul用于参数的乘法计算mul 参数1 参数2 参数3
div用于两个参数的除法计算div 被除数 除数
mod用于两个参数的模运算mod 参数1 参数2
add1用于参数的+1运算add1 参数
max用于获取参数的最大值max 参数列表
min用于获取参数的最小值min 参数列表
round用于计算参数四舍五入的值round 参数 保留位数
len用于获取参数的长度len 参数
floor用于计算小于等于浮点数参数的最大整数值floor 浮点数
ceil用于计算大于等于浮点数参数的最小整数值ceil 浮点数
data:
  value1: {{ add 1 2 3 | quote }}
  value2: {{ sub 1 2 | quote }}
  value3: {{ mul 1 2 3 4 | quote }}
  value4: {{ div 6 3 | quote }}
  value5: {{ mod 9 2 | quote }}
  value6: {{ add1 2 | quote }}
  value7: {{ max 2 3 4 5 | quote }}
  value8: {{ min 2 3 4 5 | quote }}
  value9: {{ round 123.4567 2 | quote }}
  value10: {{ floor 123.45 | quote }}
  value11: {{ ceil 123.45 | quote }}

# 输出
data:
  value1: "6"
  value2: "-1"
  value3: "24"
  value4: "2"
  value5: "1"
  value6: "3"
  value7: "0"
  value8: "0"
  value9: "123.46"
  value10: "123"
  value11: "124"

11. 网络函数

函数说明用法
getHostByName用于获取域名的IP地址getHostByName 域名
data:
  value1: {{ getHostByName "www.baidu.com" | quote }}


# 输出
data:
  value1: "39.156.70.46"

12. 文件路径函数

函数说明用法
base用于返回文件的最后一层路径,即文件名base 文件路径
dir用于返回文件所在的目录dir 文件路径
ext用于返回文件的扩展名ext 文件路径
isAbs判断文件路径是否为绝对路径isAbs 文件路径
metadata:
  name: {{ .Release.Name }}
data:
  value1: {{ base "/home/m1/char5/templates/configmap.yaml" | quote }}
  value2: {{ dir "/home/m1/char5/templates/configmap.yaml" | quote }}
  value3: {{ ext "/home/m1/char5/templates/configmap.yaml" }}
  value4: {{ isAbs "/home/m1/char5/templates/configmap.yaml" | quote }}


# 输出
data:
  value1: "configmap.yaml"
  value2: "/home/m1/char5/templates"
  value3: .yaml
  value4: "true"

13. 类型检查函数

函数说明用法
kindOf用于返回参数的类型kindOf 参数
kindIs用于判断参数是否为指定的类型kindIs "类型" 参数
deepEqual用于判断两个参数是否相等deepEqual 参数1 参数2
data:
  value1: {{ kindOf (dict "1" "2") | quote }}
  value2: {{ kindIs "slice" (list "1" "2") | quote }}
  value3: {{ deepEqual (list "1" "2") (list "1" "2") | quote }}


# 输出
data:
  value1: "map"
  value2: "true"
  value3: "true"

本文内容为学习过程记录内容,参考helm3实战教程,如有侵权,请联系删除!!

更多推荐