Короткий ответ
Ad-hoc команда выполняет одно разовое действие на выбранных хостах прямо из командной строки без сохранения в файл, а playbook — декларативный YAML-файл с последовательностью задач, который можно версионировать, переиспользовать и review-ить; ad-hoc хорош для быстрой диагностики или разовой операции, playbook — для повторяемой автоматизации.
Как это работает подробнее
ad-hoc команда вызывает ровно один модуль с заданными аргументами на указанной группе хостов и сразу выводит результат; playbook описывает набор "play", каждый из которых применяет список задач (каждая — вызов модуля) к группе хостов, с поддержкой handlers, условий, переменных и тегов.
Пример кода
commands.sh
$ ansible web -m ansible.builtin.service -a "name=nginx state=restarted" -bЧто использовать на практике
- Практика. ad-hoc удобен для проверки состояния ("узнать uptime на всех веб-серверах"), перезапуска одного сервиса в экстренной ситуации или быстрой проверки факта; для всего, что должно повторяться регулярно или быть частью процесса, нужен playbook в git.
Подводные камни
- Ошибка. использовать ad-hoc команды для продовых изменений конфигурации без фиксации того, что было сделано (никакой истории изменений не остаётся); пытаться засунуть сложную логику с условиями и хендлерами в ad-hoc-вызов, хотя это явный признак того, что нужен playbook.