Ansible
2026-02-26 20:51 Diff

Задачи, которые решаются с помощью Ansible, часто повторяются у разных людей и команд. Как и в случае программирования, где общий код выделяют в библиотеку, Ansible выделяет повторяющиеся вещи в роли. Эти роли выкладываются в общий каталог, через который любой человек может найти себе готовое решение по установке и настройке чего-либо.

Роль представляет собой набор задач или обработчик переменных, файлов и других артефактов, которые распространяются и подключаются как единое целое к плейбуку. Обычно, роли выполняют достаточно высокоуровневые задачи, например установку баз данных, веб-серверов и тому подобное. Иногда они автоматизируют работу с каким-то низкоуровневым сервисом, который не встроен в сам Ansible. Вот список некоторых популярных ролей:

  • geerlingguy.java: Роль для установки Java на Linux. Умеет ставить версии, которых нет в стандартных менеджерах.
  • ajsalminen.hosts: Роль для управления содержимым файлов /etc/hosts и /etc/hostname через удобный конфиг, вместо прямой работы с файлами.
  • jdauphant.ssl-certs: Роль для генерации сертификатов
  • ansistrano.deploy: Роль с помощью которой можно деплоить проекты на любом языке программирования

Возьмем для примера веб-сервер Nginx. Для его установки в Ansible Galaxy можно найти множество ролей от разных разработчиков, среди которых есть и официальная, разрабатываемая компанией NGINX. Вот ее страничка. Здесь мы видим описание и инструкцию для установки. Разберем их.

Первый шаг – установка роли. Она выполняется с помощью команды ansible-galaxy:

Имя роли состоит из двух частей. Неймспейс, который обычно совпадает с именем пользователя на github и собственно имени роли, в данном случае nginx. Таким образом избегаются коллизии имен.

Второй шаг - подключение. Роли добавляются в плейбук через ключ roles:

Ansible начинает выполнять роли до tasks независимо от порядка организации верхнеуровневых ключей в плейбуке. Но иногда требуется выполнить какие-то подготовительные действия до выполнения роли. В таком случае есть два варианта.

  1. Добавить подготовительные задачи в pre_tasks:

  2. Добавлять роли через import_role

Конфигурация ролей

Роли стараются делать достаточно общими, чтобы их можно было использовать в разных ситуациях. Для этого внутри роли определяются переменные, с помощью которых можно управлять поведением, например, способом установки, версией пакета и так далее. Переменные, которые для этого созданы можно найти в директории defaults/ в репозитории самой роли. Пример из Nginx:

Переопределяются эти переменные через ключ vars:

Автоматическая установка

Ansible умеет автоматически устанавливать роли. Для этого создается файл requirements.yml, например, в том месте где запускается ansible. Туда добавляется список нужных ролей:

Затем выполняется установка: