ansible - получить хост по переменной - PullRequest
1 голос
/ 10 апреля 2019

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

У меня есть группа хостов, один хозяин, остальные - рабы. На мастере установлена ​​переменная 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' }}"

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

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

- set_fact:
    master_server: "{{ item }}"
  with_items: "{{ groups.my_servers }}"
  when: hostvars[item].replica_type == 'master'
1 голос
/ 10 апреля 2019

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

- group_by:
    key: {{ replica_type }}
...