首页 > 其他 > 详细

HELM语法

时间:2021-05-02 21:47:06      阅读:31      评论:0      收藏:0      [点我收藏+]

模板函数

 

{{ quote .values.drink }}  == {{ .values.drink | quote }}

quote字符加双引号

upper大写

repeat [number]重复几次

default 变量不存在用默认值替换

title 首字母大写

 

 

控制结构:

 

if/else 创建条件块,结束用end

{{- if values.drink "ccc" }}

-代表删除空格,前面的删除前面的空格

{{- end }}

 

with 指定一个范围

 

[root@master test]# cat Values.yaml 
data:
  drink: tea
  food: apple


[root@master templates]# cat configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  {{- with .Values.data  }}
  drink: {{ .drink | quote }}
  test: {{ .tea | default "tea" | quote }}
  food: {{ .food | repeat 5 | upper | quote }}
  {{- if eq .drink "tea" }}
  green: true
  {{- end -}}
  {{- end -}}

上面例子就相当于给定了一个范围在这个范围内使用范围内的值,可以省略一些前缀。类似于绝对路径与相对路径查看文件。

都一点需要注意如果用with圈定了范围,其他再从顶级调用值就会失败。例如在wiht中调用Release.Name。如果还是想在with

调用范围外的,可以在范围之外把想用的顶级内置函数定义为变量{{- $name := .Release.Name }},在后面引用变量即可。

如下:

 

 

[root@master templates]# cat configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  {{- $name := .Release.Name }}
  {{- with .Values.data  }}
  drink: {{ .drink | quote }}
  test: {{ .tea | default "tea" | quote }}
  release: {{ $name }}
  {{- if eq .drink "tea" }}
  green: true
  {{- end }}
  {{- end }}
  pizza: |-
    {{- range .Values.pizza }}
    - {{ . |  quote }}
    {{- end }}

 

 

 

 

 

 

range 提供了一个像for样式的循环(这个有go语言循环的那种特性range key,value := .Values支持匿名函数)

 

[root@master templates]# cat ../Values.yaml 
data:
  drink: tea
  food: apple
pizza:
  - cheese
  - peppers
  - apple


[root@master templates]# cat configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  {{- with .Values.data  }}
  drink: {{ .drink | quote }}
  test: {{ .tea | default "tea" | quote }}
  {{- if eq .drink "tea" }}
  green: true
  {{- end }}
  {{- end }}
  pizza: |-
#range前面如果有end记得结尾部分不能有去空格字符会报错,具体原因应该是格式导致的
{{
- range .Values.pizza }} - {{ . | title| quote }}
#点意味着当前范围的
{{
- end }}

 

 

 

 

声明:

 

define 在模板中宣告一个新的命名模板

 

 

[root@master templates]# cat configmap.yaml 
{{- define "test.labels"  }}
  labels:
    app: test
    date: {{ now | htmlDate }}
{{- end }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
  {{- template "test.labels" }}
data:
  hello: world

 

可以定义在_helpers.tpl里面,同时也可以注释方法是{{/*。。。。*/}}

 

 

 

 

 

template 导入一个命名模板

 

有一个细节,在导入模板被呈现的时候,它会接收到模板调用传入范围。如果定义的东西有不在范围内的,那么就会报错或者不显示

例如:{{- template "test.labels" }}

这个很好解决如果没有范围,那么我们就给他一个范围

例如:{{- template "test.labels" . }} 点代表当前

 

下面是代码示例:

 

 

 

[root@master templates]# cat configmap.yaml 
{{- define "test.labels"  }}
  labels:
    app: test
    date: {{ now | htmlDate }}
    chart: {{ .Chart.Name }}
    food: {{ .Values.data.food }}
{{- end }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
  {{- template "test.labels" }}
data:
  hello: world


执行后报错如下:
[root@master templates]# helm install test  /root/test/ --debug --dry-run -f /root/test/Values.yaml 
install.go:173: [debug] Original chart version: ""
install.go:190: [debug] CHART PATH: /root/test

Error: unable to build kubernetes objects from release manifest: error validating "": error validating data: [unknown object type "nil" in ConfigMap.metadata.labels.chart, unknown object type "nil" in ConfigMap.metadata.labels.food]
helm.go:81: [debug] error validating "": error validating data: [unknown object type "nil" in ConfigMap.metadata.labels.chart, unknown object type "nil" in ConfigMap.metadata.labels.food]

 

 

解决办法:

 

 

[root@master templates]# cat configmap.yaml 
{{- define "test.labels"  }}
  labels:
    app: test
    date: {{ now | htmlDate }}
    chart: {{ .Chart.Name }}
    food: {{ .Values.data.food }}
{{- end }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
  {{- template "test.labels" . }}
data:
  hello: world


执行结果正常:
# Source: test/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: test-configmap
  labels:
    app: test
    date: 2021-05-02
    chart: test
    food: apple
data:
  hello: world

 

还有一点,因为模板是一个动作不是函数。所以没有办法将调用的输出传递给其他函数,数据只会被简单的插入,那么在Kubernetes中有可能因为格式导致部署失败。

 

解决办法:

{{ include “test.labels” . | indent 2 }}

indent缩进得意思,可以理解为空格

 

block 声明一种特殊的可填充模板区域

 

 

判断为false:

bool false

0

空值

空串

空集合(map,slice,tuple,dict,array)

 

HELM语法

原文:https://www.cnblogs.com/determined-K/p/14725891.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!