Ответ
Условия в Ansible — это механизм, позволяющий выполнять задачи, плейбуки, роли или включать файлы только при соблюдении определённых критериев. Это основа для создания адаптивных и идемпотентных конфигураций, работающих в разных окружениях.
Основной директивой является when.
Пример 1: Зависимость от фактов об ОС
- name: Install Apache on CentOS/RHEL
yum:
name: httpd
state: present
when: ansible_facts['os_family'] == "RedHat"
- name: Install Apache on Ubuntu/Debian
apt:
name: apache2
state: present
when: ansible_facts['os_family'] == "Debian"
Пример 2: Проверка результата предыдущей задачи (использование registered variables)
- name: Check if a service is running
command: systemctl is-active nginx
register: nginx_status
ignore_errors: yes
changed_when: false
- name: Restart Nginx if it was active
systemd:
name: nginx
state: restarted
when: nginx_status.rc == 0
Пример 3: Комбинирование условий и проверка переменных
- name: Deploy configuration only for production servers in the EU region
template:
src: app_config.j2
dest: /etc/app/config.conf
when:
- env == "production"
- region == "eu-west-1"
- deploy_config | bool # Проверка, что переменная истинна
Важные моменты:
- Условия
whenоцениваются для каждого хоста в инвентаре отдельно. - Можно использовать выражения Jinja2, логические операторы (
and,or,not), тесты (is defined,match). - Условия также применяются к директивам
include_*,import_*и блокамblock.