Несколько методов исключения хоста из группы с использованием шаблонов Ansible

При использовании Ansible для управления конфигурацией вы можете столкнуться со сценариями, когда вам нужно выбрать хосты из группы, но исключить конкретный хост. В этой статье рассматривается несколько способов добиться этого с помощью шаблонов Ansible. Мы предоставим примеры кода для каждого метода, чтобы проиллюстрировать реализацию.

Метод 1: использование условия when
Один простой подход — использовать условие whenв ваших задачах, чтобы исключить конкретный хост. Вот пример:

- name: Perform task on hosts from group except one
  hosts: my_group
  tasks:
    - name: Perform task on all hosts except excluded_host
      debug:
        msg: "Performing task on {{ inventory_hostname }}"
      when: inventory_hostname != 'excluded_host'

Метод 2: использование переменной group_names
Ansible предоставляет переменную group_names, которая содержит список групп, к которым принадлежит текущий хост. Вы можете использовать эту переменную, чтобы исключить определенный хост. Вот пример:

- name: Perform task on hosts from group except one
  hosts: my_group
  tasks:
    - name: Perform task on all hosts except excluded_host
      debug:
        msg: "Performing task on {{ inventory_hostname }}"
      when: "'excluded_host' not in group_names"

Метод 3: объединение фильтров группы и хоста.
Другой подход предполагает объединение фильтров группы и хоста в Ansible для исключения нужного хоста. Вот пример:

- name: Perform task on hosts from group except one
  hosts: my_group:!excluded_host
  tasks:
    - name: Perform task on all hosts except excluded_host
      debug:
        msg: "Performing task on {{ inventory_hostname }}"

Метод 4. Использование переменной ansible_play_hosts_all.
Переменная ansible_play_hosts_allсодержит список всех хостов, участвующих в текущем воспроизведении. Вы можете использовать эту переменную, чтобы исключить определенный хост. Вот пример:

- name: Perform task on hosts from group except one
  hosts: my_group
  tasks:
    - name: Perform task on all hosts except excluded_host
      debug:
        msg: "Performing task on {{ inventory_hostname }}"
      when: "'excluded_host' not in ansible_play_hosts_all"

В этой статье мы рассмотрели несколько способов исключения определенного хоста из группы при использовании шаблонов Ansible. Используя условия, переменные и фильтры, вы можете эффективно выбирать хосты, исключая нужный хост. Понимание этих методов поможет вам оптимизировать конфигурации плейбуков Ansible для конкретных случаев использования.