@pro_ansible

Страница 458 из 625
Andrey
04.05.2018
15:57:02
Луп и eth0

Хз копну туда еще

Dorian
04.05.2018
16:12:06
Что не так с таском? - name: allow access from prometheus collector blockinfile: path: /etc/rc.d/rc.firewall insertafter: "iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT" block: | iptables -A INPUT -s {{ hostvars[item].ansible_default_ipv4.address }} -p tcp --dport 9100 -j ACCEPT -m comment --comment "Ansible: Access to node_exporter from {{ item }} prom" marker: "# {mark} allow host connect to prometheus node_exporter for {{ item }}" when: "{{ item.prometheus is defined }}" with_items: - "{{ groups.all }}" when не отрабатывает

Хочу перебрать все хосты, но выбрать только тот у кого определена переменная

Google
Natalia
04.05.2018
16:16:44
Попробуй так when: "{{ item.prometheus }}" is defined with_items: - "{{ groups.all }}"

Vadim
04.05.2018
16:18:28
в when нельзя использовать jinja темплейтинг

https://github.com/ansible/ansible/issues/22397#issuecomment-285026743

Dorian
04.05.2018
16:19:53
в when нельзя использовать jinja темплейтинг
item.prometheus is defined тем менее тоже не рабит

Vadim
04.05.2018
16:20:52
Dorian
04.05.2018
16:23:11
when: 'prometheus' in item
не, тоже не нравится

Vadim
04.05.2018
16:23:42
ну давай тогда еще в угадайку поиграем, when: 'prometheus' in groups

Dorian
04.05.2018
16:24:18
она присвоена одному хосту из groups.all

Vadim
04.05.2018
16:25:02
when: hostvars[item].prometheus is defined

ну или с in

Dorian
04.05.2018
16:26:20
не 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 %})

Google
Vadim
04.05.2018
16:26:42
when: hostvars[item].prometheus is defined

when: 'prometheus' in hostvars[item]

Dorian
04.05.2018
16:28:42
Увы Ансибл на формат ругается, а не на переменные

when: 'prometheus' in hostvars[item]
почти близко when: '"prometheus" in hostvars[item]'

спасибо за совет

Andrey
04.05.2018
18:00:48
@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", я так полагаю факты он получает нормально

в jinja шаблоне есть такие строчки {% for host in groups['all'] %} {{ hostvars[host]['ansible_default_ipv4']['address'] }} {{ hostvars[host]['ansible_hostname'] }} {{ hostvars[host]['ansible_nodename'] }} {% endfor %} и тут он это не видит

Salem
04.05.2018
18:06:10
А убери hostvars[host] из темплейта

Сделай просто {{ ansible_default_ipv4.address}}

Andrey
04.05.2018
18:11:45
Salem ну вывел он с десяток раз один и тот же адрес

я сделал вывод {{ hostvars[host] }} и там нет ansible_default_ipv4 ни для одного хоста

Salem
04.05.2018
18:13:24
Помнится мне что хостварс это не то же самое что факты

Andrey
04.05.2018
18:14:38
ушел читать

Salem
04.05.2018
18:18:20
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.

если ансибл не ходил еще на твой хост до того, то переменные пустые будут

Andrey
04.05.2018
18:21:34
итак вопрос знатокам, почему когда при вызове плейбука указываешь фильтр на один хост то не заполняется ansible_default_ipv4 в hostvars

Vadim
04.05.2018
18:21:47
вот это работает - https://github.com/openshift/openshift-ansible/blob/master/roles/contiv/defaults/main.yml#L152

Salem
04.05.2018
18:22:01
потому что ты в цикле хочешь вывести все хосты

а ансибл на них не ходил, и про факты о них нифига не знает

Google
Salem
04.05.2018
18:23:26
{% for host in groups['all'] %} - я думаю вот тут собака порылась, оно не обрабатывает фильтры твои а шпарит все

Andrey
04.05.2018
18:23:39
сек просмотрю вывод по списку

Vadim
04.05.2018
18:24:36
надо смотреть нет ли всяких выдумок в facts_caching в ansible.cfg

Salem
04.05.2018
18:26:47
я думаю тебе надо вот так сделать {% for host in play_hosts %}

то есть это те, которые для текущего плея

Andrey
04.05.2018
18:27:01
нене ребят спасибо все норм, нашли же

ага направление понял спасибо!

Salem
04.05.2018
18:27:31
ну так а как решили то)

Andrey
04.05.2018
18:28:02
вы извините я второй день в ансибле )

Salem
04.05.2018
18:28:17
все такими были,чо уж

ты поделись решением, чтобы те,кто 1й день тоже знали)

Andrey
04.05.2018
18:30:13
да нельзя просто вызывать так тот таск в роли, я генерирую hosts файл где должны быть несколько серверов, а пытался выполнить с фильтром для одного, просто нельзя так

Salem и play_hosts тут неправильно будет в моем случае

Salem
04.05.2018
18:31:28
ну я твой плебук не видел)

Andrey
04.05.2018
18:32:10
Salem твое счастье

Huan
05.05.2018
02:40:39
Подскажите, как скомбинировать несколько групп переменных? 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 }}

Maksim
05.05.2018
06:36:05
Не понял что ты хочешь

Делай в цикле в шаблоне

{% for key, value in item%} {{ key }} {{ value }} {% endfor %}

Alex
05.05.2018
06:38:39
vars1 | combine(vars2) хочет скорее всего

Google
Huan
05.05.2018
07:34:32
есть две группы переменных

и один шаблон

надо из этих групп слепить один шаблон

Nikita
05.05.2018
07:52:49
надо из этих групп слепить один шаблон
По какому принципу? Каждый из var должен получить все элементы из key?

Huan
05.05.2018
07:53:59
Половина конфига из одних варслв, вторая из другой

Nikita
05.05.2018
07:55:04
Сделайте 2 переменных, в них сделайте список значений

И через with_items обработайте

Huan
05.05.2018
07:56:16
Не в списках дело, а в группах варсов. Просто вторая группа варсов юзается в другом темплейте

Nikita
05.05.2018
07:57:07
Так, стоп, можно нормальное ТЗ?

Что должно происходить?

Nklya
05.05.2018
07:57:24
и пример кода на гитхабе или в гисте

Huan
05.05.2018
07:59:02
Подскажите, как скомбинировать несколько групп переменных? 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
05.05.2018
07:59:19
Вам нужно 2 группы переменных?

- '{{ vars1 }}' - ‘{{ вот тут можно указать группу vars2? }}’

Да

Huan
05.05.2018
07:59:43
Да

И как их указывать в шаблоне?

Nikita
05.05.2018
08:00:00
http://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html

Первый раздел

И как их указывать в шаблоне?
Смотря какой у вас шаблон

Google
Huan
05.05.2018
08:01:18
В примере есть config.j2

Только вот хз как указать переменные из второй группы

Nikita
05.05.2018
08:03:38
Хм…хотя вот я не уверен, какое поведение у модуля template с with_items. Возможно он будет каждый раз копировать новый темплейт на каждом цикле

Nklya
05.05.2018
08:03:57
with_items это про циклы, как это связано с генерацией одного шаблона?

Huan
05.05.2018
08:04:10
К примеру в обеих группах есть переменная port с разными значениями. Как указать в темплейте в одном месте item.port из одной группы варсов, а в другом месте из второй?

with_items - тут можно указать группу переменных

Которые будут подставляться в шаблоне

Nklya
05.05.2018
08:07:11
А почему переменные не засунуть в какие-нибудь _vars и они будут нативно доступны везде вместо таких вот приседаний?

Nikita
05.05.2018
08:07:31
Хм…у меня такое чувство, что вам проще сделать через lineinfile

Huan
05.05.2018
08:08:08
Мне кажется я не сиог объяснить что нужно

Nikita
05.05.2018
08:09:10
Если у вас просто конфиг в котором вам построчно нужно внести переменные - самый просто вариант это lineinfile + with_items

Huan
05.05.2018
08:09:10
Скажем так, в одном роли есть темплейт. В нем указаны варсы для этой роли и часть варсов из другой роли

Huan
05.05.2018
08:10:07
Да

И в обеих ролях есть переменная port

Nikita
05.05.2018
08:11:16
Она в роли задана или вы её в плейбуке задаете?

Huan
05.05.2018
08:11:38
Все варсы в group_vars

Nikita
05.05.2018
08:21:10
test.yml: - hosts: localhost connection: local gather_facts: false vars: var_x: - var_1 - var_2 - var_3 var_y: - var_11 - var_12 - var_13 tasks: - name: copy to tmp template: src: test.j2 dest: /tmp/test.cong with_items: - "{{ var_x }}" - "{{ var_y }}" test.j2 {{ var_x }} {{ var_y }} test.conf [u'var_1', u'var_2', u'var_3'] [u'var_11', u'var_12', u'var_13']

Страница 458 из 625