Что такое Ansible

Что такое Ansible

Что такое Ansible? В первую очередь это инструмент автоматизации. Если более научно, то Ansible — система управления конфигурациями. На данный момент инструмент принадлежит Red Hat Enterprise, официальный сайт.

Назначение ansible
  • автоматизация процесса подготовки серверов;
  • разворачивание сервисов с заранее описанной конфигурацией;
  • внесение изменений в конфигурации;
  • управление сервисами;
  • управление большим количеством узлов.
Идемпотентность в ansible

Основной принцип, которого придерживается ansible, это идемпотентность. Что же такое идемпотентность? Это возможность повторения выполнения одних и тех же шагов без изменения состояния системы. Например, для создания папки используется команда:

# mkdir testDir

В случае повторного запуска этой команды появится ошибка

# mkdir testDir
mkdir: невозможно создать каталог «testDir»: Файл существует

Что сделает Ansible? Перед созданием папки проверит, существует ли папка с таким именем. Если существует, то скажет, что папка уже существует и выполнять нечего. Если папки нет, то создаст ее. И так практически со всеми официальными модулями (кроме нескольких). Ещё один пример — создание файла из шаблона, например, конфигурационного файла nginx. Сначала ansible создаст файл из шаблона в памяти, посчитает хэш полученного файла и сравнит с файлом назначения (если он существует). Далее логика та же, что и при создании папки: если одинаковы, ничего не делает, если отличается, то поменяет. Кстати, может показать, что конкретно отличается. Для этого используется ключ —diff при запуске playbook.

Не стоит забывать, что ansible — модульный инструмент, и модули могут не поддерживать идемпотентность. К последним относятся, например, такие модули как command или shell. Кроме того, много модулей разрабатывается комьюнити, и не факт, что тот, кто писал модуль, заложил в него идемпотентность.

Приктический пример

Например, у вас на поддержке 500 линукс серверов. В определенный момент появляется некий человек из информационной безопасности и говорит, что на всех серверах должен быть установлен антивирус. Кстати, конкретную реализацию этого кейса можно почитать в серии статей по внедрению антивируса (статьи в работе, ссылку добавлю после публикации). Все риски по возможной недоступности сервисов он берет на себя. Если представить, что на установку на одном сервере с учетом подключения по ssh, скачивания дистрибутива и установки будет уходить ~10 мин, то получим 5000 мин, а это 83 часа. Восемьдесят три часа рутинной работы — что может быть хуже?!

Тут вам может помочь ansible. Что нужно сделать, чтобы получить результат:

  • Написать роль, которая будет выполнять желаемые действия. О том, как создать проект, можно прочитать в статье про проект на ansible;
  • Подготовить окружение для тестовой группы;
  • Проверить роль на тестовой группе;
  • Подготовить окружение для серверов в промышленной эксплуатации;
  • Запустить роль на сервера промышленной эксплуатации. В зависимости от степени паранои, можно запустить на все сервера сразу, или запускать на группы от 5 до N серверов;

Что значит подготовить окружение? Это значит создать для каждого сервера список параметров, который потребуется для выполнения роли:

  • ip адрес сервера и порт ssh для подключения;
  • ssh логин и пароль, в случае если не используется ssh ключ;
  • переменные, которые используются внутри playbook. Про переменные можно прочитать в статье переменные в аnsible.

На создание окружения, конечно, будет потрачено немало времени, но плюс в том, что это нужно сделать всего один раз, а ролей можно написать много. Что касается написания самого playbook, тут все зависит от опыта и понимания процесса, который нужно автоматизировать. По своему опыту скажу, от момента, когда я впервые увидел ansible и до написания первой роли прошло около недели. Автоматизировал резервное копирование IBM WebSphere.

Заключение

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