Какие директории могут находиться в Roles
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Структура директорий в 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). Использование ролей является одной из лучших практик для организации сложных плейбуков.