Ansible — инструмент автоматизации ИТ-инфраструктуры¶
Ansible — это инструмент автоматизации развёртывания, управления конфигурацией и оркестровки компьютерных систем с открытым исходным кодом. Ansible работает по модели push (отправки команд на управляемые узлы) и использует SSH для взаимодействия с целевыми серверами, что избавляет от необходимости устанавливать агентов на управляемые машины. Инструмент написан на языке Python и создан Майклом ДеВером (Michael DeHaan) в 2012 году; в 2015 году проект приобрела компания Red Hat.
¶Общие сведения
Ansible относится к классу инструментов инфраструктуры как кода (Infrastructure as Code, IaC) и конфигурации как кода. Основная идея — описывать желаемое состояние систем в декларативных файлах, а Ansible сам вычисляет и применяет необходимые изменения. Инструмент кроссплатформенный: поддерживает Linux, Windows, macOS, сетевые устройства и облачные среды.
Ключевые особенности:
- Агентная модель отсутствует. Управляемые узлы не требуют установки дополнительного ПО — достаточно SSH-доступа (для Windows используется WinRM).
- Декларативность. Playbook описывает конечное состояние, а не последовательность команд.
- Идемпотентность. Повторный запуск одного и того же playbook даёт тот же результат и не приводит к нежелательным изменениям.
- Простота синтаксиса. Конфигурации пишутся в YAML, что делает их читаемыми даже для не-программистов.
¶Архитектура
¶Управляющий узел и инвентарь
Ansible выполняется с управляющего узла (control node), на котором установлен интерфейс командной строки ansible или ansible-playbook. Целевые машины описываются в файле инвентаря (inventory) — простом текстовом файле в формате INI или YAML, где перечислены IP-адреса или доменные имена серверов, сгруппированные по ролям (например, webservers, dbservers).
¶Playbook
Playbook — основной рабочий документ Ansible, YAML-файл, описывающий серию задач (tasks) для одной или нескольких групп хостов. Каждая задача вызывает модуль — отдельную единицу логики, выполняющую конкретное действие (установка пакета, копирование файла, запуск команды, изменение параметров конфигурации).
Пример минимального playbook:
```yaml
- hosts: webservers
become: yes tasks:
- name: Установить nginx
apt: name: nginx state: present
- name: Запустить nginx
service: name: nginx state: started ```
¶Роли
Для структурирования сложных проектов используются роли (roles) — упакованные блоки playbook с заранее определённой структурой каталогов (задачи, шаблоны, файлы, переменные, обработчики). Роли позволяют переиспользовать логику между проектами и делегировать управление разными компонентами инфраструктуры разным командам.
¶Модуля
Модуль — атомарная единица работы Ansible. В стандартной поставке (ansible-core) их более тысячи: управление пакетами (apt, yum, dnf), файлами (copy, template, file), сервисами (service, systemd), пользователями (user, group), сетевыми настройками и многим другим. Модули написаны на Python и выполняются на целевом узле, результат возвращается управляющему узлу в формате JSON.
¶Ansible Galaxy и коллекции
Ansible Galaxy — публичный репозиторий готовых ролей и коллекций (collections), созданных сообществом и вендорами. Коллекции — более новый формат упаковки, объединяющий модули, плагины, роли и playbooks в единый пакет. Официальные коллекции выпускаются для управления продуктами Amazon Web Services, Microsoft Azure, Google Cloud, Cisco, NetApp, VMware и других вендоров.
¶Ansible Tower и AWX
Для организаций, которым требуется веб-интерфейс, RBAC-разграничение прав, журналы запусков и интеграция с ITSM-системами, Red Hat выпускает коммерческий продукт Ansible Tower (с 2019 года — Red Hat Ansible Automation Platform). Открытая версия — AWX, доступная на GitHub под лицензией Apache 2.0. Оба продукта добавляют к возможностям Ansible REST API, очередь задач, шаблоны запуска и управление учётными данными.
¶Применение
Ansible применяется в нескольких основных сценариях:
- Конфигурация серверов — массовое разворачивание одинаковой конфигурации на десятки и сотни хостов.
- Развёртывание приложений — деплой артефактов, миграции баз данных, перезапуск сервисов.
- Оркестровка — управление взаимодействием нескольких систем как единого целого (например, развёртывание трёхузловой кластерной инсталляции).
- Облачная автоматизация — создание и удаление инстансов в AWS, Azure, GCP, OpenStack.
- Сетевая автоматизация — управление коммутаторами, маршрутизаторами и брандмауэрами через специализированные модули.
- Compliance и аудит — проверка соответствия систем политикам безопасности, сбор отчётов.
¶Отличия от альтернатив
В отличие от Puppet и Chef, использующих агентов на целевых узлах и модель pull, Ansible работает по модели push и не требует демона на управляемых машинах. В отличие от SaltStack, который также поддерживает push-модель, Ansible изначально делает упор на простоту YAML-синтаксиса и отсутствие дополнительных компонентов инфраструктуры (мастер-сервер, база данных).
¶Лицензия и сообщество
Ansible распространяется под лицензией GPLv3. Проект развивается на GitHub, где размещён исходный код ansible-core. Сообщество публикует документацию, участвует в разработке модулей и ролей, проводит ежегодную конференцию AnsibleFest.
Источники:
- Документация проекта Ansible (docs.ansible.com)
- Репозиторий проекта на GitHub (github.com/ansible/ansible)
- Red Hat Ansible Automation Platform — официальная документация
- Ansible Galaxy (galaxy.ansible.com)
