
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

Vadim
04.05.2018
16:20:52

Dorian
04.05.2018
16:23:11

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
Увы
Ансибл на формат ругается, а не на переменные
спасибо за совет

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

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
Скажем так, в одном роли есть темплейт. В нем указаны варсы для этой роли и часть варсов из другой роли

Nikita
05.05.2018
08:09:57

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']