Всем привет. Натолкнулся на любопытную проблему.
Входные данные (ansible 2.2):
1. Inventory
[api]
api01.domain.tld max_fails=12 fail_timeout=70
api02.domain.tld max_fails=13 fail_timeout=70
api03.domain.tld max_fails=12 fail_timeout=70
api04.domain.tld max_fails=12 fail_timeout=70
2. Шаблон для описания nginx upstreams (важен второй цикл):
{% for upstream1 in nginx_upstreams1.iteritems() %}
upstream {{ upstream1[0] }} {
{% for item in upstream1[1] %}
{{ item }};
{% endfor %}
{% for host in groups[upstream1[0]] %}
# {{ host }}
server {{ hostvars[host].ansible_eth0.ipv4.address }} ;
{{ hostvars[host].max_fails }}
{% endfor %}
}
{% endfor %}
# max_fails {{ hostvars['api01.domain.tld'].max_fails }}
# max_fails {{ hostvars['api02.domain.tld'].max_fails }}
3. В результате я получаю, что
-
{{ hostvars[host].max_fails }}
- выдает "msg": "AnsibleUndefinedVariable: 'dict object' has no attribute 'max_fails'"
- когда я указываю в hostvars имя хоста руками все отрабатывает корректно ( # max_fails {{ hostvars['api01.domain.tld'].max_fails }} )
- когда я смотрю дебажный вывод ad-hoc через -m debug, или вывожу hostvars[host] в отрендеренный шаблон - max_fails там присутствует.
4. с fail_timeout такая же ситуация.
Что я делаю не так?