Helm 模板未使用适当的缩进呈现
Helm template not being rendered with appropriate indentation
我正在尝试 helm-template this Secret
kind: Secret
apiVersion: v1
metadata:
name: my-roles-secret
stringData:
roles.yml: |-
click_admins:
run_as: [ 'clicks_watcher_1' ]
cluster: [ 'monitor' ]
indices:
- names: [ 'events-*' ]
privileges: [ 'read' ]
field_security:
grant: ['category', '@timestamp', 'message' ]
query: '{"match": {"category": "click"}}'
这是我的模板
{{ if .Values.customRoles }}
{{ if .Values.customRoles.enabled }}
kind: Secret
apiVersion: v1
metadata:
name: my-roles-secret
stringData:
roles.yml: |-
{{ .Values.customRoles.definition -}}
{{ end }}
{{ end }}
和相应的值
customRoles:
enabled: true
definition: |-
click_admins:
run_as: [ 'clicks_watcher_1' ]
cluster: [ 'monitor' ]
indices:
- names: [ 'events-*' ]
privileges: [ 'read' ]
field_security:
grant: ['category', '@timestamp', 'message' ]
query: '{"match": {"category": "click"}}'
为什么我得到以下输出?
helm template -f values.yaml
(...)
kind: Secret
apiVersion: v1
metadata:
name: my-roles-secret
stringData:
roles.yml: |-
click_admins:
run_as: [ 'clicks_watcher_1' ]
cluster: [ 'monitor' ]
indices:
- names: [ 'events-*' ]
privileges: [ 'read' ]
field_security:
grant: ['category', '@timestamp', 'message' ]
query: '{"match": {"category": "click"}}'
为什么 click_admins
的缩进如此严重?
如何使用 helm 模板生成第一个片段?
definition: |-
click_admins:
和
{{ .Values.customRoles.definition -}}
两者都有前导空格。所以空格被包含了两次。
将模板更改为:
stringData:
roles.yml: |-
{{ .Values.customRoles.definition | indent 4 }}
(所以不要缩进最后一行,但要在末尾包含 ... | indent 4
。)
当 Helm 的 YAML 解析器读取 values.yaml
文件时,它会将 customRoles.definition
值加载到字符串中。 YAML 的规则是从每一行中去除一致数量的前导空格,因此该值将是一个字符串,从第一个字符开始,其下方有缩进行:
# .Values.customRoles.definition -- note, the first line is not indented
click_admins:
run_as: [ 'clicks_watcher_1' ]
...
在您的原始模板中,第一行之前有几个空格,但其余行没有缩进。 Helm indent
函数在每行前插入一致数量的空格。这包括第一行,因此您需要删除模板文件中的额外缩进。
如果您熟悉其他语言,该字符串的值为
"click_admins:\n run_as: [...]\n cluster: ..."
在您的原始表单中,您在字符串的前面放置了四个空格,但不影响嵌入的换行符。 indent 4
在字符串的前面和每个换行符之后放置 4 个空格。
我正在尝试 helm-template this Secret
kind: Secret
apiVersion: v1
metadata:
name: my-roles-secret
stringData:
roles.yml: |-
click_admins:
run_as: [ 'clicks_watcher_1' ]
cluster: [ 'monitor' ]
indices:
- names: [ 'events-*' ]
privileges: [ 'read' ]
field_security:
grant: ['category', '@timestamp', 'message' ]
query: '{"match": {"category": "click"}}'
这是我的模板
{{ if .Values.customRoles }}
{{ if .Values.customRoles.enabled }}
kind: Secret
apiVersion: v1
metadata:
name: my-roles-secret
stringData:
roles.yml: |-
{{ .Values.customRoles.definition -}}
{{ end }}
{{ end }}
和相应的值
customRoles:
enabled: true
definition: |-
click_admins:
run_as: [ 'clicks_watcher_1' ]
cluster: [ 'monitor' ]
indices:
- names: [ 'events-*' ]
privileges: [ 'read' ]
field_security:
grant: ['category', '@timestamp', 'message' ]
query: '{"match": {"category": "click"}}'
为什么我得到以下输出?
helm template -f values.yaml
(...)
kind: Secret
apiVersion: v1
metadata:
name: my-roles-secret
stringData:
roles.yml: |-
click_admins:
run_as: [ 'clicks_watcher_1' ]
cluster: [ 'monitor' ]
indices:
- names: [ 'events-*' ]
privileges: [ 'read' ]
field_security:
grant: ['category', '@timestamp', 'message' ]
query: '{"match": {"category": "click"}}'
为什么 click_admins
的缩进如此严重?
如何使用 helm 模板生成第一个片段?
definition: |-
click_admins:
和
{{ .Values.customRoles.definition -}}
两者都有前导空格。所以空格被包含了两次。
将模板更改为:
stringData:
roles.yml: |-
{{ .Values.customRoles.definition | indent 4 }}
(所以不要缩进最后一行,但要在末尾包含 ... | indent 4
。)
当 Helm 的 YAML 解析器读取 values.yaml
文件时,它会将 customRoles.definition
值加载到字符串中。 YAML 的规则是从每一行中去除一致数量的前导空格,因此该值将是一个字符串,从第一个字符开始,其下方有缩进行:
# .Values.customRoles.definition -- note, the first line is not indented
click_admins:
run_as: [ 'clicks_watcher_1' ]
...
在您的原始模板中,第一行之前有几个空格,但其余行没有缩进。 Helm indent
函数在每行前插入一致数量的空格。这包括第一行,因此您需要删除模板文件中的额外缩进。
如果您熟悉其他语言,该字符串的值为
"click_admins:\n run_as: [...]\n cluster: ..."
在您的原始表单中,您在字符串的前面放置了四个空格,但不影响嵌入的换行符。 indent 4
在字符串的前面和每个换行符之后放置 4 个空格。