Что такое условия (conditionals) в Ansible playbook?

«Что такое условия (conditionals) в Ansible playbook?» — вопрос из категории Ansible, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Условия в 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.