Ansible – основы управления конфигурацией

Привет, %username%! На страницах этого блога уже было
небольшое упоминание Ansible
– инструмента для управления конфигурацией. Пройдемся по основам, определениям дабы зафиксировать.
🔄 Обновлено 2026-05-15: проставил актуальные требования к Python, поправил пакет (
ansible→ansible-coreпосле split’а в 2.10) и в конец добавил блок «Что изменилось к 2026» — про коллекции,ansible-lint,moleculeи место Ansible рядом с Terraform/Pulumi.
Управления конфигурацией#
Пробежавшись по различным ресурсам в интернете можно прийти к следующему определению:
Управление конфигурацией (Configuration Management / CM) – это автоматизированный процесс внесения изменений в систему, который обеспечивает целостность конфигураций.
CM часто вспоминают в контексте автоматизации каких-либо рутинных задач/процессов. Например: как только у вас появляется несколько одинаковых серверов, вам жизненно необходимо начать работать с CM системами дабы исключить человеческий фактор из процесса конфигурирования одинаковых систем. Человек белковый может допустить очепятку, а машина железная – нет.
Посмотрим на преимущества инструментов CM для автоматизации настройки инфраструктуры и на то, как работает Ansible.
Преимущества использования инструментов CM#
Для управления конфигурацией существует некоторое количество инструментов с различными уровнями сложности и архитектурными стилями:
| Tool | Released by | Method | Approach | Written in |
|---|---|---|---|---|
| Chef | Chef (2009) | Pull | Declarative and imperative | Ruby |
| Otter | Inedo | Push | Declarative and imperative | - |
| Puppet | Puppet (2005) | Pull | Declarative | C++ & Clojure since 4.0, Ruby |
| SaltStack | SaltStack | Push and Pull | Declarative and imperative | Python |
| CFEngine | CFEngine | Pull | Declarative | C |
| Terraform | HashiCorp (2014) | Push | Declarative | Go |
| DSC | Microsoft | Push/Pull | Declarative/Imperative | PowerShell |
| Ansible / Ansible Tower | RedHat (2012) | Push | Declarative and imperative | Python |
Не смотря на различные подходы, архитектуру и прочие незначительные отличия, каждый из инструментов работает по своему и выполняет одну и ту же задачу: гарантирует, что состояние системы соответствует описанному сценарию.
Ключевые преимущества CM связаны с определением инфраструктуры как кода – подход Infrastructure as Code (IaC) , что позволяет:
- Использовать GitLab/Github, чтобы отслеживать изменения в инфраструктуре;
- Переиспользовать сценарии в нескольких серверных средах (в средах dev, test, stage и prod);
- Делиться сценариями с как внутри команды, так и между командами;
- Ускорить процесс размножения серверов;
Ну и самое главное: инструменты CM позволяют управлять сотнями серверов централизованно, что повышает эффективность инфраструктуры.
Ansible – краткий обзор#
Ansible – современный инструмент CM, который облегчает настройку удаленных серверов благодаря своей простоте и низкому порогу вхождения.
Сценарии Ansible пишутся на YAML , что позволяет создавать сложные сценарии проще, чем другими инструментами этой же категории.
Ansible не требует установки специального ПО на управляемые хосты – доступ осуществляется по стандартному протоколу SSH. Установить Ansible нужно только на хост, с которого будет происходить управление другими хостами.
Ansible предоставляет следующие базовые функции:
- Идемпотентность. Ansible отслеживает состояние ресурсов в целевых управляемых системах для исключения повторения задач, которые уже были выполнены. Пример: если требуемый пакет уже установлен в системе, Ansible не будет пытаться установить его. Основная цель Ansible состоит в том, чтобы система достигала/сохраняла желаемое состояние, даже если процесс запускается несколько раз. При запуске плейбука выдается отчет о состоянии каждой задачи и статус внесла ли задача изменение в системе;
- Переменные, условные выражения и циклы. При составлении сценария автоматизации можно использовать переменные, условные выражения и циклы. Это позволяет сделать автоматизацию более универсальной и эффективной;
- Факты о системе. Ansible собирает подробную информацию об управляемых нодах и предоставляет ее в виде глобальных переменных. Собранные факты можно использовать в плейбуках;
- Шаблонизация. В качестве системы шаблонов Ansible использует Jinja2 Python. Шаблоны упрощают параметризацию конфигурационных файлов. Например: вы можете создать шаблон для настройки демона SSH и применить его на нескольких серверах, повесив на разные порты в зависимости от заданных переменных;
- Поддержка модулей и плагинов. В поставку Ansible включено множество встроенных модулей, а это значительно упрощает написание общих задач (установка пакетов через
apt/yum), работу с распростаненным ПО (MySQL, PostgreSQL, MongoDB, etc) и управление зависимостями (composer, npm, etc). Если в стандартной поставке Ansible не нашлось нужного модуля, вы всегда можете написать свой на Python;
Основные понятия Ansible#
Пробежимся по основным терминам Ansible:
- Главная/Управляющая нода (Control Node) – это сервер, на который устанавливается Ansible и с которого выполняется подключение ко всем конфигурируемым хостам. В качестве главной ноды можно настроить любую систему, которая способна запускать Ansible – выделенный сервер, ПК или ноутбук с Linux/Unix на борту. На текущий момент Ansible не работает на Windows, но это обходится запуском виртуальной машины и запуском Ansible оттуда;
- Управляемые ноды (Managed Nodes) – это серверы, которыми вы будете управлять с помощью Ansible. Для Ansible требуется, чтобы целевые хосты были доступны по SSH и чтобы на них был Python (Python 2 уже EOL, актуальные
ansible-core2.16+ требуют Python ≥ 3.7 на управляемой ноде и Python ≥ 3.10 на control node). Управлять Ansible может Linux/Unix и Windows; - Файл инвентаря или инвентарь (Inventory) – это файл со списком хостов, которыми планируется управлять. По умолчанию Ansible создает файл инвентаря тут
/etc/ansible/hosts, но рекомендуется создавать файл инвентаря для каждого проекта. Инвентарь может быть как статический (файл.ini/.yml), так и динамически генерируемый; - Задача в Ansible (Tasks) – это единица действий в Ansible, которая выполняется на управляемом хосте. Упрощая: каждое действие определяется как задача. Задачи можно выполнять единожды с помощью специальных параметров, а так же включать задачи в плейбук как часть сценария автоматизации;
- Плейбук (Playbook) – это YAML-файл, содержащий упорядоченный список задач, а так же других параметров: на каких хостах выполнять автоматизацию, нужно ли использовать повышение привилегий для выполнения задач, определения переменных или включения дополнительных файлов. Выполнение задач происходит последовательно, а полное выполнение плейбука называется плей (play);
- Обработчики/Хендлеры (Handlers) – используются для выполнения действий с сервисами (для перезапуска и остановки). Хендлеры запускаются задачами и их выполнение происходит в конце плея, после того как все задачи были выполнены. Если перезапуск какого-то сервиса будет инициироваться несколькими задачами, то сервис перезапустится только один раз после выполнения всех задач. Хендлеры по умолчанию имеют эффективным и более практичным, а при необходимости можно принудительно немедленно запустить обработчик;
- Роль (Roles) – это набор плейбуков/задач, связанных файлов, организованных в предопределенную структуру. Роли позволяет переиспользовать плейбуки в пакеты/библиотеки например для установки базового ПО , настройка Timesyncd .
Что изменилось к 2026#
Пост написан в конце 2020-го, тогда ansible был одним монолитным пакетом. С тех пор экосистема перестроилась — короткий пересказ того, что нужно знать сейчас.
ansible-core vs ansible#
В 2.10 (октябрь 2020) проект разделился на два пакета:
ansible-core— сам движок: парсер плейбуков, базовые модули (copy,template,command,file,service,packageи компания),ansible-playbook/ansible-galaxy/ansible-doc/ansible-vault. Около 70 модулей.ansible— это «батарейки»:ansible-core+ большой набор коллекций сообщества. Сотни модулей для AWS, Azure, GCP, Kubernetes, сетевых вендоров и так далее.
Что устанавливать:
# минимум для своей автоматизации
pipx install ansible-core
# полный комплект с батарейками
pipx install ansibleКоллекции (Collections) как первый класс#
Раньше модули жили монолитом, и одна оплошность в каком-нибудь cloud.aws.s3_bucket блокировала релиз всего ansible. Сейчас всё распределено по коллекциям
— самодостаточным пакетам модулей и плагинов, которые версионируются отдельно. Ставятся через:
ansible-galaxy collection install community.postgresql
ansible-galaxy collection install kubernetes.core
ansible-galaxy collection install ansible.posixВ плейбуках имена модулей теперь fully-qualified (FQCN):
- name: Install PostgreSQL
ansible.builtin.package:
name: postgresql
state: present
- name: Create DB
community.postgresql.postgresql_db:
name: app
state: presentКороткие имена (package без ansible.builtin.) ещё работают, но deprecated — линтер ругается.
ansible-lint и molecule#
Без этих двух тулов в 2026-м серьёзный проект на Ansible выглядит легкомысленно:
- ansible-lint — статический анализатор. Ловит deprecated-синтаксис, нарушения best practices, прогоняется в pre-commit и в CI.
- molecule — тест-фреймворк для ролей. Поднимает контейнеры/виртуалки, прогоняет плейбук, проверяет идемпотентность, валидирует результат через assert’ы. Без него — у тебя нет уверенности, что роль ещё работает.
Базовая структура с linter в pre-commit и molecule в tests/ — это новый минимум для роли, которую планируешь хоть как-то поддерживать.
Место Ansible рядом с Terraform/Pulumi#
Часто слышу: «нам надо Ansible или Terraform?». Это разные инструменты:
- Terraform / OpenTofu / Pulumi — про создание/удаление инфраструктуры (cloud-ресурсы, виртуалки, сети, балансировщики). Declarative, state-driven.
- Ansible — про конфигурирование уже существующих машин: установка пакетов, накатывание конфигов, перезапуск сервисов, оркестрация деплоев.
В зрелой DevOps-команде они стоят рядом и решают разные задачи: Terraform строит инстансы, Ansible их настраивает. Иногда границу размывают (cloud-init, packer, ansible-modules для AWS), но базово — это два разных слоя стека.
TL;DR апдейта#
Если ты только начинаешь — ставь ansible-core + нужные коллекции под себя. Привыкай сразу к FQCN в плейбуках. Добавь ansible-lint в pre-commit с первого дня. Если делаешь роли, которые будешь поддерживать — обвяжись molecule. И не путай Ansible с Terraform: первый настраивает машины, второй их создаёт.
Заключение#
Ansible – это довольно простой инструмент для автоматизации рутинных задач. Благодаря комьюнити он имеет огромное количество модулей. Простые требования к инфраструктуре и легкость восприятия синтаксиса позволяют легко начать знакомиться с управлением конфигурациями.
Если у тебя есть вопросы, комментарии и/или замечания – заходи в чат , а так же подписывайся на канал .
О способах отблагодарить автора можно почитать на странице “Донаты ”.