【问题标题】:Helm Convert chart labels multiline string to comma-separated stringHelm 将图表标签多行字符串转换为逗号分隔的字符串
【发布时间】:2021-11-23 01:38:09
【问题描述】:

我在_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 -}}

【问题讨论】:

    标签: kubernetes kubernetes-helm go-templates helm3


    【解决方案1】:

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

    {{- range $k, $v := include "mongo.selectorLabels" . | fromYaml -}}
    

    【讨论】:

    • 上述解决方案出现wrong number of args for include: want 2 got 1错误。
    • 我错过了.,我会编辑它。
    • 太棒了,像魅力一样工作。非常感谢@David。
    【解决方案2】:

    我能够将值转换为= 分隔的键值对。我们如何将这些与, 合并为单行。

    {{- 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
    " 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-18
      • 2012-02-01
      • 2013-02-04
      • 1970-01-01
      • 2020-11-27
      • 2018-08-16
      • 2013-09-30
      • 1970-01-01
      相关资源
      最近更新 更多