rudenkovk
@rudenkovk
DevOps, sysadmin

В чем может быть ошибка в моем ansible?

Всем привет. Натолкнулся на любопытную проблему.
Входные данные (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 такая же ситуация.

Что я делаю не так?
  • Вопрос задан
  • 1367 просмотров
Пригласить эксперта
Ответы на вопрос 2
@beza2000
Предполагаю, что вместо {{ hostvars[host].max_fails }} необходимо просто записывать {{ max_fails }}
В зависимости от текущего apiXX.domain.tld будет браться нужный max_fails.
Ответ написан
opium
@opium
Просто люблю качественно работать
очевидно что факты не собрались с апи если ругается на такую ошибку
вероятно раздел апи пуст
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы