Где можно указать переменные в ролях Ansible?

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

Ответ

В Ansible переменные для ролей определяются с учётом приоритета (от низшего к высшему):

  1. defaults/main.yml — значения по умолчанию, которые легко переопределить.
  2. vars/main.yml — основные переменные роли, имеют более высокий приоритет.
  3. Внутри задач (tasks/main.yml) через блок vars: — переменные для конкретной задачи.
  4. В meta/main.yml — для зависимостей и переменных, связанных с ролью.
  5. В шаблонах (templates/) и файлах (files/) через Jinja2.

Пример структуры роли:

# defaults/main.yml - задаём безопасные значения по умолчанию
app_port: 8080
db_connection_pool: 10
backup_retention_days: 7

# vars/main.yml - фиксируем критичные для роли значения
service_user: "_app"  # Специальный системный пользователь
config_path: "/etc/myapp"

# tasks/main.yml - используем переменные
- name: Configure application
  template:
    src: config.j2
    dest: "{{ config_path }}/app.conf"
  vars:
    # Локальная переменная только для этой задачи
    tmp_debug_mode: "{{ 'yes' if debug_enabled else 'no' }}"

Практика в DevOps:

  • defaults/ используем для параметров, которые могут меняться в разных окружениях (dev/stage/prod).
  • vars/ — для жёстко зафиксированных значений (пути, имена системных пользователей).
  • Inventory переменныеgroup_vars/, host_vars/) имеют приоритет выше, чем vars/ роли, что позволяет гибко настраивать окружения.