我正在寻找帮助来创建一个通用的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 }}
几乎是完美的。它正确地呈现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
我需要哪些额外的舵机模板代码来支持cmValue1
呈现?
谢谢。
发布于 2022-07-01 02:22:21
Helm不支持二次呈现,但您可以使用yaml锚来实现此功能,也可以间接地使用命名模板。
计划A:锚
values.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 }}
输出
apiVersion: v1
kind: ConfigMap
metadata:
name: test
data:
config.yaml: |
application.properties: |-
prop1=prop1value
prop2=prop2value
cmValue1: val1
B计划:命名模板
values.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 }}
输出
apiVersion: v1
kind: ConfigMap
metadata:
name: test
data:
config.yaml: |
cmValue1: "val1"
application.properties: |-
prop1=prop1value
prop2=prop2value
发布于 2022-08-02 17:06:19
谢谢你的回应。
我从bitnami公共模板中找到了这个很棒的解决方案。它几乎可以在任何地方工作。
复制此模板文件:
{{/* 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或其他任何地方的任何值..。
values.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 }}
https://stackoverflow.com/questions/72816925
复制相似问题