Ansible — получить хост по переменной

Я хотел бы фильтровать хосты по установленной на них переменной. Например:

У меня есть группа хостов, один мастер, остальные рабы. На мастере установлена ​​переменная 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' }}"
Введение в Ansible Roles
Введение в Ansible Roles
Ansible - это отличный инструмент управления конфигурацией, который можно использовать для автоматизации настройки или развертывания на большом...
1
0
398
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я полагаю, вы ищете модуль group_by. https://docs.ansible.com/ansible/latest/modules/group_by_module.html

- group_by:
    key: {{ replica_type }}

Вы можете извлечь значение из группы хостов по свойству, зациклив группу и проверив соответствующее значение, например:

- set_fact:
    master_server: "{{ item }}"
  with_items: "{{ groups.my_servers }}"
  when: hostvars[item].replica_type == 'master'

Это решение так же хорошо, как и принятое, просто еще одна возможность

ProfHase85 11.04.2019 22:22

Другие вопросы по теме