Краткое пособие по Ansible
Ansible – программное обеспечение с открытым исходным кодом, которое используют для автоматизации цикла доставки программного кода. Ansible автоматизирует управление конфигурацией и развертыванием приложений. Среди основных особенностей программы такие характеристики:
- Работает без агентов (нет ПО или агента, который связывает с сервером)
- Идемпотентность (результат не зависит от количества запросов на операцию)
- Простота и расширяемость (программа написана на Python, а для команд использует YAML).
Ниже приводим краткий Ansible tutorial, который поможет разобраться с основными понятиями и настройками программы. Более подробную информацию можно найти в Ansible documentation.

Ansible установка
Ключевая особенность Ansible – при установке программа не добавляет никаких баз данных или агентов. ПО можно установить на одной машине, которая будет управлять всем ваши парком устройств по SSH протоколу через Ansible SSH keys. При этом установка Ansible не касается других устройств. При переходе на новую версию программа обновляется только в центральной точке управления.
Как устанавливаем и запускаем Ansible на Ubuntu и Mac OS? Через следующие команды:
# ubuntu: sudo apt-get install ansible
#mac-OS: brew install ansible
Ansible настройка
Настройки можно менять с помощью конфигурационного Ansible file (ansible.cfg), но это касается не всех настроек. Стандартной конфигурации достаточно в большинстве случаев. Как получить последнюю версию программы? В момент установки найдите ini-файл ansible.cfg – он может находиться в /etc/ansible (в виде .rpmnew или другого Ansible file).
Настройки конфигурации включают Ansible скрипты автоматизации, настройки командной строки, Ansible переменные среды, playbook, Ansible роли и др. Для интеллектуального анализа данных можно настроить Ansible cron jobs на разных серверах. В настройках по умолчанию программа подключается к удаленным устройствам от имени пользователя на главной (управляющей) машине. Чтобы добавить нового пользователя (Ansible add user), можно установить подключение пользователя в плейбук:

- name: update webservers
hosts: webservers
remote_user: admin
tasks:
- name: thing to do first in this playbook
Также есть возможность сделать это через переменные Ansible variables (в Ansible inventory):
other1.example.com ansible_connection=ssh ansible_user=myuser
other2.example.com ansible_connection=ssh ansible_user=myotheruser
или группу переменных (также в Ansible inventory):
cloud:
hosts:
cloud1: my_backup.cloud.com
cloud2: my_backup2.cloud.com
vars:
ansible_user: admin
Ansible Modules
Чтобы добавить в программу локальную функцию можно использовать Ansible Modules. Это автономные скрипты, которые могут использоваться Ansible API, командой ansible и через ansible-playbook. Например, модули Ansible AWS для работы с Amazon Web Services. Модули Ansible принимают аргументы, а информацию возвращают в Ansible через строку JSON (stdout перед выходом). Модули представляют собой определенный интерфейс и выполняются в отдельных процессах целевой системы.

Модуль Ansible Debug
Опция Ansible debug module облегчает управление задачами в программе.
Это удобный инструмент для устранения ошибок в процессе работы. Опция позволяет редактировать playbook и отлаживать задачи в режиме реального времени. Не нужно вносить изменения в playbook и делать перезапуск, чтобы изменения сохранились.
Доступ к функциям Ansible debugger есть в контексте задачи. Можно изменить значения Ansible variables, обновить аргументы и запустить задачу с новыми данными. Debugger устраняет ошибку в реальном времени без остановки выполнения playbook.
Параметр Ansible register
В типовых сценариях Ansible пригодится набор модулей Ansible command, с помощью которых программа запускает команды на оборудовании внутри инфраструктуры. Работает Ansible command так, как будто пользователь выводит команды на консоли. Для вывода команд используются разные параметры, например, Ansible register. Это ключевое слово дает возможность создавать Ansible variables на выходе задачи. Позже, в других задачах, можно использовать уже зарегистрированные переменные (например, output).
Модуль Ansible Debug
Опция Ansible debug module облегчает управление задачами в программе. Это удобный инструмент для устранения ошибок в процессе работы. Опция позволяет редактировать playbook и отлаживать задачи в режиме реального времени. Не нужно вносить изменения в playbook и делать перезапуск, чтобы изменения сохранились. Доступ к функциям Ansible debugger есть в контексте задачи. Можно изменить значения Ansible variables, обновить аргументы и запустить задачу с новыми данными. Debugger устраняет ошибку в реальном времени без остановки выполнения playbook.
Ansible Create Directory
Действие Ansible Create Directory понадобиться для создания директорий или папок на многих этапах процессов DevOps. Хоть директории можно создавать через оболочку или командный модуль, в Ansible используется более надежный и простой способ – file module. Чтобы создать директорию с помощью этого модуля, нужно настроить два параметра: Path и State. Path – это путь директории, а State – и есть директория (значение по умолчанию – файл). Можно настраивать доступы, но файлы внутри папки будут иметь параметры по умолчанию. Есть возможность менять доступы к директории и, соответственно, файлам внутри.

Совместимость Ansible Docker, Jenkins, Terraform, PostgreSQL
Программное обеспечение Ansible рассчитано на работу в паре Ansible Docker, а также с Jenkins, Terraform и PostgreSQL. Для управления контейнерами в Docker предусмотрены следующие модули:
- docker_compose (управление контейнерами на одном докер-демоне или на Swarm)
- docker_container (управление жизненным циклом контейнеров)
- docker_image (работа с образами)
- docker_image_info (анализ образов для передачи информации в playbook)
- docker_login (аутентификация с Docker Hub или Docker registry, обновление файла Docker Engine config)
- docker (dynamic inventory) (динамическое создание директории из доступных контейнеров)
С помощью ansible-bender можно билдить образы из Ansible playbooks. Ansible Operator запускает docker-compose file в OpenShift.
В связке Ansible и Jenkins, с помощью Playbook, можно настроить конфигурацию Jenkins. Для этого нужно создать inventory file, который определяет список хостов и настройки аутентификации для каждого сервера. Файл может быть в одном из множества форматов, в зависимости от плагинов. Для реализации ansible-playbook в Jenkins используются два способа: shell/bash script и плагин Ansible.
С помощью Terraform и Ansible можно строить повторяющуюся инфраструктуру, что очень помогает в подходе Infrastructure as a Code. В Ansible нет плагина для Terraform, но настроить рабочую пару Terraform Ansible можно с помощью встроенных провайдеров local-exec and remote-exec. В данном случае Terraform отвечает за создание, управление и манипуляцию ресурсами инфраструктуры. Ansible – за деплой и тестирование приложения на инстансах.
Доступна поддержка Ansible PostgreSQL, которая помогает работать с базой в окружении с высокой нагрузкой. Ansible дает возможность отслеживать этапы работы с помощью все тех же Playbooks.
Управление конфигурацией Ansible на Windows
Встроенная поддержка Windows в Ansible использует PowerShell для управления Windows непосредственно как Windows. Этот принцип напоминает базовую характеристику Ansible – работу без агентов. Встроенная поддержка Ansible Windows позволяет:
- Собирать данные с хостов Windows
- Устанавливать и деинсталлировать MSI
- Активировать и деактивировать характеристики
- Управлять службами Windows
- Создавать и управлять локальными пользователями и группами
- Управлять обновлениями
- Выполнять любые сценарии PowerShell
Благодаря масштабируемости Ansible есть возможность писать собственные модули в PowerShell, расширяя возможности программы.
Чтобы запустить Ansible, установите программное обеспечение на главной (управляющей) машине. Объекты управления должны быть расположены вблизи центрального устройства, например, внутри облака. Для Ubuntu и Mac OS необходимо выполнить определенные команды:
# ubuntu
sudo apt-get install ansible
#mac-OS
brew install ansible
На Windows работа выполняется через PowerShell. Для запуска откройте PowerShell в роли админа и выполните команду:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
В работе Ansible с разными системами, конечно, есть много фундаментальных отличий. Но они вполне постижимы в процессе работы.
Ansible используют системные администраторы и разработчики для управления узлами при работе с серверами и парком машин в инфраструктуре. Как система оркестрации Ansible полезна для автоматизации работы компьютеров и удобного управления программными компонентами. С помощью Ansible playbooks можно писать необходимые скрипты и легко управлять удаленными устройствами. Программа позволяет настраивать комплексные среды для передачи данных нескольким системам. Скрипты позволяют вносить изменения на регулярной основе, посылая скрипт с главной машины, без постоянной перезагрузки устройств.
Первоочередная задача DevOps – автоматизация процессов доставки кода, развертывания ПО и настройки серверов. Ansible используется в DevOps для автоматизации управления конфигурацией. Программа известна своей простотой и удобством работы. Работает с разными системами – Linux, MacOS, Windows, Win и другими. Поддерживает совместимость с облачными сервисами (AWS, Digital Ocean, Azure и др.). Ansible идеально подходит для реализации подхода DevOps, упрощая управление несколькими узлами с одной машины. Большая часть функций представлена в виде модулей, что упрощает написание кода и достижение целей DevOps.
Использовать Ansible однозначно стоит. Система используется для автоматизации конфигурации и развертывания приложений. В основном работает с узлами на Linux, но вполне подходит для других операционных систем. В Ansible применен декларативный язык разметки для описания конфигурации. Важное отличие Ansible от аналогов – система поддерживает связь с удаленными устройствами через SSH-протокол. Почему еще стоит использовать Ansible? Работа системы построена через систему модулей для выполнения задач. Модули лежат в основе масштабирования Ansible и расширения функционала. Благодаря этому программа является популярной системой оркестрации.
Ansible – относительно новый игрок в инструментарии DevOps, который успел завоевать расположение как системных администраторов, так и разработчиков. В сообществе систему ценят за простоту, легкость в изучении и широкие возможности. Изучать Ansible точно стоит, тем более, это довольно просто. Говорят, что разобраться с Ansible и запустить первый playbook можно за один день. Все это займет несколько несложных шагов (доступная документация Ansible вам в помощь), и вот вы уже запускаете первый мини-сервер. А еще Ansible написан на Python, что в разы облегчает его изучение.
Запустить Ansible локально можно с помощью функции playbook. Вот как можно запустить Ansible на локальном хосте:
# playbook.yml:
---
- name: "Ansible playbook example"
hosts: 127.0.0.1
connection: local
tasks:
- name: "Check out a Git repository on the Ansible host"
git:
repo: git://github.com/path/to/repo.git
dest: /local/path
Вот как запускать программу из command line:
$ ansible-playbook --connection=local 127.0.0.1, playbook.yml
Обратите внимание на запятую после 127.0.0.1 – она нужна, чтобы адрес не воспринимался как file name, что вызовет ошибку.
Playbook в Ansible используется для выполнения действий, адресованных к другим устройствам. Команда ansible-playbook запускает sample-playbook. yml файл. Необязательный аргумент -i нужен для того, чтобы показать путь к inventory file. Если опция -i не используется и не указана папка ansible.cfg, система автоматически использует /etc/ansible/hosts. Также в документации Ansible указан следующий способ запуска playbook:
ansible-playbook -i vyos.example.net, -u ansible -k -e ansible_network_os=vyos first_playbook.yml.
Чтобы провести тестирование подключения и узнать, запущен ли Ansible, можно использовать команду ansible all -m ping. Это поможет проверить возможность запуска команд и playbooks на узлах. Ping-модуль проверяет, существуют ли учетные записи пользователей, которые могут подключаться к узлам. Эти данные определены в inventory file. Также команда поможет проверить, готов ли Python запускать сценарии на удаленном сервере. Если получаете ответ pong, значит, система готова работать в нормальном режиме и выполнять команды.