Роли в Ansible
Roles
Роль (Role) в Ansible - это способ организации и структурирования автоматизации. Роль представляет собой директорию с определенной структурой и набором файлов, которые содержат задачи, переменные, обработчики, файлы и шаблоны, необходимые для автоматизации конкретной части инфраструктуры или приложения.
Роли являются многоразовыми и могут быть многократно использованы в различных плейбуках, что способствует более чистой и модульной организации кода Ansible.
Role - группа tasks, которая нацелена на выполнение действий, приводящих к единому результату.
my_role/
├── tasks/
│ └── main.yml # Основные задачи для выполнения
├── defaults/
│ └── main.yml # Переменные по умолчанию
├── vars/
│ └── main.yml # Дополнительные переменные
├── files/
│ ├── my_file.txt # Файлы для копирования
│ └── ...
├── templates/
│ ├── my_template.j2 # Шаблоны для генерации файлов
│ └── ...
├── handlers/
│ └── main.yml # Обработчики (handlers)
├── meta/
│ └── main.yml # Метаданные роли
└── README.md # Документация роли
Что делает role?
- Role - выполняет список действий
- Список может состоять из одного действия
- Действия должны приводить к одному общему результату (например, установка и настройка nginx)
- Если в рамках действий role необходимо получить отдельный результат, стоит написать для этого отдельную role
- Если ваш play использует roles, то использование tasks нежелательно, при этом можно использовать pre_tasks и post_tasks. Такая рекомендация очень важна, потому что приоритет на таски и роли в Ансибл одинаковый и может возникнуть путаница при выполнении Плея
- Если ваш playbook использует roles, то для расширения функционала стоит писать role, даже если она состоит из атомарного действия
Где хранить Role?
- Директория roles в корневой директории плейбука
- По пути /etc/ansible/roles
- По пути /usr/share/ansible/roles
- Кастомный путь
Для кастомного пути нужно: - Переопределять путь в ansible.cfg в параметре DEFAULT_ROLE_PATH - Создать переменную окружения ANSIBLE_ROLES_PATH
Как создать Role?
- Для начала нужно определить: какую цель преследуетисполнение будущей роли?
- Поискать уже готовое решение на galaxy.ansible.com
- Создать стандартную структуру директорий и файлов при помощи ansible-galaxy
- Создать необходимые tasks, handlers
- Определить все необходимые переменные в defaults и vars
- Создать готовый тестовый playbook в tests
- Заполнить meta всю информацию о роли, наиболее полно описать её в README.md
# Создание новой роли:
ansible-galaxy init имя_роли
# Скачивание роли из ansible-galaxy:
ansible-galaxy install имя_роли
# Установка ролей, перечисленных в файле requirements.yml
ansible-galaxy install -r requirements.yml
# Удаление роли:
ansible-galaxy remove имя_роли
# Файл requirements.yml используется для определения зависимостей на роли Ansible в вашем проекте
---
- name: имя_роли
src: источник_роли # Это может быть URL-адрес Git-репозитория, URL-адрес Ansible Galaxy, путь к локальной директории или путь к ZIP-архиву с ролью.
version: версия_роли # Может быть номером версии, веткой Git или тегом Git.
scm: тип_системы_контроля_версий # Может быть одним из следующих значений git, hg, svn, tar, zip, bzr, copy
scm_branch: имя_ветки
Как тестировать Role?
Тестирование Role превращается в достаточно сложную задачу, так как нужно: - Провести проверку синтаксиса - Подготовить тестовое окружение - Провести проверку на работоспособность - Провести проверку на идемпотентность - Исправить ошибки на каждом из этих этапов и повторять весь сценарий, пока не будет получен положительный результат
Molecule - это инструмент для тестирования Ansible-ролей. Он предназначен для автоматизации процесса создания временных тестовых окружений, выполнения Ansible-плейбуков и проверки результатов. Molecule позволяет разработчикам и системным администраторам убедиться, что их Ansible-роли работают корректно на различных целевых платформах и сценариях.
Основные возможности и компоненты Molecule включают:
- Создание временных окружений: Molecule может автоматически создавать временные виртуальные машины, контейнеры Docker или другие среды для тестирования. Он интегрируется с различными платформами виртуализации, такими как VirtualBox, VMware, Docker, Vagrant и другими.
- Применение Ansible-плейбуков: Molecule позволяет запускать Ansible-плейбуки на созданных временных хостах для тестирования конфигурации и ролей.
- Проверка результатов: Molecule предоставляет средства для автоматической проверки результатов выполнения плейбуков. Это включает в себя проверку вывода, проверку наличия файлов, убеждение в правильности конфигурации и другие виды проверок.
- Интеграция с различными тестовыми фреймворками: Molecule поддерживает различные фреймворки для написания тестов, такие как Testinfra, Goss и другие.
- Многоразовость и переносимость: Molecule позволяет создавать тестовые сценарии, которые могут быть выполнены на разных платформах и сценариях, что делает его инструментом для тестирования ролей многоразовыми и переносимыми.
Как использовать Role?
Чтобы использовать role в playbook - необходимо использовать следующий синтаксис