При использовании 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 для конкретных случаев использования.