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

Edit...
work
Illustrated by Igan Pol

Привет, %username%! На страницах этого блога уже было небольшое упоминание Ansible – инструмента для управления конфигурацией. Пройдемся по основам, определениям дабы зафиксировать.

🔄 Обновлено 2026-05-15: проставил актуальные требования к Python, поправил пакет (ansibleansible-core после split’а в 2.10) и в конец добавил блок «Что изменилось к 2026» — про коллекции, ansible-lint, molecule и место Ansible рядом с Terraform/Pulumi.

Управления конфигурацией#

Пробежавшись по различным ресурсам в интернете можно прийти к следующему определению:

Управление конфигурацией (Configuration Management / CM) – это автоматизированный процесс внесения изменений в систему, который обеспечивает целостность конфигураций.

CM часто вспоминают в контексте автоматизации каких-либо рутинных задач/процессов. Например: как только у вас появляется несколько одинаковых серверов, вам жизненно необходимо начать работать с CM системами дабы исключить человеческий фактор из процесса конфигурирования одинаковых систем. Человек белковый может допустить очепятку, а машина железная – нет.

Посмотрим на преимущества инструментов CM для автоматизации настройки инфраструктуры и на то, как работает Ansible.

Преимущества использования инструментов CM#

Для управления конфигурацией существует некоторое количество инструментов с различными уровнями сложности и архитектурными стилями:

ToolReleased byMethodApproachWritten in
ChefChef (2009)PullDeclarative and imperativeRuby
OtterInedoPushDeclarative and imperative-
PuppetPuppet (2005)PullDeclarativeC++ & Clojure since 4.0, Ruby
SaltStackSaltStackPush and PullDeclarative and imperativePython
CFEngineCFEnginePullDeclarativeC
TerraformHashiCorp (2014)PushDeclarativeGo
DSCMicrosoftPush/PullDeclarative/ImperativePowerShell
Ansible / Ansible TowerRedHat (2012)PushDeclarative and imperativePython

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

Ключевые преимущества 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-core 2.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 – это довольно простой инструмент для автоматизации рутинных задач. Благодаря комьюнити он имеет огромное количество модулей. Простые требования к инфраструктуре и легкость восприятия синтаксиса позволяют легко начать знакомиться с управлением конфигурациями.


Если у тебя есть вопросы, комментарии и/или замечания – заходи в чат , а так же подписывайся на канал .

О способах отблагодарить автора можно почитать на странице “Донаты ”.