Ansible
Теория: Устройство ролей
В этом уроке мы разберем то, как устроены роли внутри, что поможет эффективнее их анализировать и создавать свои в случае необходимости.
Роли можно изучать на базе существующих, открыв их, например, на Github. А можно создать новую роль с нуля, чтобы увидеть, базовую структуру, которая туда была заложена. Пойдем по второму пути и создадим новую роль с помощью команды ansible-galaxy.
Выполнять саму команду генерации можно в любом месте, если планируется эту роль добавлять на Github и публиковать в Ansible Galaxy. Но можно пойти и по другому пути. Если разместить содержимое роли в директории roles в корне проекта где запускается Ansible, то появится возможность использовать эту роль напрямую, без необходимости публиковать ее в Galaxy.
Команда выше создаст базовую структуру роли, добавив в нее файлы и директории, необходимые для работы роли. Всего 8 директорий.
Из всех файлов в структуре выше, обязательными являются только meta/main.yml и tasks/main.yml. Остальные появляются в зависимости от обстоятельств. Вот их предназначение:
- defaults: содержит значения переменных по умолчанию. Эти значения могут быть изменены во время использования роли в плейбуке.
- files: сюда добавляются любые необходимые файлы, которые нужны роли.
- handlers: обработчики, которые могут быть использованы ролью.
- meta: содержит метаданные роли. Сюда входит лицензия, информация о платформе зависимости и многое другое.
- tasks: задачи роли, которые выполняются во время ее запуска.
- templates: шаблоны роли.
- tests: тесты роли.
- vars: переменные роли.
- README.md: описание, которое будет использоваться как документация.
Метаданные
Метаданные выполняют несколько задач. Во-первых, они описывают роль и помогают ее найти в Ansible Galaxy. Во-вторых, с их помощью указываются зависимости, другие роли, которые используются внутри этой.
Задачи и обработчики
Файл tasks/main.yml, представляет собой playbook, который будет запущен на выполнение при включении роли в playbook проекта или другой роли. По умолчанию этот файл пустой. Ожидается, что мы добавим сюда необходимые задачи.
Если задач станет много, то их можно будет разбить на разные файлы внутри директории tasks. main.yml будет точкой входа, которая включает в себя все эти файлы. Принцип разделения по файлам может быть разным, один из классических примеров это разные файлы с задачами под разные платформы.
Если задачам роли нужны обработчики, то они добавляются в директорию handlers/main.yml. Ansible автоматически их найдет и подключит.
Переменные роли
Для определения переменных, Ansible предлагает два разных варианта: директорию defaults и директорию vars. И там и там хранятся переменные, которые роль использует для своей работы. Разница между этими директориями заключается в том, что в vars хранятся переменные, которые нужны роли для ее работы, но пользователю про них знать не нужно, это внутренние переменные. defaults же содержит переменные, которые пользователь роли может или должен задать при использовании этой роли. Типичный пример параметра по умолчанию, это номер версии устанавливаемой программы. Обычно его можно поменять, без необходимости менять внутренности роли.
Шаблоны и файлы
Остальные директории могут содержать типовые файлы, которые встречаются в playbook. Структура этих директорий никак не специфицирована. Все файлы внутри них раскладываются так как удобно создателю роли.






