Vadim
в when нельзя использовать jinja темплейтинг
Vadim
https://github.com/ansible/ansible/issues/22397#issuecomment-285026743
Dorian
Vadim
Dorian
Vadim
ну давай тогда еще в угадайку поиграем, when: 'prometheus' in groups
Dorian
Dorian
она присвоена одному хосту из groups.all
Vadim
when: hostvars[item].prometheus is defined
Vadim
ну или с in
Dorian
не
he error was: error while evaluating conditional (hostvars[item].prometheus in item): Unable to look up a name or access an attribute in template string ({% if hostvars[item].prometheus in item %} True {% else %} False {% endif %})
Vadim
when: hostvars[item].prometheus is defined
Vadim
when: 'prometheus' in hostvars[item]
Dorian
Увы
Ансибл на формат ругается, а не на переменные
Dorian
спасибо за совет
Andrey
@vrutkovs @tnt4brain
ansible -i ./hosts-adminvps db --private-key ~/.ssh/id_rsa -u root -m setup | grep -A 2
ansible_default_ipv4
"ansible_default_ipv4": {
"address": "***",
"alias": "eth0",
я так полагаю факты он получает нормально
Andrey
в jinja шаблоне есть такие строчки
{% for host in groups['all'] %}
{{ hostvars[host]['ansible_default_ipv4']['address'] }} {{ hostvars[host]['ansible_hostname'] }} {{ hostvars[host]['ansible_nodename'] }}
{% endfor %}
и тут он это не видит
Salem
А убери hostvars[host] из темплейта
Salem
Сделай просто {{ ansible_default_ipv4.address}}
Andrey
Salem ну вывел он с десяток раз один и тот же адрес
Andrey
я сделал вывод {{ hostvars[host] }} и там нет ansible_default_ipv4 ни для одного хоста
Salem
Помнится мне что хостварс это не то же самое что факты
Andrey
ушел читать
Salem
hostvars lets you ask about the variables of another host, including facts that have been gathered about that host. If, at this point, you haven’t talked to that host yet in any play in the playbook or set of playbooks, you can still get the variables, but you will not be able to see the facts.
Salem
если ансибл не ходил еще на твой хост до того, то переменные пустые будут
Andrey
итак вопрос знатокам, почему когда при вызове плейбука указываешь фильтр на один хост то не заполняется ansible_default_ipv4 в hostvars
Vadim
Vadim
вот это работает - https://github.com/openshift/openshift-ansible/blob/master/roles/contiv/defaults/main.yml#L152
Salem
потому что ты в цикле хочешь вывести все хосты
Salem
а ансибл на них не ходил, и про факты о них нифига не знает
Salem
{% for host in groups['all'] %} - я думаю вот тут собака порылась, оно не обрабатывает фильтры твои а шпарит все
Andrey
сек просмотрю вывод по списку
Vadim
надо смотреть нет ли всяких выдумок в facts_caching в ansible.cfg
Salem
я думаю тебе надо вот так сделать {% for host in play_hosts %}
Salem
то есть это те, которые для текущего плея
Andrey
нене ребят спасибо все норм, нашли же
Andrey
ага направление понял спасибо!
Salem
ну так а как решили то)
Andrey
вы извините я второй день в ансибле )
Salem
все такими были,чо уж
Salem
ты поделись решением, чтобы те,кто 1й день тоже знали)
Andrey
да нельзя просто вызывать так тот таск в роли, я генерирую hosts файл где должны быть несколько серверов, а пытался выполнить с фильтром для одного, просто нельзя так
Andrey
Salem и play_hosts тут неправильно будет в моем случае
Salem
ну я твой плебук не видел)
Andrey
Andrey
Salem твое счастье
Huan
Подскажите, как скомбинировать несколько групп переменных?
vars1:
- var1: val1
- var2: val2
...
- varN: valN
vars2:
- key1: val1
- key2: val2
...
- keyN: valN
- name: generate config
template: src=config.j2 dest=/etc/config.conf
with_items:
- '{{ vars1 }}'
config.j2:
{{ item.var1 }}
{{ item.var2 }}
...
{{ item.varN }}
{{ item.key1 }}
{{ item.key2 }}
...
{{ item.keyN }}
manefesto
Не понял что ты хочешь
manefesto
Делай в цикле в шаблоне
manefesto
{% for key, value in item%}
{{ key }} {{ value }}
{% endfor %}
Alex
vars1 | combine(vars2) хочет скорее всего
Huan
есть две группы переменных
Huan
и один шаблон
Huan
надо из этих групп слепить один шаблон
Huan
Половина конфига из одних варслв, вторая из другой
Nikita
Сделайте 2 переменных, в них сделайте список значений
Nikita
И через with_items обработайте
Huan
Не в списках дело, а в группах варсов. Просто вторая группа варсов юзается в другом темплейте
Nikita
Так, стоп, можно нормальное ТЗ?
Nikita
Что должно происходить?
Nklya
и пример кода на гитхабе или в гисте
Huan
Подскажите, как скомбинировать несколько групп переменных?
vars1:
- var1: val1
- var2: val2
...
- varN: valN
vars2:
- key1: val1
- key2: val2
...
- keyN: valN
- name: generate config
template: src=config.j2 dest=/etc/config.conf
with_items:
- '{{ vars1 }}'
- ‘{{ вот тут можно указать группу vars2? }}’
config.j2:
{{ item.var1 }}
{{ item.var2 }}
...
{{ item.varN }}
{{ item.key1 }}
{{ item.key2 }}
...
{{ item.keyN }}
Nikita
Вам нужно 2 группы переменных?
Nikita
- '{{ vars1 }}'
- ‘{{ вот тут можно указать группу vars2? }}’
Nikita
Да
Huan
Да
Huan
И как их указывать в шаблоне?
Nikita
http://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html
Nikita
Первый раздел
Nikita
Huan
В примере есть config.j2
Huan
Только вот хз как указать переменные из второй группы
Nikita
Хм…хотя вот я не уверен, какое поведение у модуля template с with_items. Возможно он будет каждый раз копировать новый темплейт на каждом цикле
Nklya
with_items это про циклы, как это связано с генерацией одного шаблона?
Huan
К примеру в обеих группах есть переменная port с разными значениями. Как указать в темплейте в одном месте item.port из одной группы варсов, а в другом месте из второй?
Huan
with_items - тут можно указать группу переменных
Huan
Которые будут подставляться в шаблоне