Bootstrap

Kubernetes——Helm(二)

我们已经知道了如何将信息传到模板中。 但是传入的信息并不能被修改。有时我们希望以一种更有用的方式来转换所提供的数据。

一、函数初体验

quote函数:把.Values对象中的字符串属性用引号引起来,然后放到模板中。

  
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  name: {{ quote .Values.name1 }}

[root@master ~]# helm install --dry-run goodly-guppy ./mychart
NAME: goodly-guppy
LAST DEPLOYED: Wed Jul  3 15:40:03 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
  name: "test1"

二、函数详解

语法是 :functionName arg1 arg2...

2.1 管道符

借鉴UNIX中的概念,管道符是将一系列的模板语言紧凑地将多个流式处理结果合并的工具。换句话说,管道符是按顺序完成一系列任务的方式。

示例:

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  name: {{ .Values.name1 | quote }}

在这个示例中,并不是调用quote 参数,而是倒置了命令。使用管道符(|)将参数“发送”给函数: .Values.name1 | quote 

使用管道符可以将很多函数链接在一起:

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  name: {{ .Values.name1 | upper | quote }}

倒置命令是模板中的常见做法。

模板执行结果

[root@master ~]# helm install --dry-run goodly-guppy ./mychart
NAME: goodly-guppy
LAST DEPLOYED: Wed Jul  3 15:46:19 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
  name: "TEST1"

2.2  常用函数

repeat函数会返回给定参数特定的次数

[root@master ~]# vim mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  name: {{ .Values.name1 | upper | repeat 2 | quote }}
~      

[root@master ~]# helm install --dry-run goodly-guppy ./mychart
NAME: goodly-guppy
LAST DEPLOYED: Wed Jul  3 15:56:22 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
  name: "TEST1TEST1"                                                

default函数:允许你在模板中指定一个默认值,以防这个值被忽略。

drink: {{ .Values.name1 | default "test" | quote }}

移除从value文件中移除name1的值

#name1: test1

修改configmap文件

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  name: {{ .Values.name1 | default "test" | quote }}

执行结果

[root@master ~]# helm install --dry-run goodly-guppy ./mychart     
NAME: goodly-guppy
LAST DEPLOYED: Wed Jul  3 16:13:31 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
  name: "test"

lookup函数:可以用于在运行的集群中 查找 资源。lookup函数简述为查找 apiVersion, kind, namespace,name -> 资源或者资源列表,类似与kubectl get

parametertype
apiVersion   string
kindstring
namespacestring
namestring

name 和 namespace 都是选填的,且可以传空字符串("")作为空。

命令      lookup函数
kubectl get pod mypod -n mynamespacelookup "v1" "Pod" "mynamespace" "mypod"
kubectl get pods -n mynamespacelookup "v1" "Pod" "mynamespace" ""
kubectl get pods --all-namespaceslookup "v1" "Pod" "" ""
kubectl get namespace mynamespacelookup "v1" "Namespace" "" "mynamespace"
kubectl get namespaceslookup "v1" "Namespace" "" ""
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  name: {{ range $namespace := (lookup "v1" "Namespace" "" "").items }}

lookup返回一个对象,它会返回一个字典。这个字典可以进一步被引导以获取特定值。

[root@master ~]# helm install --dry-run goodly-guppy ./mychart
NAME: goodly-guppy
LAST DEPLOYED: Wed Jul  3 16:38:18 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
  name: map[]

Helm在helm template或者helm install|upgrade|delete|rollback --dry-run时, 不应该请求Kubernetes API服务。由此,lookup函数在该案例中会返回空列表(即字典)。

2.3 运算符

对于模板来说,运算符(eqneltgtandor等等) 都是作为函数来实现的。

函数说明
eq等于,两个参数如果相等返回true,否则返回false
ne不相等,两个参数如果不相等返回true,相等返回false
lt小于,第一个参数如果小于第二个参数返回true,否则返回false
le小于等于,第一个参数小于等于第二个参数返回true,否则返回false
gt大于,第一个参数大于第二个参数返回true,否则返回false
ge大于等于,第一个参数大于等于第二个参数返回true,否则返回false
and逻辑与,如果两个参数都是真返回true,否则返回false
or逻辑或,两个参数有一个为真返回true
not对参数取反,参数为空的为false,返回true
coalesce扫描一个给定的列表,返回第一个非空值
ternary接受两个参数和一个test值,如果test的布尔值为true,则返回第一个参数的值如果test的布尔值为false,则返回第二个值。ternary "foo" "bar" true
empty判断给定的值是否为空    
default设置一个简单的默认值。default "foo" .Bar
fail无条件地返回带有指定文本的空 string 或者 error。这在其他条件已经确定而模板渲染应该失败的情况下很有用。

2.4 字符串函数

1、print和println函数

按照字符串进行输出,println有换行符两个字符串之间添加空格符

[root@master ~]# vim mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
   println: {{ println "Test println" }}
   print:  {{ print "Test print" }}
~                                  
~                                    

[root@master ~]# helm install  --dry-run goodly-guppy ./mychart
NAME: goodly-guppy
LAST DEPLOYED: Wed Jul  3 17:36:28 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
   println: Test println

   print:  Test print

2、printf 函数

printf 函数字符串格式化输出,支持占位符。

printf "%s has %d dogs." .Name .NumberDogs

占位符取决于传入的参数类型

占位符描述
布尔值
%t true或false
整型
%b二进制
%o8进制
%O带0o前缀的8进制
%q安全转义的单引号字符
%x16进制,使用小写字符a-f
%X16进制,使用小写字符A-F
%UUnicode格式: U+1234; 和"U+%04X"相同
浮点数和复杂成分
%b指数二次幂的无小数科学计数法,比如 -123456p-78
%e科学计数法,比如: -1.234456e+78
%E科学计数法,比如: -1.234456E+78
%f无指数的小数,比如: 123.456
%F与%f同义
字符串和字节切片
%s未解析的二进制字符串或切片
%q安全转义的双引号字符串
%x十六进制,小写,每个字节两个字符
%X十六进制,大写,每个字节两个字符

apiVersion: v1[root@master ~]# vim mychart/templates/configmap.yaml
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
   printf:  {{ printf "The bollean is %t" true }}
   printf:  {{ printf "The string is %s" "strtest" }}
   printf:  {{ printf "The num is %d" 15 }}
   printf:  {{ printf "The float is %.2f"  3.1415926 }}

[root@master ~]# helm install --dry-run goodly-guppy ./mychart
NAME: goodly-guppy
LAST DEPLOYED: Wed Jul  3 22:07:09 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
   printf:  The bollean is true
   printf:  The string is strtest
   printf:  The num is 15
   printf:  The float is 3.14

3、trim函数

trim函数:移除字符串两边的空格

[root@master ~]# vim mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
   trim:{{ trim " trim " }}

[root@master ~]# helm install --dry-run goodly-guppy ./mychart
NAME: goodly-guppy
LAST DEPLOYED: Wed Jul  3 22:10:29 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
   trim:trim

4、trimAll函数

trimAll函数:从字符串中移除给定的字符,只能去除从开头或从结尾指定的字符

[root@master ~]# vim mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
   trimAll:{{ trimAll "All" "trimAll" }}   #去除最后三个字符
   trimAll:{{ trimAll "tr" "trimAll" }}    #去除开头的两个字符
   trimAll:{{ trimAll "ri" "trimAll" }}    #不能去除中间的字符

[root@master ~]# helm install --dry-run goodly-guppy ./mychart
NAME: goodly-guppy
LAST DEPLOYED: Wed Jul  3 22:18:16 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
   trimAll:trim
   trimAll:imAll
   trimAll:trimAll

5、trimPrefix和trimSuffix

trimPrefix:从字符串中移除指定的前缀

trimSuffix:从字符串中移除指定后缀

[root@master ~]# vim mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
   trimPrefix: {{ trimPrefix "--" "--trimPrefix" }}
   trimSuffix: {{ trimSuffix "--" "trimSuffix--" }}

[root@master ~]# helm install --dry-run goodly-guppy ./mychart
NAME: goodly-guppy
LAST DEPLOYED: Wed Jul  3 22:31:35 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
   trimPrefix: trimPrefix
   trimSuffix: trimSuffix

6、lower函数和upper函数

lower函数:将整个字符串转换成小写

upper函数:将整个字符串转换成大写

[root@master ~]# vim mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
   lower: {{ lower "LOWER" }}
   upper: {{ upper "upper" }}

[root@master ~]# helm install --dry-run goodly-guppy ./mychart
NAME: goodly-guppy
LAST DEPLOYED: Wed Jul  3 22:33:44 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
   lower: lower
   upper: UPPER

7、title函数和untitle函数

title函数:首字母转换成大写

untitle函数:移除首字母大写

[root@master ~]# vim mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
   title: {{ title "test" }}
   untitle: {{ untitle "Test" }}

[root@master ~]# helm install --dry-run goodly-guppy ./mychart
NAME: goodly-guppy
LAST DEPLOYED: Thu Jul  4 10:12:47 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
   title: Test
   untitle: test

8、substr函数

substr函数:获取字符串的子串,即对字符串切片

参数:start(int):开始位置,从0开始

           end(int):结束位置(不包含)

            string(string):目标字符串

substr 0 5 "hello world"
[root@master ~]# vim mychart/templates/configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
   substr: {{ substr 0 5 "hello world" }}

[root@master ~]# helm install --dry-run goodly-guppy ./mychart
NAME: goodly-guppy
LAST DEPLOYED: Thu Jul  4 10:22:43 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
   substr: hello

9、nospace函数

nospace函数:去掉字符串中的所有空格

nospace "hello w o r l d"
[root@master ~]# vim mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
   nospace: {{ nospace "hello w o r l d" }}

[root@master ~]# helm install --dry-run goodly-guppy ./mychart
NAME: goodly-guppy
LAST DEPLOYED: Thu Jul  4 10:28:18 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
   nospace: helloworld

10、trunc函数

截断字符串。

参数说明:正数表示从头开始数几个字符,负数表示从尾部开始数几个字符

trunc -5 "hello world"
[root@master ~]# vim mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
   trunc: {{ trunc  5 "hello world" }}
   trunc: {{ trunc  -5 "hello world" }}

[root@master ~]# helm install --dry-run goodly-guppy ./mychart
NAME: goodly-guppy
LAST DEPLOYED: Thu Jul  4 10:30:50 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
   trunc: hello
   trunc: world

11、abbrev函数

用省略号截断字符串 (...)

参数:最大长度(算上"..."剩余的字符串长度)

           字符串

abbrev 5 "hello world"
[root@master ~]# vim mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
   abbrev: {{ abbrev 5 "hello world" }}

[root@master ~]# helm install --dry-run goodly-guppy ./mychart
NAME: goodly-guppy
LAST DEPLOYED: Thu Jul  4 10:35:16 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
   abbrev: he...

12、abbrevboth函数

省略两头指定的字符串,偏移位去除后加上两头(...)不足指定的最大长度则去除尾部的字符剩余的字符加上一个(...)为指定的长度,如果去除一头后加上(...)等于指定的长度则去除一头,去除两头后加上(...),等于指定长度则去除两头

参数:从头/尾开始的偏移位

           最大长度包含(...),字符串小于等于最大长度则返回原函数

           字符串

[root@master ~]# vim mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
   abbrevboth: {{ abbrevboth 5 10 "1234 5678 9123" }}

[root@master ~]# helm install --dry-run goodly-guppy ./mychart
NAME: goodly-guppy
LAST DEPLOYED: Thu Jul  4 11:03:59 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
   abbrevboth: ...5678...

13、initials函数

截取给定字符串的首字母,并组合在一起

[root@master ~]# vim mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
   initials: {{ initials "First Try" }}

[root@master ~]# helm install --dry-run goodly-guppy ./mychart
NAME: goodly-guppy
LAST DEPLOYED: Thu Jul  4 11:06:00 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
   initials: FT

14、randAlphaNum, randAlpha, randNumeric, randAscii

这四个函数生成加密安的随机字符串,但是使用字符集不同

  • randAlphaNum 使用 0-9a-zA-Z
  • randAlpha 使用 a-zA-Z
  • randNumeric 使用 0-9
  • randAscii 使用所有的可打印ASCII字符

每个函数都需要一个参数:字符串的整型长度

[root@master ~]# vim mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
   randAlphaNum: {{ randAlphaNum 5 }}
   randAlpha: {{ randAlpha 5 }}
   randNumeric: {{ randNumeric 5 }}
   randAscii: {{ randAscii 5 }}

[root@master ~]# helm install --dry-run goodly-guppy ./mychart
NAME: goodly-guppy
LAST DEPLOYED: Thu Jul  4 11:22:52 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
   randAlphaNum: r1nBU
   randAlpha: RfgrR
   randNumeric: 31893
   randAscii: R]D"D

15、wrap函数

以给定列数给文字换行

wrap 80 $someText

上述结果会以$someText在80列处换行。

16、wrapWith

wrapWith 和 wrap 类似,但可以以指定字符串换行。(wrap 使用的是 \n)

wrapWith 5 "\t" "Hello World"

17、contains函数

测试字符串是否包含在另一个字符串中

contains "cat" "catch"
[root@master ~]# vim mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
   contains: {{ contains cat "catch" }}

[root@master ~]# helm install --dry-run goodly-guppy ./mychart
NAME: goodly-guppy
LAST DEPLOYED: Thu Jul  4 11:31:44 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
   contains: true

18、hasPrefix and hasSuffix

hasPrefix 和 hasSuffix 函数测试字符串是否有给定的前缀或后缀

hasPrefix "cat" "catch"

19、quote and squote

该函数将字符串用双引号(quote) 或者单引号(squote)括起来。

cat | quote

20、cat

cat 函数将多个字符串合并成一个,用空格分隔

cat "hello" "beautiful" "world"

上述结果为: hello beautiful world

21、其他函数

函数说明
indent以指定长度缩进给定字符串所在行,在对齐多行字符串时很有用  indent 4 $lots_of_text
nindentnindent 函数和indent函数一样,但可以在字符串开头添加新行。nindent 4 $lots_of_text
replace执行简单的字符串替换。

需要三个参数

  • 待替换字符串
  • 要替换字符串
  • 源字符串
plural

字符串复数化。len $fish | plural "one anchovy" "many anchovies"

如果字符串长度为1,则第一个参数会被打印(one anchovy)。否则,会打印第二个参数(many anchovies

snakecase将驼峰写法转换成蛇形写法。snakecase "FirstName"   结果为: first_name.
camelcase将字符串从蛇形写法转换成驼峰写法。camelcase "http_server"。结果为: HttpServer
kebabcase将驼峰写法转换成烤串写法。kebabcase "FirstName" 。结果为: first-name.
swapcase

基于单词的算法切换字符串的大小写。

转换算法:

  • 大写字符变成小写字母
  • 首字母变成小写字母
  • 空格后或开头的小写字母转换成大写字母
  • 其他小写字母转换成大写字母
  • 通过unicode.IsSpace(char)定义空格

swapcase "This Is A.Test"  结果为: tHIS iS a.tEST.

shuffle对字符串进行洗牌。 shuffle "hello" 。  hello的随机字符串可能会是oelhl

2.5 类型转换函数

函数说明
atoi字符串转换成整型
float64转换成 float64
int按系统整型宽度转换成int
int64转换成int64
toDecimal将unix八进制转换成int64
toString转换成字符串
toStrings将列表、切片或数组转换成字符串列表
toJson将列表、切片、数组、字典或对象转换成JSON
toPrettyJson(mustToPrettyJson)  将列表、切片、数组、字典或对象转换成格式化JSON
toRawJson(mustRoRawJson)将列表、切片、数组、字典或对象转换成HTML字符未转义的JSON
fromYaml将字符串转化成对象
fromJson将JSON字符串转化成对象
toYaml将列表,切片,数组,字典或西乡转换成已经缩进的yaml
[root@master ~]# vim mychart/yaml/person.yaml
name: Bob
age: 25
hobbies:
  - hiking
  - fishing
  - cooking
[root@master ~]# vim mychart/yaml/person.json
{
  "name": "Bob",
  "age": 25,
  "hobbies": [
    "hiking",
    "fishing",
    "cooking"
  ]
}
[root@master ~]# vim mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
   toStrings: {{ list 1 2 3 |toStrings }}
   toDecimal: {{ "0777" | toDecimal }}
   {{- $person := .Files.Get "yaml/person.yaml" | fromYaml}}
   greeting: |
      Hi, my name is {{ $person.name }} and I am {{ $person.age }} years old.
      My hobbies are {{ range $person.hobbies }}{{ . }} {{ end }}.
   {{- $person := .Files.Get "yaml/person.json" | fromJson }}
   greeting: |
      Hi, my name is {{ $person.name }} and I am {{ $person.age }} years old.
      My hobbies are {{ range $person.hobbies }}{{ . }} {{ end }}.

[root@master ~]# helm install --dry-run goodly-guppy ./mychart
NAME: goodly-guppy
LAST DEPLOYED: Thu Jul  4 14:43:23 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
   toStrings: [1 2 3]
   toDecimal: 511
   greeting: |
      Hi, my name is Bob and I am 25 years old.
      My hobbies are hiking fishing cooking .
   greeting: |  
      Hi, my name is Bob and I am 25 years old.
      My hobbies are hiking fishing cooking .





2.6 正则表达式函数

函数说明

regexMatch

mustRegexMatch

如果输入字符串包含可匹配正则表达式任意字符串,则返回true。

regexMatch "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$" "[email protected]"

regexMatch有问题时会出错, mustRegexMatch有问题时会向模板引擎返回错误。

regexFindAll

mustRegexFindAll

返回输入字符串匹配正则表达式的所有切片。最后一个参数表示要返回的子字符串的数量,-1表示返回所有。

regexFindAll "[2,4,6,8]" "123456789" -1

regexFindAll 有问题时会出错, mustRegexFindAll 有问题时会向模板引擎返回错误。

regexFind

mustRegexFind

返回输入字符串的第一个 (最左边的) 正则匹配。

regexFind "[a-zA-Z][1-9]" "abcd1234"

regexReplaceAll

mustRegexReplaceAll

返回输入字符串的拷贝,用替换字符串替换Regexp的匹配项。在替换字符串里面, $ 标志被解释为扩展,因此对于实例来说 $1 表示第一个子匹配的文本

regexReplaceAll "a(x*)b" "-ab-axxb-" "${1}W"

regexReplaceAllLiteral

mustRegexReplaceAllLiteral

返回输入字符串的拷贝,用替换字符串替换Regexp的匹配项。匹配字符串直接替换而不是扩展。

regexReplaceAllLiteral "a(x*)b" "-ab-axxb-" "${1}"

regexsplit

mustRegexSplit

将输入字符串切成有表达式分隔的子字符串,并返回表达式匹配项之间的切片。最后一个参数n确定要返回的子字符串数量,-1表示返回所有匹配

regexSplit "z+" "pizza" -1

[root@master ~]# vim mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  regexMatch:{{ regexMatch "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$" "[email protected]" }}
  regexFindAll: {{ regexFindAll "[2,4,6,8]" "123456789" -1 }}
  regexFind: {{ regexFind "[a-zA-Z][1-9]" "abcd1234" }}
  regexReplaceAll: {{ regexReplaceAll "a(x*)b" "-ab-axxb-" "${1}W" }}
  regexReplaceAllLiteral: {{ regexReplaceAllLiteral "a(x*)b" "-ab-axxb-" "${1}" }}
  regexSplit: {{ regexSplit "z+" "pizza" -1 }}

[root@master ~]# helm install --dry-run goodly-guppy ./mychart
NAME: goodly-guppy
LAST DEPLOYED: Thu Jul  4 15:11:21 2024
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: goodly-guppy-configmap
data:
  regexMatch: true
  regexFindAll: [2 4 6 8]
  regexFind: d1
  regexReplaceAll: -W-xxW-
  regexReplaceAllLiteral: -${1}-${1}-
  regexSplit: [pi a]

2.7 加密函数

函数说明
shalsum函数接收一个字符串,并计算它的SHA1摘要
sha256sum函数接收一个字符串,并计算它的SHA256摘要。
adler32sum函数接收一个字符串,并计算它的Adler-32校验和
htpasswd函数使用username 和 password 生成一个密码的bcrypt哈希值。该结果可用于 Apache HTTP Server 的基础认证。
derivePassword函数可用于基于某些共享的“主密码”约束得到特定密码
genPrivateKey

函数生成一个编码成PEM块的新私钥

第一个参数会采用以下某个值:

  • ecdsa: 生成椭圆曲线 DSA key (P256)
  • dsa: 生成 DSA key (L2048N256)
  • rsa: 生成 RSA 4096 key
buildCustomCert函数允许自定义证书

会采用以下字符串参数:

  • base64 编码PEM格式证书
  • base64 编码PEM格式私钥

返回包含以下属性的整数对象:

  • Cert:PEM编码证书
  • Key: PEM编码私钥

$ca := buildCustomCert "base64-encoded-ca-crt" "base64-encoded-ca-key"

genCA

函数生成一个新的,自签名的x509 证书机构。

采用以下参数:

  • 主体通用名 (cn)
  • 证书有效期(天)

会返回一个包含以下属性的对象:

  • Cert: PEM编码证书
  • Key: PEM编码私钥
genSelfSignedCert函数生成一个新的,自签名的x509 证书。

会采用下列参数:

  • 主体通用名 (cn)
  • 可选IP列表;可以为空
  • 可选备用DNS名称列表;可以为空
  • 证书有效期(天)

会返回一个包含以下属性的对象:

  • Cert: PEM编码证书
  • Key: PEM编码私钥
genSignedCert通过指定的CA签名生成一个新的, x509证书

会采用以下参数:

  • 主体通用名 (cn)
  • 可选IP列表;可以为空
  • 可选备用DNS名称列表;可以为空
  • 证书有效期(天)
  • CA (查看 genCA)
encryptAES函数使用AES-256 CBC 加密文本并返回一个base64编码字符串。
decryptAES函数接收一个AES-256 CBC编码的字符串并返回解密文本。

2.8 日期函数

函数说明
now当前日期/时间。和其他日期函数一起使用。
ago返回距time.Now的以秒为单位的间隔时间。
date

格式化日期

日期格式化为YEAR-MONTH-DAY:

now | date "2006-01-02"

dateInZone和 date 一样,但是和时区一起。
duration将给定的秒数格式化为time.Duration
durationRound

将给定时间舍入到最重要的单位。当time.Time计算为一个自某个时刻以来的时间,字符串和time.Duration被解析为一个时间段。

durationRound "2h10m5s"

这会返回2h

unixEpoch返回time.Time的unix时间戳

dateModify

mustDateModify

给定一个修改日期并返回时间戳。

toDate

mustToDate

toDate 将字符串转换成日期。第一个参数是日期格式,第二个参数是日期字符串。 如果字符串无法转换就会返回0值。

;