将Yaml转换为头盔模板中的属性文件

问题描述 投票:1回答:2

我想将values.yaml中的结构的一部分转换为配置映射中的属性文件。

是否可以转换yaml结构,如:

field1: value1
field2:
   field21: value21
   field22: value22

进入

field1=value1
field2.field21=value21
field2.field22=value22

具有Helm模板功能?

kubernetes-helm sprig-template-functions
2个回答
3
投票

您需要将您的值放在单独的键下,并将某些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文件中。如果您有更多的嵌套配置,则需要添加更多的逻辑。


0
投票

作为编程问题,这是一个直接的递归调用。您可以使用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
© www.soinside.com 2019 - 2024. All rights reserved.