← Назад к вопросам

Какие директории могут находиться в Roles

2.3 Middle🔥 121 комментариев
#Ansible и управление конфигурацией

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Структура директорий в Ansible Roles

В Ansible, Roles представляют собой модульный способ организации задач, переменных, файлов и других компонентов для повторного использования. Они предназначены для разделения функциональности на логические блоки и имеют строго определённую структуру директорий. Каждая роль может содержать следующие основные директории (не все обязательны):

Основные директории (стандартные)

  • tasks/Обязательная директория. Здесь хранится основной список задач (main.yml) и дополнительные файлы задач.

    # tasks/main.yml пример
    - name: Установка Nginx
      apt:
        name: nginx
        state: present
    
  • handlers/ — Содержит обработчики (handlers), которые вызываются задачами по событию (notify). Обычно включает main.yml.

    # handlers/main.yml пример
    - name: Перезапустить Nginx
      service:
        name: nginx
        state: restarted
    
  • vars/ — Хранит переменные с высоким приоритетом (переопределяют переменные из defaults/). Обычно включает main.yml.

    # vars/main.yml пример
    nginx_port: 8080
    
  • defaults/ — Хранит переменные с низким приоритетом (могут быть переопределены). Это основные, "дефолтные" переменные роли. Обычно включает main.yml.

    # defaults/main.yml пример
    nginx_port: 80
    
  • files/ — Содержит статические файлы, которые будут передаваться на управляемые узлы без изменений через модуль copy. Ansible автоматически ищет файлы здесь.

    # Пример содержимого
    files/my-config.conf
    files/script.sh
    
  • templates/ — Содержит шаблоны Jinja2 (*.j2), которые будут обработаны и переданы на узлы через модуль template.

    # Пример содержимого
    templates/nginx.conf.j2
    templates/service-config.j2
    
  • meta/ — Содержит метаданные роли: информацию о зависимостях (dependencies), поддерживаемых платформах, авторах. Файл main.yml определяет зависимости от других ролей.

    # meta/main.yml пример
    dependencies:
      - { role: common, some_variable: 42 }
      - role: firewall
    

Опциональные директории

  • library/ — Для размещения собственных, пользовательских модулей Ansible, специфичных для данной роли.
  • module_utils/ — Для размещения вспомогательных Python-библиотек, используемых пользовательскими модулями.
  • lookup_plugins/ — Для размещения пользовательских плагинов lookup (поиска).

Пример полной структуры роли

my_nginx_role/
├── tasks/
│   ├── main.yml
│   └── configure.yml
├── handlers/
│   └── main.yml
├── defaults/
│   └── main.yml
├── vars/
│   └── main.yml
├── files/
│   └── custom-index.html
├── templates/
│   └── nginx.conf.j2
├── meta/
│   └── main.yml
└── README.md (опционально, документация)

Ключевые принципы работы

  • Автоматическое включение: Ansible автоматически включает файл main.yml из каждой соответствующей директории при выполнении роли (если он существует).
  • Модульность: Можно создавать дополнительные файлы в директориях (например, tasks/install.yml) и включать их в tasks/main.yml с помощью import_tasks или include_tasks.
  • Приоритеты переменных: Важно понимать порядок определения переменных: defaults (самый низкий) → vars (высокий) → extra_vars (из CLI, самый высокий). Это позволяет создавать гибкие и переопределяемые роли.

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