Roles
Официальная документация Ansible Roles
Для чего используются
1) Вынесение повторяемых задач в отдельные модули.
2) Возможность тестировать отдельные куски инфраструктурного кода
3) Переиспользование разработок на всех проектах
В идеале написать роль один раз и все проекты будут использовать ее
Почему не писать роли в playbook?
-
быстро разрастается в размере/количестве
-
не версионируются
Как создавать роль
Для создания роли правильнее всего будет использовать команду:
По результату выполнения команды будет создана основная директория и множество вложенных директорий с дефолтными файлами для заполнения.Пример результата выполнения команды:
Структура роли
- defaults - main.yml / переменные и значения по умолчанию
- files / копирование файлов внутрь сервера (например сертификаты)
- handlers - main.yml / обработчики
- meta - main.yml / информация о роли и зависимостях
- tasks - main.yml / основные задачи в роли
- templates - mongodb.conf.j2 / шаблоны конфигурации
- tests - inventory or - test.yml / сценарии и данные для тестирования
- vars - main.yml / внутренние переменные роли
Важные особенности работы с ролями
У ролей есть множество способов передачи параметров.
отличие defaults и vars
defaults - настройки роли с дефолтными значениями, которые предполагается переопределять
vars - переменные роли с высоким приоритетом, которые переопределять сложно.
Какие бывают переменные в Ansible?
roles/nginx/defaults/main.yml / дефолт самой роли
group_vars/web.yml / настройка группы web
host_vars/server1.yml / настройки сервера
Приоритет переменных (мин - макс)
1) roles/nginx/defaults (минимальный)
2) group_vars/all.yml
3) group_vars/web.yml
4) host_vars/server1.yml
5) roles/nginx/vars/main.yml (максимальный)
Переменные
Для чего нужны?
-
нужны для переиспользования в различных частях описания сценариев и определения отличий
-
дополняют циклы и операторы с условиями, для определения отличий на основе переменных
-
могут использоваться почти везде, в пределах инфраструктурного репозитория
-
YAML поддерживает словари и списки, их можно использовать для переменных
Registered переменные
-
В некоторых случаях, можно создавать переменную на основе выполненной команды или работы модуля.
-
Эти переменные будут доступны в пределах исполняемого хоста и могут отличаться между хостами.
Факты
-
read-only системные переменные
-
посмотреть факты можно командой
ansible localhost -m setup
Факты автоматически собираются при запуске playbook со всех хостов
Особые переменные
-
зарезервированные переменные самого Ansible:
hostvars, group_vars, inventory_hostname, playbook_dir -
host_vars и group_vars = особые переменные позволяющие получить доступ к значениям переменных другого хоста или группы хостов.