2012-06-05 6 views
7

Я в настоящее время обучение jinja2 и я не уверен, о том, как решать переменные правильный путь:jinja2 вложенные переменные

Вот мои переменные в 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}} 

и здесь шаблон 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 %} 

так что в настоящее время мой вывод выглядит так, потому что я не могу получить доступ к второму измерению хэша yaml.

graphite.acme.com eth0.1

eth0

ответ

20

Переменная hosts является dict. Правильный способ доступа к значениям в dict - использовать оператор [].

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

. Оператор используется для доступа к атрибуту объекта.

+0

это сделал трюк. Спасибо! – damaex

+1

@ пользователь1436955, самый добро пожаловать. Вы можете отметить это как ответ, если считаете, что это то, что вы искали. – Vikas

+0

Интересно, интерфейс ['ip'] не работает, я думаю, поскольку интерфейс обрабатывается как строка, а не dict. –

Смежные вопросы