
[英]Is it possible to include a templated blob text into values.yaml?
[英]Helm Templating in Configmap for values.yaml
我正在寻求帮助来创建可以支持多种服务的通用 configmap.yaml。
values.yaml (这工作)
value1: val1
genericConfigMapProperties:
application.properties: |-
prop1=prop1value
prop2=prop2value
configmap.yaml
apiVersion: 1
kind: ConfigMap
...
...
data:
{{ (toYaml .Values.genericConfigMapProperties) . | ident 4 }}
模板{{ (toYaml.Values.genericConfigMapProperties). | ident 4 }}
{{ (toYaml.Values.genericConfigMapProperties). | ident 4 }}
{{ (toYaml.Values.genericConfigMapProperties). | ident 4 }}
几乎是完美的。 它正确呈现application.properties
:
data:
application.properties: |-
prop1=prop1value
prop2=prop2value
values.yaml(这不起作用)
value1: val1
genericConfigMapProperties:
cmValue1: {{ .Values.value1 | default "default val1" | quote }}
application.properties: |-
prop1=prop1value
prop2=prop2value
呈现cmValue1
出现错误。 我期待这个答案:
data:
cmValue1: val1
application.properties: |-
prop1=prop1value
prop2=prop2value
错误:
Error: failed to parse values.yaml: error converting YAML to JSON: yaml: invalid map key: map[interface {}]interface {}{".Values.value1 | default \"default val1\" | quote":interface {}(nill)}
helm.go:88: [debug] error converting YAML to JSON: yaml: invalid map key: map[interface {}]interface {}{".Values.value1 | default \"default val1\" | quote":interface {}(nill)}
failed to parse values.yaml
我需要哪些额外的 helm 模板代码来支持cmValue1
渲染?
谢谢你。
Helm 不支持二次渲染,但是你可以使用yaml 锚来实现这个 function,或者间接使用命名模板。
值。yaml
value1: &value1 val1
genericConfigMapProperties:
cmValue1: *value1
application.properties: |-
prop1=prop1value
prop2=prop2value
模板/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: test
data:
config.yaml: |
{{- toYaml $.Values.genericConfigMapProperties | nindent 4 }}
output
apiVersion: v1
kind: ConfigMap
metadata:
name: test
data:
config.yaml: |
application.properties: |-
prop1=prop1value
prop2=prop2value
cmValue1: val1
值。yaml
value1: val1
模板/_helpers.tpl
{{/*
cmValue template
*/}}
{{- define "genericConfigMapProperties" -}}
cmValue1: {{ .Values.value1 | default "default val1" | quote }}
application.properties: |-
prop1=prop1value
prop2=prop2value
{{- end -}}
模板/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: test
data:
config.yaml: |
{{- include "genericConfigMapProperties" . | nindent 4 }}
output
apiVersion: v1
kind: ConfigMap
metadata:
name: test
data:
config.yaml: |
cmValue1: "val1"
application.properties: |-
prop1=prop1value
prop2=prop2value
感谢您的回复。
我从 bitnami 通用模板中找到了这个很棒的解决方案。 它几乎可以在任何地方使用。
https://github.com/bitnami/charts/blob/master/bitnami/common/templates/_tplvalues.tpl
复制此模板文件:
{{/* vim: set filetype=mustache: */}}
{{/*
Renders a value that contains template.
Usage:
{{ include "common.tplvalues.render" ( dict "value" .Values.path.to.the.Value "context" $) }}
*/}}
{{- define "common.tplvalues.render" -}}
{{- if typeIs "string" .value }}
{{- tpl .value .context }}
{{- else }}
{{- tpl (.value | toYaml) .context }}
{{- end }}
{{- end -}}
使用它来模板化 configmap.yaml 或 deployment.yaml 或其他任何地方的任何值...
值。yaml:
configMapProperties:
cmValue1: "val1"
application.properties: |-
prop1=prop1value
prop2=prop2value
configmap.yaml
data:
{{- if .Values.configMapProperties }}
{{- include "common.tplvalues.render" ( dict "value" .Values.configMapProperties "context" $ ) | nindent 2 }}
{{- end }}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.