Система управления конфигурациями Ansible автоматизирует поставку программного обеспечения, управление конфигурацией и развёртывание приложений.
Ansible является инструментом без агента, который работает, соединяя несколько узлов вместе и выполняя модули посредством ssh-соединения. Впоследствии модули будут удалены в целях оптимизации памяти после их выполнения.
Архитектура Ansible проста для понимания. Существует механизм автоматизации, напрямую взаимодействующий с пользователем, пишущим playbooks и выполняющим их. Также он способен взаимодействовать со службами, размещенными в облаке, с помощью инструментов управления конфигурациями или базами данных [1].
Использование системы управления конфигурациями в значительной степени оптимизирует процессы управления и настройки серверного и сетевого оборудования в производственном процессе, так как предоставляет возможность развертывания настроек и программного обеспечения одновременно на большом количестве серверов и сетевых узлов, что снижает временные затраты и повышает эффективность процессов установки и конфигурирования в новой среде [2].
За действия, выполняемые Ansible, отвечают модули. Большое количество модулей (библиотека модулей) устанавливается наряду с установкой Ansible. Каждый из этих модулей призван отвечать за отдельную небольшую задачу.
Модули могут выполняться отдельно, либо их можно собрать в конкретный сценарий (play), а затем в высокоуровневый сценарий конфигурирования playbook.
При вызове модуля, как правило, ему необходимо присвоить аргументы. Некоторые из них могут управлять параметрами и поведением модуля, другие – передавать команду, необходимую для выполнения.
Модули Ansible используются в playbook – высокоуровневых сценариях, которые пишутся на языке YAML. Но собственные модули могут быть написаны практически на любом языке разработки.
По умолчанию Ansible содержит в себе расширенный API для Python – так называемые shortcuts. В ходе разработки собственных модулей на других языках программирования необходимо пользоваться вспомогательными библиотеками, родными для каждого языка, в целях симплификации процесса разработки и интеграции в Ansible.
Ansible-модули являются независимыми блоками программного кода, или скриптами, которые выполняют простейшие задачи. Модули Ansible неспособны зависеть друг от друга, либо вызывать другие модули. Задачей в Ansible является конструкция в виде сценария, вызывающего модули с конкретными заданными параметрами.
Входные параметры модуля передаются в виде пар «ключ=значение». В ходе разработки модулей необходимо анализировать параметры с целью выявления данных и их присваивания конкретным переменным, чтобы впоследствии использовать их в коде модуля. Различные языки разработки имеют вспомогательные средства для решения такой задачи.
Вышеуказанный расширенный API для Python позволяется в автоматическом режиме определять типы входных параметров, анализировать их и осуществлять их проверку, определять значения по умолчанию, и т.п.
Модули Ansible всегда возвращают результат в виде строки JavaScriptObjectNotation (JSON), поэтому, при наличии структурированных выходных данных их легко преобразовать в переменные и обработать в playbooksAnsible [3].
Как правило, модули Ansible идемпотентны: их можно выполнять бесчисленное количество раз, причем они будут вносить изменения в систему только тогда, когда она не пребывает в нужном состоянии.
Существует более двухсот модулей, используемых в Ansible для настройки IT-инфраструктуры (command, shell, script, raw, file, copy, cron, template и др.) Они разделяются на категории по критерию их поддержки:
сore – модули, поддерживаемые основной командой разработчиков Ansible;
network – поддерживается Ansible Network Team;
community – поддерживается сообществом Ansible;
certified – поддерживается партнерами Ansible.
Модули Ansible являются небольшими программами, которые загружаются, выполняются и удаляются по завершении из системы с помощью Ansible. Они несут в себе конкретную задачу и обеспечивают выполнение определенных функций. Такими функциями являются обработка проверки системы в целях определения соответствия состояния системы состоянию, запрошенному пользователем, а также приведение системы к этому состоянию при необходимости. К тому же модули предоставляют пользователю согласованный метод описания ожидаемого состояния системы.
Список использованных источников
Савватеев М.Е., Селезнева А.М. Возможности систем управления конфигурациями при развертывании и настройке почтовой системы в рамках деятельности образовательной организации // Национальная научно-практическая конференция с международным участием «Университет на пути к новому качеству науки и образования», 2020. 5 с.
Селезнева А.М. К вопросу о выборе системы управления конфигурациями для развертывания сервера организации // Ученые записки Брянского государственного университета, 2020 (2). С. 25-27.
McKendrick R. Learn Ansible. Automate cloud, security, and network infrastructure using Ansible 2.x. Packt Publishing, 2018. 572 p.