Jason Lui
Jason Lui

Reputation: 21

how to get var value which with a var in name using jinja2

I am using ansible to template a jinja2 file.

IP:{{ ansible_eth0.ipv4.address }}
IP:{{ ansible_docker0.ipv4.address }}
IP:{{ ansible_{{ ka_interface }}.ipv4.address }}

there is a var named ka_interface for network adapter.

but you will get error in 3rd var
(IP:{{ ansible_{{ ka_interface }}.ipv4.address }} )

It seems that var in jinja2 template can be nested.

Upvotes: 1

Views: 1083

Answers (2)

Chris Lam
Chris Lam

Reputation: 3614

It's not possible to construct a dynamic variable with Jinja2 syntax.

However, you can access any play-bound variables via the builit-in vars hash object:

{{ vars['ansible_' + ka_interface]['ipv4']['address] }}

Edit: Fixed hash syntax

Upvotes: 4

Jason Lui
Jason Lui

Reputation: 21

follow Chris Lam 's advice, It works - name: test shell: echo {{ vars['ansible_' + ka_interface]['ipv4']['address'] }} tags: test

Upvotes: 1

Related Questions