Ansible — система управления конфигурациями, написанная на языке программирования Python, с использованием декларативного языка разметки для описания конфигураций. Применяется для автоматизации настройки и развёртывания программного обеспечения. Обычно используется для управления Linux-узлами, но Windows также поддерживается. Поддерживает работу с сетевыми устройствами, на которых установлен Python версии 2.4 и выше по SSH- или WinRM-соединению.
Автор платформы — Михаэль Дехан (Michael DeHaan), ранее разработавший серверную систему развёртывания программного обеспечения Cobbler и соавтор фреймворка удалённого администрирования Func.
Входит в состав большинства дистрибутивов Linux. Есть пакеты для Solaris, FreeBSD и macOS. Развитием и коммерциализацией платформы занималась компания Ansible, 16 октября 2015 года она была поглощена корпорацией Red Hat.
Наименование взято от вымышленной системы мгновенной гиперпространственной связи из фильма «Игра Эндера», слово, её обозначающее, в свою очередь, заимствовано из романа Урсулы Ле Гуин «Мир Роканнона» (1966).
Архитектура
Наряду с Chef, Puppet и SaltStack считается одной из наиболее популярных систем управления конфигурациями для Linux. Главное отличие Ansible от аналогов — не нужна установка агента или клиента на целевые системы.
Пользователь Ansible создаёт определённые сценарии («плейбуки», англ. playbooks) в формате YAML с описанием требуемых состояний управляемой системы. Сценарий — это описание состояния ресурсов системы, в котором она должна находиться в конкретный момент времени, включая установленные пакеты, запущенные службы, созданные файлы и многое другое. Ansible проверяет, что каждый из ресурсов системы находится в ожидаемом состоянии и пытается исправить состояние ресурса, если оно не соответствует ожидаемому.
Для выполнения задач используется система модулей. Каждая задача представляет собой имя задачи, используемый модуль и список параметров, характеризующих задачу. Система поддерживает переменные, фильтры обработки переменных (поддержка осуществляется библиотекой Jinja2), условное выполнение задач, параллелизацию, шаблоны файлов. Адреса и настройки целевых систем содержатся в файлах «инвентаря» (inventory). Поддерживается группирование. Для реализации набора сходных задач существует система ролей.
Ansible Tower
Ansible Tower — графический интерфейс для управления и мониторинга работы Ansible. Является платным продуктом, однако в 2017 году, после перехода активов в RedHat, исходные коды Tower были опубликованы под свободной лицензией Apache. Новый проект получил название AWX Project, который ныне является кодовой основой для коммерческого продукта Tower.
В продукте организована визуальная панель состояния, ведутся списки доступа, группы и роли пользователей, обеспечивается централизованное журналирование и аудит.
Модули
Категории модулей и выполняемые ими задачи:
- Cloud: поддержка Amazon EC2, S3, Azure, Cloudstack, Digital Ocean, Rackspace, а также средств контейнеризации (Docker, LXC) и виртуализации (OpenStack, VMware);
- Clustering: поддержка Consul, ZooKeeper, Kubernetes;
- Command: выполняют консольные команды и сценарии командной строки;
- Database: поддержка СУБД MySQL, PostgreSQL, Vertica, MongoDB, Redis, Riak;
- File: работа с файлами — копирование, синхронизация, модификация, проверка, архивирование;
- Inventory: работа с именами хостов или их IP-адресами;
- Messaging: поддержка RabbitMQ;
- Monitoring: поддержка систем мониторинга DataDog, Nagios, Zabbix и ряда других;
- Network: работа с сетевым оборудованием и ПО F5 BIG-IP, Cisco IOS/NXOS, Juniper JunOS, OpenSwitch, Cumulus Linux, Mikrotik RouterOS;
- Notification: отсылаются сообщения в Campfire, HipChat, Jabber, Pushbullet, Slack, через e-mail и SMS;
- Packaging: работа с менеджерами пакетов apt, FreeBSD Ports, Gentoo, homebrew, pacman, opkg, Red Hat software channels, yum, xbps, zypper;
- Source Control: работа с системами контроля версий git, mercurial, subversion;
- System: работа с компонентами Linux/Unix систем — cron, iptables, LVM, SELinux, sshd, ZFS;
- Utilities: реализуют внутреннюю логику сценариев;
- Web Infrastructure: работа с Apache, Django, JBoss, Jira;
- Windows: работа с компонентами Windows, в том числе IIS, Windows Firewall, реестром.