【问题标题】:How can I apply template function to a range result in Helm?如何将模板函数应用于 Helm 中的范围结果?
【发布时间】:2021-08-13 11:29:43
【问题描述】:

我的目标是将 Values.yaml 中的值转换为以下内容:

CUSTOM_VARIABLE: "TEST_ENV_1=devil,TEST_ENV_2=god,TEST_ENV_3=angel"
### Values.yaml
env:
  TEST_ENV_1: devil
  TEST_ENV_2: god
  TEST_ENV_3: angel

下面的模板几乎可以做到这一点,但最后我得到了逗号:TEST_ENV_1=devil,TEST_ENV_2=god,TEST_ENV_3=angel,

### _envVars.tpl
{{ define "envVars" }}

...

- name: CUSTOM_VARIABLE
  value: "
  {{- range $key, $value := .Values.env -}}
  {{- printf "%s=%s," $key $value -}}
  {{- end -}}
  " 

...

{{- end }}

在我的情况下,有没有办法将模板函数(例如 trunc 删除最后一个符号)应用于范围结果?

【问题讨论】:

    标签: kubernetes kubernetes-helm go-templates


    【解决方案1】:

    试试类似的东西

    {{range $i, $e := $}}
    {{if $i}},{{end}}
    {{$e}}{{end}}
    

    如果实际查找索引并且如果它为零,则不会最后添加,。如果不是正常行为,它也会检查 index

    {{- range $i, $e := . -}}
                {{if $i}}, {{end}}prefix_{{$e}}
            {{- end}}
    

    上面的循环会给出如下输出:prefix_one, prefix_two, prefix_three

    https://play.golang.org/p/KuRh55BHna8

    阅读更多:https://groups.google.com/g/golang-nuts/c/XBScetK-guk/m/Bh7ZFz6R3wQJ

    【讨论】:

    • (如果您在地图上运行range,这种方法是否有效?)
    • 你的意思是地图上的范围没有 for 就不能一起工作吗?抱歉,如果错过了什么或者我在任何地方都错了,我对 GO 不太擅长(地图范围):play.golang.org/p/uPfTONA6TOW
    • range 工作正常;但是如果您在切片上使用range,则索引是一个从零开始的数字,并且很容易测试它是否是第一个(并跳过逗号),但是在地图上使用range,索引是映射键,很难分辨。
    • 不过,您可以遍历地图的键; {{ range $i, $k := keys $ }}{{ $k }}={{ index $ $k }}{{ end }}。然后你有一个从零开始的索引$i,映射键$k,以及对应的值index $ $k。 (请记住,range 会重置 . 特殊变量。)
    【解决方案2】:

    如果您将 range 调用写入帮助程序模板,Helm 有一个 include extension function 调用模板并将其输出捕获为字符串。

    {{/* Render the map-type template parameter to a key=value,key=value,
         list, ending with a trailing comma. */}}
    {{- define "custom.variable.format" -}}
    {{- range $key, $value := . -}}
    {{ $key }}={{ $value }},
    {{- end -}}
    {{- end -}}
    
    - name: CUSTOM_VARIABLE
      value: {{ include "custom.variable.format" .Values.env | trimSuffix "," | quote }}
    

    (正如@HarshManvar's answer 建议的那样,根本不生成逗号可能更简洁。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-20
      • 2015-08-01
      • 2021-05-15
      • 1970-01-01
      • 2016-06-26
      相关资源
      最近更新 更多