2012-06-05 16 views
7

Actualmente estoy aprendiendo Jinja2 y no estoy seguro de cómo hacer frente a las variables de la forma correcta:las variables Jinja2 anidado

Aquí están mis variables en 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}} 

y aquí la plantilla Jinja2:

{{ 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 %} 

por lo que actualmente mi salida se ve así porque no puedo acceder a la segunda dimensión del hash yaml.

graphite.acme.com eth0.1

eth0

Respuesta

20

La variable hosts es una dict. La forma correcta de acceder a los valores en dict es usar el operador [].

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

. operador se utiliza para acceder al atributo de un objeto.

+0

que funcionó. ¡gracias! – damaex

+1

@ user1436955, bienvenido. Puedes marcarlo como respuesta si crees que esto es lo que estabas buscando. – Vikas

+0

Curiosamente, la interfaz ['ip'] no parece funcionar, creo que la interfaz se trata como una cadena, no como un dict. –