您现在的位置是:首页 > 数码 > 

Kubernetes筆記(二十九)

2025-07-19 23:25:52
Kubernetes筆記(二十九) Helm 模板之模板函数与管道 上节课我们学习了如何将信息渲染到模板之中,但是这些信息都是直接传入模板引擎中进行渲染的,有的时候我们想要转换一下这些数据才进行渲染,这就需要使用到 Go 模板语言中的一些其他用法。 模板函数 比如我们需要从.Values中读取的值变成字符串的时候就可以通过调用quote模板函数来实

Kubernetes筆記(二十九)

Helm 模板之模板函数与管道

上节课我们学习了如何将信息渲染到模板之中,但是这些信息都是直接传入模板引擎中进行渲染的,有的时候我们想要转换一下这些数据才进行渲染,这就需要使用到 Go 模板语言中的一些其他用法。

模板函数

比如我们需要从.Values中读取的值变成字符串的时候就可以通过调用quote模板函数来实现:(templates/configmap.yaml)

apiVersion: v1
kind: ConfigMap
metadata:name: {{ .Release.ame }}-configmap
data:myvalue: Hello Worldk8s: {{ quote .k8s }}python: {{ .python }}

模板函数遵循调用的语法为:functioname arg1 arg2…。在上面的模板文件中,quote .k8s调用quote函数并将后面的值作为一个参数传递给它。最终被渲染为:

$ helm install --dry-run --debug .
[debug] Created tunnel using local port: 	9405	
......
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: masked-saola-configmap
data:myvalue: Hello Worldk8s: devopspython: django

我们可以看到.k8s被渲染成了字符串devops。上节课我们也提到过 Helm 是一种 Go 模板语言,拥有超过60多种可用的内置函数,一部分是由Go 模板语言本身定义的,其他大部分都是Sprig模板库提供的一部分,我们可以前往这两个文档中查看这些函数的用法。

比如我们这里使用的quote函数就是Sprig 模板库提供的一种字符串函数,用途就是用双引号将字符串括起来,如果需要双引号,则需要添加\来进行转义,而quote函数的用途则是用双引号将字符串括起来,而不会对内容进行转义。

所以在我们遇到一些需求的时候,首先要想到的是去查看下上面的两个模板文档中是否提供了对应的模板函数,这些模板函数可以很好的解决我们的需求。

管道

模板语言除了提供了丰富的内置函数之外,其另一个强大的功能就是管道的概念。和UIX中一样,管道我们通常称为Pipeline,是一个链在一起的一系列模板命令的工具,以紧凑地表达一系列转换。简单来说,管道是可以按顺序完成一系列事情的一种方法。比如我们用管道来重写上面的 ConfigMap 模板:(templates/configmap.yaml)

apiVersion: v1
kind: ConfigMap
metadata:name: {{ .Release.ame }}-configmap
data:myvalue: Hello Worldk8s: {{ .k8s | quote }}python: {{ .python }}

这里我们直接调用quote函数,而是调换了一个顺序,使用一个管道符|将前面的参数发送给后面的模板函数:{{ .k8s | quote }},使用管道我们可以将几个功能顺序的连接在一起,比如我们希望上面的 ConfigMap 模板中的 k8s 的 value 值被渲染后是大写的字符串,则我们就可以使用管道来修改:(templates/configmap.yaml)

apiVersion: v1
kind: ConfigMap
metadata:name: {{ .Release.ame }}-configmap
data:myvalue: Hello Worldk8s: {{ .k8s | upper | quote }}python: {{ .python }}

这里我们在管道中增加了一个upper函数,该函数同样是Sprig 模板库提供的,表示将字符串每一个字母都变成大写。然后我们用debug模式来查看下上面的模板最终会被渲染成什么样子:

$ helm install --dry-run --debug .
[debug] Created tunnel using local port: 	46651	
......
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: maudlin-labradoodle-configmap
data:myvalue: Hello Worldk8s: DEVOPSpython: django

我们可以看到之前我们的devops已经被渲染成了DEVOPS了,要注意的是使用管道操作的时候,前面的操作结果会作为参数传递给后面的模板函数,比如我们这里希望将上面模板中的 python 的值渲染为重复出现次的字符串,则我们就可以使用到Sprig 模板库提供的repeat函数,不过该函数需要传入一个参数repeat COUT STRIG表示重复的次数:(templates/configmap.yaml)

apiVersion: v1
kind: ConfigMap
metadata:name: {{ .Release.ame }}-configmap
data:myvalue: Hello Worldk8s: {{ .k8s | upper | quote }}python: {{ .python | quote | repeat  }}该repeat函数会将给定的字符串重复次返回,所以我们将得到这个输出:helm install --dry-run --debug .
[debug] Created tunnel using local port: 	9712	......Error: YAML parse error on mychart/templates/configmap.yaml: error converting YAML to JSO: yaml: line 7: did not find expected key---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: piquant-butterfly-configmap
data:myvalue: Hello Worldk8s: DEVOPSpython: djangodjangodjango

我们可以看到上面的输出中 python 对应的值变成了个相同的字符串,这显然是不符合我们预期的,我们的预期是形成一个字符串,而现在是个字符串了,而且上面还有错误信息,根据管道处理的顺序,我们将quote函数放到repeat函数后面去是不是就可以解决这个问题了:(templates/configmap.yaml)

apiVersion: v1
kind: ConfigMap
metadata:name: {{ .Release.ame }}-configmap
data:myvalue: Hello Worldk8s: {{ .k8s | upper | quote }}python: {{ .python | repeat  | quote }}

现在是不是就是先重复次.python的值,然后调用quote函数:

helm install --dry-run --debug .
[debug] Created tunnel using local port: 	87	......---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: braided-manatee-configmap
data:myvalue: Hello Worldk8s: DEVOPSpython: djangodjangodjango

现在是不是就正常了,也得到了我们的预期结果,所以我们在使用管道操作的时候一定要注意是按照从前到后一步一步顺序处理的。

default 函数

另外一个我们会经常使用的一个函数是default 函数:default DEFAULT_VALUE GIVE_VALUE。该函数允许我们在模板内部指定默认值,以防止该值被忽略掉了。比如我们来修改上面的 ConfigMap 的模板:(templates/configmap.yaml)

apiVersion: v1
kind: ConfigMap
metadata:name: {{ .Release.ame }}-configmap
data:myvalue: {{ .Values.hello | default  Hello World | quote }}k8s: {{ .k8s | upper | quote }}python: {{ .python | repeat 5 | quote }}

由于我们的values.yaml文件中只定义了 course 结构的信息,并没有定义 hello 的值,所以如果没有设置默认值的话是得不到{{ .Values.hello }}的值的,这里我们为该值定义了一个默认值:Hello World,所以现在如果在values.yaml文件中没有定义这个值,则我们也可以得到默认值:

$ helm install --dry-run --debug .
[debug] Created tunnel using local port: 	42670	......---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: orbiting-hog-configmap
data:myvalue: Hello Worldk8s: DEVOPSpython: djangodjangodjangodjangodjango

我们可以看到myvalue值被渲染成了Hello World,证明我们的默认值生效了。

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/shuma/808451.html

相关标签:无
上传时间: 2024-01-20 05:51:15
留言与评论(共有 20 条评论)
本站网友 中国名媛
17分钟前 发表
Hello Worldk8s
本站网友 凯南
2分钟前 发表
然后我们用debug模式来查看下上面的模板最终会被渲染成什么样子: $ helm install --dry-run --debug . [debug] Created tunnel using local port
本站网友 猥琐叫兽
10分钟前 发表
{{ .k8s | quote }}python
本站网友 中国富豪排行
10分钟前 发表
{{ .k8s | upper | quote }}python
本站网友 东营大海鑫庄国际
27分钟前 发表
ConfigMap metadata
本站网友 蚕沙枕
19分钟前 发表
{{ .k8s | upper | quote }}python
本站网友 二手别墅出售
5分钟前 发表
{{ .k8s | upper | quote }}python
本站网友 南昌麻丘
19分钟前 发表
mychart/templates/configmap.yaml apiVersion
本站网友 尿道疾病
13分钟前 发表
{{ .python | quote | repeat }}该repeat函数会将给定的字符串重复次返回,所以我们将得到这个输出:helm install --dry-run --debug . [debug] Created tunnel using local port
本站网友 陈颂雄
13分钟前 发表
v1 kind
本站网友 北京武警总医院
5分钟前 发表
myvalue
本站网友 尤鹏
9分钟前 发表
最终被渲染为: $ helm install --dry-run --debug . [debug] Created tunnel using local port
本站网友 梦见自己迷路
9分钟前 发表
和UIX中一样,管道我们通常称为Pipeline,是一个链在一起的一系列模板命令的工具,以紧凑地表达一系列转换
本站网友 南诏银
6分钟前 发表
Hello Worldk8s
本站网友 五味子茶
26分钟前 发表
v1 kind
本站网友 最新个人所得税计算器
14分钟前 发表
v1 kind
本站网友 薄荷叶泡茶
0秒前 发表
Hello Worldk8s
本站网友 me博客
12分钟前 发表
djangodjangodjango 现在是不是就正常了,也得到了我们的预期结果,所以我们在使用管道操作的时候一定要注意是按照从前到后一步一步顺序处理的
本站网友 邹一平
0秒前 发表
name