Ansible — инструмент автоматизации IT-инфраструктуры без агентов (agentless). Управляет конфигурацией серверов, деплоем приложений и оркестрацией задач через SSH. Конфигурация описывается в YAML-файлах (playbooks), что делает её читаемой и версионируемой в Git.
Как работает
Ansible подключается к серверам по SSH от управляющего хоста, передаёт и выполняет Python-модули, удаляет следы выполнения. Не требует установки агента на управляемых хостах. Inventory-файл содержит список серверов и группы. Playbook — последовательность «plays», каждый play применяет набор tasks к группе хостов.
# inventory.yml
all:
children:
webservers:
hosts:
web01.example.com:
web02.example.com:
databases:
hosts:
db01.example.com:
# playbook.yml
- name: Configure web servers
hosts: webservers
become: yes
tasks:
- name: Install Nginx
apt:
name: nginx
state: present
update_cache: yes
- name: Start Nginx
service:
name: nginx
state: started
enabled: yes
История
Ansible создан Майклом Де Хааном (Michael DeHaan) в 2012 году. Название взято из романа Урсулы Ле Гуин «Рококо» — устройство для мгновенной связи. Red Hat поглотила Ansible в 2015 году за $150 млн. IBM поглотила Red Hat в 2019 году за $34 млрд — Ansible стал частью IBM. AWX (Tower) — enterprise-версия с веб-GUI, RBAC, API. AWX open-source, Ansible Automation Platform — коммерческая версия.
Ключевые концепции
Idempotency — повторное выполнение playbook не меняет состояние, если оно уже соответствует желаемому. apt: state=present не переустановит пакет если он уже установлен. Roles — переиспользуемые наборы tasks, handlers, variables и templates. Ansible Galaxy — реестр community roles: ansible-galaxy install geerlingguy.nginx. Vault — шифрование секретов прямо в playbooks: ansible-vault encrypt_string 'dbpassword'.
Ansible vs Chef vs Puppet
Ansible agentless и YAML-based — самый низкий порог входа. Chef и Puppet требуют агентов и используют Ruby DSL. Для команд без опыта в Ruby Ansible предпочтителен. Chef лучше для сложных conditional-логик. Puppet — декларативная модель, идеальна для enterprise с тысячами серверов.
На что обращать внимание
Ansible медленен при управлении сотнями серверов: каждая задача — отдельное SSH-соединение. pipelining = True в ansible.cfg и ControlMaster SSH ускоряют выполнение. Для параллельного выполнения: -f 20 (20 форков). Ansible не управляет своим состоянием — нет «drift detection» из коробки (в Puppet/Chef есть). Используйте CI/CD для регулярного запуска playbooks и проверки drift.
Практическое применение Ansible на хостинге
Ansible решает проблему ручного управления парком серверов. Когда серверов 5 и больше, ручная конфигурация становится источником ошибок и несогласованности. Ansible позволяет описать желаемое состояние сервера в YAML-плейбуке и применить его ко всем хостам одновременно.
Типичные задачи: установка и настройка Nginx, деплой приложения из Git, настройка firewall, ротация SSH-ключей, обновление пакетов. Плейбук запускается командой ansible-playbook -i inventory.ini deploy.yml. Inventory-файл содержит список серверов с группами: [webservers], [databases], [monitoring].
Ansible Galaxy — публичный репозиторий готовых ролей. Роль geerlingguy.nginx или geerlingguy.mysql устанавливает и конфигурирует сервис за минуты без написания кода. Это ускоряет онбординг новых серверов и стандартизирует конфигурации.
В отличие от Chef, Ansible не требует агента на управляемых серверах — работает через SSH. Это упрощает начало работы: достаточно SSH-доступа и Python на целевом хосте. Для CI/CD Ansible нередко встраивается в пайплайн: после сборки артефакта Jenkins или GitLab CI вызывает Ansible для деплоя на целевые серверы.