8

I am currently learning jinja2 and i am unsure on how to address variables the correct way:

Here are my variables in yaml:

---
hosts:
   app201.acme.com: {eth0: {ip: 46.0.0.1, netmask: 255.255.255.255}}
   graphite.acme.com: {eth0: {ip: 46.0.0.2, netmask: 255.255.255.255},
                       eth0.1: {ip: 10.2.90.1, netmask: 255.255.255.255}}

and here the jinja2 template:

{{ fqdn }}
{% for interface in hosts[fqdn] %}
    {{ interface }}
    {{ hosts[fqdn].interface.ip }} << doesn't work
    {{ hosts[fqdn].{{ interface }}.ip }} << doesn't work
    {{ interface.ip }} << doesn't work
{% endfor %}

so currently my output looks like this since I can't access second dimension of yaml hash.

graphite.acme.com eth0.1

eth0

1 Answer 1

21

The variable hosts is a dict. The correct way to access values in dict is to use [] operator.

{{ fqdn }}
{% for interface in hosts[fqdn] %}
    {{ interface }}
    {{ hosts[fqdn][interface]['ip'] }}
{% endfor %}

. operator is used to access attribute of an object.

Sign up to request clarification or add additional context in comments.

4 Comments

@user1436955, most welcome. You can mark it as an answer if you think this is what you were looking for.
Interestingly interface['ip'] doesn't seem to work, I guess since interface is treated as a string, not dict.
@MateuszM. thanks for pointing out. It was copy pasted from OP's code snippet and I forgot removing.
{{form.fullName(class='form-control', value={{x}}, placeholder="FirstName LastName") }} how to add the x value for flask wtf form that come from server

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.