Reputation: 1309
I would like to range through values specified under a variable containing dashes within Golang template:
data:
init: |
{{- range .Values.something.something-else.values.list }}
{{ . | indent 4 }}{{ end }}
I've seen that to access values from a variable with dashes in the name index
function should be used.
I'm not understanding though how to combine the two functions.
Upvotes: 3
Views: 2627
Reputation: 417612
The index
function is documented at text/template
: Functions section:
index
Returns the result of indexing its first argument by the
following arguments. Thus "index x 1 2 3" is, in Go syntax,
x[1][2][3]. Each indexed item must be a map, slice, or array.
To use index
: pass the value you want to index, and the values to index by, e.g.
index . "Values" "something" "something-else" "values" "list"
Combined with the {{range}}
action:
Items:
{{range index . "Values" "something" "something-else" "values" "list"}}
{{.}},
{{end}}
See a simplified working example:
func main() {
t := template.Must(template.New("").Parse(src))
m := map[string]interface{}{
"something": map[string]interface{}{
"something-else": map[string]interface{}{
"list": []string{"one", "two", "three"},
},
},
}
if err := t.Execute(os.Stdout, m); err != nil {
panic(err)
}
}
const src = `data:
{{- range index . "something" "something-else" "list" }} {{.}},{{ end }}`
Output (try it on the Go Playground):
data: one, two, three,
Upvotes: 3