#ansible #jinja2
#ansible #jinja2
Вопрос:
Я хотел бы фильтровать хосты по переменной, установленной для них. Например:
У меня есть группа хостов, один из которых является ведущим, остальные — подчиненные. На главном replica_type: master
сервере установлена переменная. Теперь я хотел бы получить главный сервер динамически.
Мой рабочий подход:
- set_fact:
master_server_string: >-
{% for server in groups.my_servers %}
{% if hostvars[server]['replica_type']=='master' -%}
{{ server }}
{% endif %}
{% endfor %}
- set_fact:
master_server: "{{ master_server_string|trim }}"
Есть ли способ выполнить то же самое с фильтром (или, по крайней мере, в одной задаче)?
например, что-то вроде
"{{ server for server in groups.my_servers if hostvars[server]['replica_type'] == 'master' }}"
Ответ №1:
Я полагаю, вы ищете group_by
модуль. https://docs.ansible.com/ansible/latest/modules/group_by_module.html
- group_by:
key: {{ replica_type }}
Ответ №2:
Вы можете извлечь значение из группы хостов с помощью свойства, зациклив группу и проверив соответствие значения, подобного этому:
- set_fact:
master_server: "{{ item }}"
with_items: "{{ groups.my_servers }}"
when: hostvars[item].replica_type == 'master'
Комментарии:
1. Это решение так же хорошо, как и принятое, просто еще одна возможность