我想将values.yaml中的结构的一部分转换为配置映射中的属性文件。
是否可以转换yaml结构,如:
field1: value1
field2:
field21: value21
field22: value22
进入
field1=value1
field2.field21=value21
field2.field22=value22
具有Helm模板功能?
您需要将您的值放在单独的键下,并将某些Sprig Template Functions放在Configmap
中。
values.yaml
fields:
field1: value1
field2:
field21: value21
field22: value22
configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: Configmap
data:
{{ range $key, $value := .Values.fields }}
{{- if kindIs "map" $value -}}
{{ $top:=$key }}
{{- range $key, $value := $value }}
{{ $top }}.{{ $key }}={{ $value }}
{{- end -}}
{{- else -}}
{{ $key | indent 2}}={{ $value }}
{{- end -}}
{{- end -}}
helm template。 -x模板/configmap.yaml
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: Configmap
data:
field1=value1
field2.field21=value21
field2.field22=value22
我建议将此逻辑提取到_ helpers.tpl文件中。如果您有更多的嵌套配置,则需要添加更多的逻辑。
作为编程问题,这是一个直接的递归调用。您可以使用Go text/template
模板之类的函数。这里的一个技巧是它们仅采用一个参数,因此您需要使用sprig list
函数将多个值打包到该参数中,然后使用text/template
text/template
函数将值取回。 >
index
这将与任意深的嵌套值一起使用。
如果您引用标准Helm变量({{- define "envify" -}}
{{- $prefix := index . 0 -}}
{{- $value := index . 1 -}}
{{- if kindIs "map" $value -}}
{{- range $k, $v := $value -}}
{{- template "envify" (list (printf "%s.%s" $prefix $k) $v) -}}
{{- end -}}
{{- else -}}
{{ $prefix }}={{ $value }}
{{ end -}}
data:
{{ template "envify" (list "" .Values.fields) | indent 2 }}
,.Release
,...),这也会变得很棘手,因为.Values
变量可用于单个模板参数(在.
循环中也可重复使用) )。我倾向于显式地将其作为附加模板参数传递。
range