Запуск playbook Ansible пошагово

Как запустить playbook ansible

Содержание статьи

Как запустить playbook ansible

Перед первым запуском требуется установленный Ansible версии не ниже 2.12, настроенный SSH-доступ без интерактивного ввода пароля и корректный inventory-файл. На практике чаще всего используют INI или YAML-формат inventory с группами хостов, что упрощает выбор целей при запуске. Проверка соединения выполняется отдельной командой ansible all -m ping, а не самим playbook.

Запуск playbook выполняется командой ansible-playbook с явным указанием inventory, пользователя и режима повышения привилегий. Ключи -i, -u и —become позволяют контролировать контекст выполнения. Для предварительной проверки применяют —check и —diff, чтобы увидеть предполагаемые изменения без записи на хосты.

Установка Ansible и проверка версии в системе

Установка Ansible и проверка версии в системе

Ansible устанавливается на управляющий узел и не требует агентов на целевых хостах. Для Linux-дистрибутивов установка выполняется через системный пакетный менеджер или Python. На системах с Python 3.9+ допустима установка через pip, что дает контроль над версией Ansible Core.

На Ubuntu и Debian используется команда apt install ansible, при необходимости предварительно подключается официальный PPA-репозиторий. В RHEL, AlmaLinux и Rocky Linux установка выполняется через dnf install ansible-core, так как полный пакет ansible может отсутствовать в стандартных репозиториях. Для macOS применяется brew install ansible.

Для изолированной установки применяется virtualenv. Виртуальное окружение позволяет закрепить версию Ansible для конкретного проекта и исключить конфликты с системными пакетами. После активации окружения повторная проверка версии подтверждает, что playbook будут запускаться в ожидаемом контексте.

Подготовка inventory-файла с целевыми хостами

Подготовка inventory-файла с целевыми хостами

Inventory-файл определяет, на какие узлы будет запущен playbook и с какими параметрами подключения. По умолчанию Ansible использует файл /etc/ansible/hosts, но на практике чаще указывают собственный inventory через ключ -i, чтобы изолировать окружения и проекты.

Минимальный inventory в формате INI содержит список IP-адресов или DNS-имен. Для группировки хостов применяются секции в квадратных скобках, например [web] или [db]. Группы позволяют запускать playbook только на нужной части инфраструктуры и упрощают назначение переменных.

Параметры подключения задаются прямо в inventory. Чаще всего указывают ansible_user, ansible_port и путь к приватному ключу через ansible_ssh_private_key_file. Это избавляет от передачи одних и тех же аргументов при каждом запуске ansible-playbook.

Для более сложных сценариев используется YAML-формат inventory. Он поддерживает вложенные группы, наследование и явную структуру данных. Такой формат удобен при работе с десятками хостов и разными ролями серверов в одном окружении.

После создания inventory проверяется корректность описания хостов командой ansible-inventory —list -i inventory.yml. Она показывает итоговую структуру групп и переменных и позволяет выявить ошибки до запуска playbook на целевых узлах.

Настройка SSH-доступа и проверка соединения с узлами

Настройка SSH-доступа и проверка соединения с узлами

Ansible использует SSH для подключения к целевым узлам, поэтому доступ должен работать без интерактивного ввода пароля. На управляющем хосте создается ключ командой ssh-keygen с типом ed25519 или rsa. Публичный ключ добавляется в файл ~/.ssh/authorized_keys пользователя на каждом целевом сервере.

В inventory рекомендуется явно задать параметры SSH-подключения, чтобы исключить неоднозначность:

  • ansible_user – пользователь для подключения
  • ansible_port – порт SSH, если используется нестандартный
  • ansible_ssh_private_key_file – путь к приватному ключу

Если playbook требует прав администратора, пользователь должен иметь доступ к sudo без запроса пароля. Это проверяется командой sudo -n true на целевом узле. При отсутствии прав задачи с become: true завершатся с ошибкой.

Перед запуском playbook соединение проверяется отдельной командой Ansible:

  • ansible all -i inventory.ini -m ping

Модуль ping не использует ICMP, а выполняет Python-код на удаленном хосте. Ответ pong подтверждает, что SSH-доступ, Python и базовая конфигурация узла готовы к выполнению задач.

При ошибках соединения следует последовательно проверить:

  1. Доступность хоста по сети и корректность IP или DNS
  2. Совпадение пользователя и SSH-ключа
  3. Наличие Python на целевом узле по пути /usr/bin/python3
  4. Отсутствие запроса пароля при sudo

Только после успешного ответа всех узлов на команду ping имеет смысл переходить к запуску playbook.

Создание структуры playbook и базового YAML-файла

Создание структуры playbook и базового YAML-файла

Playbook представляет собой YAML-файл с расширением .yml или .yaml. Для одного проекта обычно создается отдельный каталог, в котором хранятся playbook, inventory и вспомогательные файлы. Минимальная структура включает файл playbook и, при необходимости, подкаталоги roles, group_vars и host_vars.

Базовый playbook начинается со списка, даже если в нем описан один сценарий. Первый уровень YAML всегда обозначается символом . Отступы выполняются пробелами, использование табуляции недопустимо, так как приводит к ошибкам разбора файла.

В минимальном варианте playbook содержит параметры hosts и tasks. Значение hosts должно совпадать с именем группы или хоста из inventory. В секции tasks описываются действия, которые Ansible выполнит на целевых узлах в заданном порядке.

Для задач, требующих прав администратора, заранее добавляется параметр become: true на уровне play или отдельной задачи. Это позволяет избежать дублирования настроек и сразу задать контекст выполнения.

После создания файла рекомендуется проверить его структуру командой ansible-playbook playbook.yml —syntax-check. Проверка выявляет ошибки отступов и неверные ключи до подключения к целевым узлам.

Вопрос-ответ:

Как проверить, что Ansible установлен правильно на управляющем узле?

После установки Ansible следует выполнить команду ansible —version. Она покажет номер версии, путь к конфигурационному файлу и используемый Python-интерпретатор. Для работы playbook рекомендуется версия 2.12 или выше. Если версия не соответствует требованиям, команды playbook могут завершаться с ошибками модулей или синтаксиса.

Как правильно структурировать inventory-файл для разных групп серверов?

Inventory-файл может быть в формате INI или YAML. В INI создаются секции в квадратных скобках, например [web] и [db], где перечислены хосты. Для каждой группы можно задавать переменные, такие как ansible_user или ansible_ssh_private_key_file. В YAML формате поддерживаются вложенные группы и наследование переменных, что удобно при большом количестве серверов и разных ролях.

Что делать, если команда ansible all -m ping возвращает ошибки соединения?

Сначала проверяют доступность узлов по сети и правильность IP или DNS. Затем проверяют, что пользователь и SSH-ключ совпадают с настройками в inventory. Также проверяется наличие Python на целевом хосте и возможность использования sudo без пароля. После устранения этих проблем команда ping должна вернуть pong для всех узлов.

Какие ключи лучше использовать при запуске playbook для указания inventory и пользователя?

Для запуска playbook используется команда ansible-playbook с ключами: -i для указания файла inventory, -u для пользователя и —become, если задачи требуют повышения привилегий. Это позволяет запускать playbook с правильным контекстом, без необходимости указывать соединение и ключи каждый раз в задаче.

Как проверить корректность структуры YAML playbook перед запуском?

Для проверки используется команда ansible-playbook playbook.yml —syntax-check. Она проверяет отступы, ключи и последовательность задач без выполнения на хостах. Это помогает выявить ошибки синтаксиса и предупреждает срыв выполнения playbook после подключения к серверам.

Ссылка на основную публикацию