Утилиты#
Ansible предоставляет набор утилит командной строки, предназначенных для настройки и развертывания приложений, а также автоматизации задач на управляемых узлах.
ansible#
Утилита ansible предназначена для выполнения отдельных (ad-hoc) команд на одном или нескольких управляемых узлах без необходимости создания сценариев.
Запуск команд осуществляется удаленно, поэтому необходимо настроить управляемые узлы. На управляемых узлах не требуется установка Ansible или каких-либо специфических компонентов – достаточно доступного интерпретатора Python. На управляющем узле должен быть установлен Ansible Core.
Утилита ansible всегда требует указания целевых узлов (одного, группы или ключевого слова all), модуля (-m) и, при необходимости, аргументов к модулю (-a).
Утилита не сохраняет состояние и не определяет, выполнена ли уже та или иная операция.
Каждая команда выполняется однократно, без анализа предыдущих действий или зависимости между задачами.
По этой причине ansible не подходит для сложных конфигурационных изменений и не заменяет полноценные наборы сценариев.
Наиболее эффективно утилита используется для:
первичной настройки серверов;
диагностики и быстрой проверки инфраструктуры;
запуска операций из внешних скриптов;
отладки задач перед оформлением в виде сценария.
Примеры использования:
Установка утилиты htop на всех узлах
ansible all -m package -a "name=htop state=present" -b
Здесь:
all– цель команды: применить ко всем узлам из инвентарного файла;-m package– модульpackageавтоматически определяет подходящий пакетный менеджер в зависимости от дистрибутива;-a "name=htop state=present"– аргументы для модуля: установить пакетhtop, если он еще не установлен;-b– выполнение команды с повышенными привилегиями.
Перезапуск службы nginx на группе узлов web
ansible web -m systemd -a "name=nginx state=restarted enabled=yes" -b
Здесь:
web– название группы узлов, определенной в файле инвентаря;-m systemd– использование модуляsystemdдля управления системными службами;-a "name=nginx state=restarted enabled=yes"– название службы, требуемое состояние и параметр включения автоматического запуска;-b– выполнение команды с повышенными привилегиями.
Получение информации о времени работы всех управляемых узлов
ansible all -a "uptime" -u ansible -b
Здесь:
all– применение команды ко всем узлам;-a "uptime"– выполнение команды на управляемом узле;-u ansible– подключение с использованием учетной записиansible;-b– выполнение команды с повышенными привилегиями.
Копирование файла на целевые узлы
ansible app_servers -m ansible.builtin.copy -a "src=/opt/config.ini dest=/etc/myapp/config.ini mode=0644" -b
Здесь:
app_servers– группа узлов, на которые будет применена операция;-m ansible.builtin.copy– модуль для копирования файлов;src=/opt/config.ini– путь к локальному файлу;dest=/etc/myapp/config.ini– целевой путь на управляемом узле;mode=0644– установка права доступа;-b– выполнение команды с повышенными привилегиями.
Полный набор аргументов утилиты ansible представлен в справочнике.
ansible-config#
Утилита ansible-config позволяет работать с конфигурацией Ansible, определяя, какие параметры задействованы в текущем окружении, откуда они были загружены, и как можно изменить их поведение. Основное назначение этой утилиты – помощь в диагностике, настройке и отладке конфигурации Ansible.
Команда предоставляет несколько режимов работы.
Наиболее часто используется режим – dump.
Он позволяет вывести итоговые значения всех параметров Ansible вместе с указанием их происхождения, например, из переменной окружения, файла ansible.cfg, параметров CLI или встроенных значений по умолчанию.
Примеры использования:
Получение полной конфигурации с указанием источников параметров
ansible-config dump --only-changed
Здесь:
dump– режим отображения всех параметров Ansible;--only-changed– отображение только тех параметров, чьи значения были переопределены (отличаются от значений по умолчанию).
Проверка пути поиска конфигурационных файлов
ansible-config list
Здесь list – режим отображения всех возможных параметров и информации о том, где они могут быть заданы.
Поиск конкретного параметра конфигурации
ansible-config dump | grep DEFAULT_FORKS
Здесь:
DEFAULT_FORKS– название параметра, отвечающего за количество параллельных подключений;утилита
grepиспользуется для фильтрации вывода.
Проверка корректности файла конфигурации
ansible-config validate
Здесь validate – режим проверки синтаксиса и структуры текущего конфигурационного файла ansible.cfg.
Все параметры, которые обрабатываются ansible-config, соответствуют возможностям системы конфигурации Ansible и могут быть заданы в:
файле
ansible.cfg;переменных окружения;
параметрах командной строки;
переменных инвентаря и других источниках.
Последовательность обработки источников можно проследить через вывод ansible-config dump.
Полный набор аргументов утилиты ansible-config представлен в справочнике.
ansible-console#
Утилита ansible-console предоставляет интерактивную оболочку (REPL – Read-Eval-Print Loop) для управления инфраструктурой с помощью Ansible в режиме реального времени.
Эта утилита позволяет выполнять команды и модули на управляемых узлах, аналогично утилите ansible, но с возможностью пошагового взаимодействия.
Оболочка поддерживает автоматическое дополнение и сохранение истории команд.
Она может быть полезна на этапе отладки, при изучении поведения модулей и конфигурации, а также для обучения.
Однако ansible-console не предназначена для автоматизированного или воспроизводимого выполнения задач.
Работа с консолью начинается с запуска команды ansible-console.
После запуска пользователь попадает в интерактивный режим, где может выполнять команды в формате <цель> <модуль> <аргументы>.
В интерактивной сессии также доступны команды для смены инвентаря, переключения пользователя, задания переменных и выполнения произвольных shell-команд.
Примеры использования:
Запуск интерактивной консоли
ansible-console
Здесь:
запускается оболочка по умолчанию с использованием стандартного инвентаря;
по умолчанию цель команд –
all.
Установка пакета vim на группу серверов web (в интерактивной сессии)
web package name=vim state=present -b
Здесь:
web– название группы узлов;package– модуль установки пакетов;name=vim state=present– аргументы модуля, описывающие требуемое состояние;-b– выполнение команды с повышенными привилегиями.
Получение информации о всех узлах группы db (в интерактивной сессии)
db setup -b
Здесь:
setup– модуль, собирающий факты о системе;db– название целевой группы узлов;-b– выполнение команды с повышенными привилегиями.
Выполнение команды оболочки на всех узлах (в интерактивной сессии)
all command cmd='uptime' -b
Здесь:
command– модуль для выполнения системной команды;cmd='uptime'– команда для выполнения;-b– выполнение команды с повышенными привилегиями.
Полный набор аргументов утилиты ansible-console и команд оболочки представлен в справочнике.
ansible-doc#
Утилита ansible-doc используется для просмотра документации по расширениям, модулям (как тип расширения) и другим компонентам Ansible прямо из командной строки.
С ее помощью можно изучать доступные модули, просматривать документацию по их использованию, выявлять допустимые аргументы и значения по умолчанию, а также определять местоположение исходного кода каждого компонента.
Инструмент полезен при написании сценариев и отладке задач, чтобы быстро уточнить синтаксис модуля или назначение его параметров, не обращаясь к веб-документации.
При вызове ansible-doc без параметров открывается интерактивный просмотр с возможностью поиска и навигации по модулям.
Примеры использования:
Просмотр документации по модулю copy
ansible-doc copy
Здесь copy – название интересующего модуля.
Поиск модулей, содержащих ключевое слово file
ansible-doc -l | grep file
Здесь:
-l– список всех доступных модулей;grepиспользуется для фильтрации по ключевому слову.
Просмотр только параметров и их значений по умолчанию для модуля user
ansible-doc -s user
Здесь -s – вывод шаблона задачи с параметрами, допустимыми значениями и значениями по умолчанию.
Получение информации о подключаемом расширении типа strategy
ansible-doc -t strategy linear
Здесь:
-t strategy– указание типа компонента (в данном случае: стратегия выполнения задач);linear– название стратегии по умолчанию.
Получение пути к исходному файлу модуля
ansible-doc -F setup
Здесь -F – краткая форма вывода с указанием пути к Python-файлу с исходным кодом модуля.
С помощью ansible-doc можно также изучать пользовательские расширения, добавленные в проект через собственные коллекции или указанные пути.
Полный набор аргументов утилиты ansible-doc представлен в справочнике.
ansible-galaxy#
Утилита ansible-galaxy используется для управления переиспользуемыми компонентами автоматизации – ролями и коллекциями.
Это основной инструмент для установки, публикации и структурирования таких компонентов, а также для управления зависимостями в проектах Ansible.
Роли представляют собой компактные, изолированные блоки логики. Они включают в себя задачи, переменные, шаблоны, файлы и обработчики, сгруппированные в стандартной структуре каталогов. Роли позволяют переиспользовать сценарии автоматизации и делают сценарии более читаемыми и поддерживаемыми. Например, роль может описывать установку PostgreSQL, настройку NGINX или развертывание приложения.
Коллекции – это более крупные элементы, которые включают в себя не только роли, но и расширения, фильтры, документацию и тесты. Коллекции позволяют распространять и переиспользовать целые наборы функциональности как единое целое.
Утилита ansible-galaxy используется в следующих сценариях:
Установка зависимостей – установка ролей и коллекций, разработанных другими пользователями.
Фиксация зависимостей – фиксация версий ролей и коллекций в файле
requirements.ymlи установка зависимостей через него.Публикация собственных решений – разработка и публикация ролей и коллекций в общедоступные (Ansible Galaxy) или частные реестры (Private Automation Hub).
Шаблонизация – создание базовой структуры для роли или коллекции перед началом разработки, с соблюдением принятых стандартов.
Автоматизация CI/CD – управление зависимостями коллекций и ролей в рамках автоматизации.
Примеры использования:
Установка коллекции community.general
ansible-galaxy collection install community.general
Здесь:
collection install– команда для установки коллекции;community.general– название коллекции в формате<namespace>.<name>.
Установка зависимостей из requirements.yml
ansible-galaxy install -r requirements.yml
Здесь:
install– установка зависимостей (ролей и коллекций);-r requirements.yml– путь к файлу со списком зависимостей.
Пример requirements.yml:
collections:
- name: community.mysql
version: 3.7.0
roles:
- name: geerlingguy.nginx
version: 3.3.0
Здесь:
collectionsиroles– секции, определяющие, какие компоненты нужно загрузить;name– полное название роли или коллекции;version– требуемая версия коллекции или роли.
Инициализация новой коллекции
ansible-galaxy collection init my_namespace.my_collection
Здесь:
collection init– команда для создания шаблона новой коллекции;my_namespace.my_collection– полное название, включающее пространство имен (namespace) и название коллекции. Используется для формирования структуры файлов и каталогов коллекции.
Сборка и публикация коллекции
ansible-galaxy collection build
ansible-galaxy collection publish my_namespace-my_collection-1.0.0.tar.gz --api-key <ключ>
Здесь:
collection build– команда для упаковки коллекции в архив.tar.gz. Архив содержит весь код, метаданные и документацию.collection publish– публикация ранее собранного архива в Ansible Galaxy или на другой указанный сервер.my_namespace-my_collection-1.0.0.tar.gz– название архива, сформированное в процессе сборки.--api-key <ключ>– токен аутентификации для доступа к реестру коллекций Galaxy.
Полный набор аргументов утилиты ansible-galaxy представлен в справочнике.
ansible-inventory#
Утилита ansible-inventory предоставляет доступ к данным из файла инвентаря, определяющим, какие узлы участвуют в автоматизации, как они сгруппированы и какие переменные к ним относятся.
Это основной инструмент для диагностики и исследования инвентаря как в процессе разработки, так и на этапе эксплуатации.
В Ansible инвентарь представляет собой структуру, описывающую инфраструктуру: узлы, группы, переменные и их взаимосвязи.
Он может быть реализован в виде статического YAML- или INI-файла или с помощью динамического источника, основанного на внешнем API.
Утилита ansible-inventory позволяет работать с обеими формами инвентаря и отображать их в удобочитаемом виде.
Часто ansible-inventory используется для отладки содержимого инвентаря как при ручной настройке, так и в CI/CD-конвейерах, где требуется гарантировать корректность структуры и значений перед запуском сценариев.
Также инструмент полезен при работе с динамическими источниками – он позволяет получить полную картину, которую формирует расширение, не дожидаясь выполнения задач.
Инвентарь можно просматривать в различных форматах.
Например, вывод в YAML позволяет легко читать структуру, тогда как JSON подходит для последующей обработки скриптами.
ansible-inventory имеет визуализации групп и узлов в виде дерева, чтобы оценить, как организованы вложенные группы.
Также можно запросить переменные, связанные с конкретным узлом, или просмотреть все доступные узлы с учетом объединения нескольких источников инвентаря.
Кроме диагностики, ansible-inventory может использоваться в автоматизированных системах – например, для генерации списка узлов при интеграции с внешними инструментами мониторинга или оркестрации.
Примеры использования:
Просмотр инвентаря в формате YAML
ansible-inventory -i ./inventories/prod.yaml --list --yaml
Здесь:
-i ./inventories/prod.yaml– указание файла инвентаря;--list– вывод полной структуры инвентаря;--yaml– вывод в формате YAML.
Получение полной информации о конкретном узле
ansible-inventory -i inventories/prod.yaml --host db01.internal
Здесь --host db01.internal указывает конкретный узел для получения информации о нем.
Визуализация структуры групп и вложенности
ansible-inventory -i inventories/prod.yaml --graph
Здесь --graph – вывод дерева групп и вложенных в них узлов.
Проверка работы динамического инвентаря
ansible-inventory -i ./scripts/aws_inventory_plugin.yaml --list --export
Здесь:
-i ./scripts/aws_inventory_plugin.yaml– путь к файлу формата YAML расширения динамического инвентаря;--export– преобразование вывода в более компактную структуру для экспорта.
Комбинирование с jq для анализа переменных
Пример извлекает список всех подгрупп, вложенных в группу web.
ansible-inventory -i inventories/prod.yaml --list | jq `.web.children`
Здесь jq – утилита для обработки данных в формате JSON.
Полный набор аргументов утилиты ansible-inventory представлен в справочнике.
ansible-playbook#
Утилита ansible-playbook предназначена для запуска набора сценариев, которые позволяют описывать желаемое состояние инфраструктуры и достигать его пошагово с помощью модулей и ролей.
Сценарии позволяют задать четкую последовательность действий, определить условия выполнения задач, сгруппировать действия в роли и обеспечить повторное использование логики.
Утилита ansible-playbook принимает набор сценариев в качестве аргумента и поддерживает множество параметров для тонкой настройки процесса выполнения: выбор файла инвентаря, ограничение набора узлов, фильтрация по тегам, выполнение в режиме предварительной проверки, журналирование, детализация вывода и прочее.
Примеры использования:
Запуск набора сценариев с произвольным инвентарем, переменными и тегами
ansible-playbook -i inventories/prod.yaml site.yml \
--extra-vars "env=production version=3.2.1" \
--limit web_servers \
--tags "deploy,nginx" \
--check \
--diff
Здесь:
-i inventories/prod.yaml– указание файла инвентаря в формате YAML;site.yml– основной набор сценариев;--extra-vars "env=production version=3.2.1"– передача переменных в набор сценариев;--limit web_servers– ограничение области действия команд до группыweb_servers;--tags "deploy,nginx"– выбор задач с указанными тегами;--check– режим предварительной проверки, без фактического внесения изменений;--diff– отображение различий между текущим и предполагаемым состоянием.
Повторный запуск набора сценариев после ошибки с продолжением с определенной задачи
ansible-playbook site.yml --start-at-task="Install backend dependencies"
Здесь выполнение задач начинается с Install backend dependencies.
Все предыдущие задачи пропускаются.
Использование собственного пользователя SSH и включение подробного вывода
ansible-playbook site.yml \
-i hosts.ini \
-u deploy \
--become \
--ask-become-pass \
-vvv
Здесь:
-u deploy– использование пользователяdeployдля подключения по SSH;--become– выполнение команды с повышенными привилегиями;--ask-become-pass– интерактивный ввод пароля дляbecome;-vvv– включение подробного вывода для отладки.
Запуск с загрузкой дополнительных переменных из файла
ansible-playbook site.yml --extra-vars "@vars/prod.json"
Здесь --extra-vars @vars/prod.json – файл в формате JSON, содержащий переменные.
Ограничение выполнения по названию узла и журналирование
ansible-playbook -i inventory.yaml site.yml \
--limit "web01.example.com" \
--log-path ./logs/deploy.log
Здесь:
--limit "web01.example.com"– запуск задач только на указанном узле;--log-path ./logs/deploy.log– запись детального журнала выполнения в указанный файл.
Полный набор аргументов утилиты ansible-playbook представлен в справочнике.
ansible-pull#
Утилита ansible-pull представляет собой альтернативный подход к выполнению сценариев Ansible, при котором управление происходит не централизованно (как в случае с ansible или ansible-playbook), а на стороне управляемого узла.
В отличие от стандартного подхода, при котором управление осуществляется с управляющего узла, утилита ansible-pull позволяет самим управляемым узлам инициировать выполнение – они самостоятельно загружают наборы сценариев из удаленного репозитория и запускают их локально.
При необходимости он может периодически запускаться по расписанию для обеспечения актуальности конфигурации.
Этот механизм может быть использован в инфраструктуре с ограниченным доступом.
Например, новый управляемый узел может при запуске выполнить ansible-pull из cron или systemd и тем самым настроить себя по текущему состоянию инфраструктуры.
Пример использования:
Самонастройка узла с помощью ansible-pull
ansible-pull -U https://git.example.com/infra-config.git \
-i localhost, \
site.yml \
--checkout main \
--accept-host-key \
--directory /etc/ansible/pull \
--extra-vars "node_id=web01 region=eu-west"
Здесь:
-U https://git.example.com/infra-config.git– URL удаленного репозитория, содержащего набор сценариев и связанные файлы;-i localhost,– указание инвентаря (в данном примере используется текущий узел);site.yml– название набора сценариев, который должен быть выполнен после клонирования;--checkout main– переключение на веткуmainперед запуском;--accept-host-key– автоматическое добавление SSH-ключа репозитория вknown_hosts;--directory /etc/ansible/pull– путь, куда будет клонирован репозиторий;--extra-vars "node_id=web01 region=eu-west"– передача переменных в набор сценариев.
ansible-pull иногда используется совместно с планировщиком задач (например, cron), чтобы выполнять автоматическую периодическую синхронизацию:
*/15 * * * * root ansible-pull -U git@github.com:company/infra.git -i localhost, site.yml
Такой подход позволяет реализовать модель управления инфраструктурой, при которой каждый узел сам поддерживает себя в актуальном состоянии без участия управляющего узла.
Полный набор аргументов утилиты ansible-pull представлен в справочнике.
ansible-vault#
Утилита ansible-vault предназначена для защиты конфиденциальных данных, используемых в Ansible: пароли, токены доступа, ключи API, закрытые ключи SSH и тому подобное.
Утилита дает возможность хранить зашифрованные значения прямо в сценариях или файлах переменных без риска компрометации при совместной работе с репозиториями.
Утилита ansible-vault позволяет:
создавать новые зашифрованные файлы с переменными;
шифровать уже существующие файлы;
расшифровывать их для просмотра или редактирования;
изменять ключ шифрования;
редактировать зашифрованные файлы и повторно шифровать их после сохранения изменений;
использовать несколько источников ключей, в том числе отдельные файлы и внешние скрипты.
Принцип работы утилиты основан на симметричном шифровании: данные шифруются с помощью ключа, который затем используется для их расшифровки при запуске сценария. В процессе выполнения Ansible автоматически расшифровывает защищенные фрагменты, если предоставлен корректный ключ.
Примеры использования:
Редактирование зашифрованного файла с указанием файла ключа
ansible-vault edit group_vars/prod/secrets.yml --vault-password-file ~/.vault_key.txt
Здесь:
ansible-vault edit– команда для открытия файла с последующим шифрованием после закрытия;group_vars/prod/secrets.yml– путь к зашифрованному файлу;--vault-password-file ~/.vault_key.txt– путь к сохраненному файлу с ключом.
Изменение ключа шифрования для нескольких файлов с указанием старого и нового ключей
ansible-vault rekey \
--vault-password-file ~/.old_key.txt \
--new-vault-password-file ~/.new_key.txt \
group_vars/prod/*.yml
Здесь:
ansible-vault rekey– команда замены ключа шифрования;--vault-password-file ~/.old_key.txt– текущий ключ шифрования, необходимый для расшифровки;--new-vault-password-file ~/.new_key.txt– файл с новым ключом, которым будут повторно зашифрованы файлы;group_vars/prod/*.yml– файлы, который будут зашифрованы заново.
Расшифровка файла с переменными с помощью ввода ключа вручную
ansible-vault decrypt --ask-vault-pass group_vars/production/db_credentials.yml
Здесь:
ansible-vault decrypt– команда для расшифровки файла;--ask-vault-pass– указание вручную ввести ключ для расшифровки;group_vars/production/db_credentials.yml– путь к зашифрованному файлу.
Для шифрования отдельных значений в рамках незащищенного файла можно использовать встроенную поддержку vault-блоков, но для надежности рекомендуется изолировать все чувствительные переменные в отдельных зашифрованных файлах, например, в каталоге group_vars/.
Полный набор аргументов утилиты ansible-vault представлен в справочнике.