0

我在_helpers.tpl下面有标签作为多行字符串。我如何将其转换为逗号分隔的列表。

_helpers.tpl:-

{{- define "mongo.selectorLabels" -}}
app: {{ include "mongo.name" . }}
release: {{ .Release.Name }}
{{- end }}

期待:

teplates/yaml:-

          env:
            - name: MONGO_SIDECAR_POD_LABELS
              value: "{{- include "mongo.sidecar.pod.labels" . }}"

value: "app=mongo,release=dev"

我正在尝试的伪代码。

_helpers.tpl:-

{{- define "mongo.sidecar.pod.labels" -}}
{{- $list := list -}}
{{- range $k, $v := ( include "mongo.selectorLabels" ) -}}
{{- $list = append $list (printf "%s=\"%s\"" $k $v) -}}
{{- end -}}
{{ join ", " $list }}
{{- end -}}

4

2 回答 2

2

Helminclude扩展函数 总是返回一个字符串;所以你不能用range它来迭代它,就像你展示的那样。但是,Helm 还包含一个未记录的fromYaml扩展函数,可以将 YAML 格式的字符串转换回对象形式。因此,如果您include使用辅助模板,然后调用fromYaml来解析字符串结果,您可以range覆盖结果:

{{- range $k, $v := include "mongo.selectorLabels" . | fromYaml -}}
于 2021-10-01T12:17:56.540 回答
0

我能够将值转换为=单独的键值对。我们如何才能将这些加入,并合并为单行。

{{- define "mongo.sidecar.pod.labels" -}}
{{ $lines := splitList "\n" ( include "mongo.selectorLabels" .| nindent 1) -}}
{{- range $lines }}
{{- if not (. | trim | empty) -}}
{{- $kv := . | splitn ":" 2 -}}
{{ printf "%s=%s" $kv._0 ($kv._1 | trim) }}
{{ end -}}
{{- end -}}
{{- end -}}

使用上述代码输出:-

         env:
            - name: MONGO_SIDECAR_POD_LABELS
              value: " app=mongo
 release=v1
" 
于 2021-10-01T13:25:59.783 回答