Skip to content

Роли в 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
# Файл 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 - необходимо использовать следующий синтаксис

синтаксис playbook
roles: # Объявление списка roles
  - nginx
  - java
  - portgress

Полезные роли

Node exporter

Docker

Nginx

Apache 2.x

PHP

Certbot (for Let's Encrypt)

PostgreSQL

MySQL

Pip (for Python)

Linux Security (Basics)

Kubernetes

Backup for Simple Servers