我们已经知道了如何将信息传到模板中。 但是传入的信息并不能被修改。有时我们希望以一种更有用的方式来转换所提供的数据。
一、函数初体验
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:函数会返回给定参数特定的次数,重复次数
用两个参数的函数来阐述: repeat COUNT STRING
[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
| parameter | type |
|---|---|
| apiVersion | string |
| kind | string |
| namespace | string |
| name | string |
name 和 namespace 都是选填的,且可以传空字符串("")作为空。
| 命令 | lookup函数 |
|---|---|
| kubectl get pod mypod -n mynamespace | lookup "v1" "Pod" "mynamespace" "mypod" |
| kubectl get pods -n mynamespace | lookup "v1" "Pod" "mynamespace" "" |
| kubectl get pods --all-namespaces | lookup "v1" "Pod" "" "" |
| kubectl get namespace mynamespace | lookup "v1" "Namespace" "" "mynamespace" |
| kubectl get namespaces | lookup "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 运算符
对于模板来说,运算符(eq, ne, lt, gt, and, or等等) 都是作为函数来实现的。
| 函数 | 说明 |
|---|---|
| eq | 等于,两个参数如果相等返回true,否则返回false eq .Arg1 .Arg2 |
| ne | 不相等,两个参数如果不相等返回true,相等返回false ne .Arg1 .Arg2 |
| lt | 小于,第一个参数如果小于第二个参数返回true,否则返回false lt .Arg1 .Arg2 |
| le | 小于等于,第一个参数小于等于第二个参数返回true,否则返回false le .Arg1 .Arg2 |
| gt | 大于,第一个参数大于第二个参数返回true,否则返回false gt .Arg1 .Arg2 |

最低0.47元/天 解锁文章
454

被折叠的 条评论
为什么被折叠?



