Muravyev Maxim
Muravyev Maxim

Reputation: 473

How can I apply template function to a range result in Helm?

My goal is to convert values in Values.yaml into the following:

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

The below template almost does this but I'm getting comma at the end: 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 }}

Is there a way to apply template function (e.g. trunc to remove last symbol) to a range result in my case?

Upvotes: 0

Views: 3934

Answers (2)

David Maze
David Maze

Reputation: 158967

If you write the range call into a helper template, Helm has an include extension function that calls a template and captures its output as a string.

{{/* 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 }}

(It is probably cleaner to not generate the comma at all, as @HarshManvar's answer proposes.)

Upvotes: 1

Harsh Manvar
Harsh Manvar

Reputation: 30090

try something like

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

If actually look for the index and if it's zero it's wont to add the , at last. here is if is not behave like normal it checks the index also.

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

above loop will give output like : prefix_one, prefix_two, prefix_three

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

Read more at : https://groups.google.com/g/golang-nuts/c/XBScetK-guk/m/Bh7ZFz6R3wQJ

Upvotes: 1

Related Questions