When I am importing a subtemplate outside of a {{ range }}
loop, variables are passed successfully inside the imported template:
...
{{ template "userdata" . }}
...
(here, I can access my outer templates variables in the inner template userdata
). So far so good.
However same fashion import doesn't work when being called inside a {{ range }}
loop:
...
{{ range $instance := .Instances }}
- type: instance
metadata:
userdata: {{ template "userdata" . }}
...
Above ends with error messaging out something like:
Error: template: template.tmpl:3:46: executing "userdata" at <XXX>: can't evaluate field XXX in type int`
As far as I understand, it shadow my context variable with the loop iterator variable, and so it does not work.
How am I supposed to do it properly?
How do I pass the value of .
outside of the range loop to template "userdata" when inside a range loop?
CodePudding user response:
Assign the value of .
to a variable. Use the variable in the loop:
...
{{$x := .}}
{{ range $instance := .Instances }}
- type: instance
metadata:
userdata: {{ template "userdata" $x }}
...
If .
is the root value in the template, then use $
to refer to that value:
...
{{ range $instance := .Instances }}
- type: instance
metadata:
userdata: {{ template "userdata" $ }}
...