在 helm 模板中将 yaml 转换为 属性 文件
Convert yaml to property file in helm template
我想将 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 -}}
头盔模板。 -x templates/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
function to pack multiple values into that parameter, and the text/template
index
函数来取回值。
{{- 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 }}
这将适用于任意深度的嵌套值。
如果您引用标准的 Helm 变量(.Release
、.Values
、...),这也会变得棘手,因为 .
变量被重复用于单个模板参数(它也会在 range
循环中重用)。我倾向于明确地将其作为附加模板参数传递。
{{- $top := index . 2 -}}
# from the {{ $top.Chart.Name }} Helm chart
{{/* in your ConfigMap proper */}}
{{ template "envify" (list "" .Values.fields .) }}
对同一模板的递归调用很简单。
以下代码段正在运行。它应该将 values.yaml 转换为 configmap 数据为 属性.
{{- define "envify" -}}
{{- $prefix := index . 0 -}}
{{- $value := index . 1 -}}
{{- if kindIs "map" $value -}}
{{- range $k, $v := $value -}}
{{- if $prefix -}}
{{- template "envify" (list (printf "%s.%s" $prefix $k) $v) -}}
{{- else -}}
{{- template "envify" (list (printf "%s" $k) $v) -}}
{{- end -}}
{{- end -}}
{{- else -}}
{{ $prefix | indent 2 }}={{ $value }}
{{ end -}}
{{- end -}}
我想将 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 -}}
头盔模板。 -x templates/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
function to pack multiple values into that parameter, and the text/template
index
函数来取回值。
{{- 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 }}
这将适用于任意深度的嵌套值。
如果您引用标准的 Helm 变量(.Release
、.Values
、...),这也会变得棘手,因为 .
变量被重复用于单个模板参数(它也会在 range
循环中重用)。我倾向于明确地将其作为附加模板参数传递。
{{- $top := index . 2 -}}
# from the {{ $top.Chart.Name }} Helm chart
{{/* in your ConfigMap proper */}}
{{ template "envify" (list "" .Values.fields .) }}
对同一模板的递归调用很简单。 以下代码段正在运行。它应该将 values.yaml 转换为 configmap 数据为 属性.
{{- define "envify" -}}
{{- $prefix := index . 0 -}}
{{- $value := index . 1 -}}
{{- if kindIs "map" $value -}}
{{- range $k, $v := $value -}}
{{- if $prefix -}}
{{- template "envify" (list (printf "%s.%s" $prefix $k) $v) -}}
{{- else -}}
{{- template "envify" (list (printf "%s" $k) $v) -}}
{{- end -}}
{{- end -}}
{{- else -}}
{{ $prefix | indent 2 }}={{ $value }}
{{ end -}}
{{- end -}}