Roles в Ansible: как перестать копировать плейбуки и начать управлять инфраструктурой
Я сидел и смотрел на плейбук на 500 строк. В нём были настройка nginx, установка PostgreSQL, деплой приложения и ещё пара десятков тасок вперемешку. Найти нужную строчку было квестом.
Это была знакомая боль. Каждый новый сервер означал копирование старого плейбука и переписывание половины. Ошибки плодились, а время на поддержку росло экспоненциально.
Предыстория
Пару лет назад мы запускали проект для клиента. Серверов было пять, потом десять. Через полгода — тридцать. Каждый раз я открывал vim, находил похожий плейбук и правил имена пакетов, юзеров и пути. Через месяц уже было семь разных версий nginx.yml в разных проектах. В одном забыли обновить конфиг, в другом — добавить сертификаты. Мелкие расхождения копились.
Проблема
Дублирование кода убивало время и терпение. Одно изменение нужно было внести в семь мест. Гарантировать, что не пропустишь — невозможно. Команда тратила часы на сравнение файлов через diff. Это не DevOps, а админский цирк с конями.
Когда инфраструктура росла, количество ошибок росло вместе с ней. Падение сервера из-за пропущенного пакета стало рутиной. Каждый раз виноват был не инструмент, а человеческий фактор.
Почему это важно
Любая ошибка в конфигурации — это простой. Простой — это деньги. Если вы тратите полдня на поиск бага в плейбуке, бизнес теряет не только вашу зарплату, но и деньги клиентов.
Поддерживать грязную инфраструктуру становится дорого. Новый сотрудник тратит недели на изучение, где что лежит. Автоматизация превращается в рутину, а не в инструмент скорости.
Решение
Я начал резать монолитные плейбуки на роли. Каждая роль отвечает за что-то одно: nginx, postgresql, deploy, monitoring. Они независимы друг от друга. Переиспользую их в разных проектах без копирования.
Роль — это не просто папка с тасками. Это контракт. Я знаю, что если добавил роль nginx, то nginx настроится одинаково на любой машине.
Структура стала простой:
- 📦 Одна роль — один компонент (nginx, redis, app)
- 🧩 Параметры через vars и defaults — не нужно лезть внутрь роли
- 🔁 Тот же код для dev и prod — меняются только переменные
И последний абзац коротко: я просто вызываю роли в плейбуке. Итоговый файл занимает 10 строк вместо 500.
Результат
Мы сократили время на поддержку втрое. Новые сервера поднимаем за 15 минут вместо часа. Ошибки при развёртывании практически исчезли. Команда не боится залезть в чужой код — он одинаковый во всех проектах.
Если хотите начать — возьмите одну повторяющуюся задачу и заверните её в роль. Это займёт час, а сэкономит недели.
📬 Зв'яжіться з нами
Бажаєте впровадити це у своєму бізнесі? Пишіть нам!
- 📧 Email: [email protected]
- 🌐 Сайт: 1it.pro
- 📝 Блог: blog.1it.pro