Ответ
Ad-hoc команды в Ansible — это однострочные команды, выполняемые напрямую из командной строки с помощью утилиты ansible или ansible-playbook (с флагом -e), для быстрого выполнения разовых задач на группе хостов без написания полноценного плейбука. Они используют модули Ansible с передачей аргументов.
Типичные сценарии использования в DevOps:
- Быстрая проверка и диагностика: Проверка доступности, сбор фактов, просмотр логов.
- Разовые операции: Перезагрузка службы, добавление/удаление пользователя, копирование файла.
- Тестирование модулей: Проверка работы модуля перед его включением в плейбук.
- Экстренное вмешательство: Выполнение срочного исправления на множестве серверов.
Примеры Ad-hoc команд:
# 1. Проверка доступности всех хостов из инвентаря (модуль ping)
ansible all -i production_inventory.yml -m ping
# 2. Сбор системных фактов с конкретного хоста и вывод в JSON
ansible db01.example.com -i inventory.ini -m setup --tree /tmp/facts/
# 3. Перезапуск службы nginx на группе хостов 'webservers'
ansible webservers -i inventory.ini -m systemd -a "name=nginx state=restarted" -b
# 4. Выполнение shell-команды для проверки дискового пространства
ansible all -i inventory.ini -m shell -a "df -h /"
# 5. Копирование локального файла конфигурации на удаленные хосты
ansible app_servers -i inventory.ini -m copy -a "src=/local/nginx.conf dest=/etc/nginx/nginx.conf owner=root mode=0644" -b
# 6. Управление пакетами: установка htop на хостах Ubuntu
ansible all:!db_servers -i inventory.ini -m apt -a "name=htop state=present update_cache=yes" -b
Ограничения и когда НЕ использовать Ad-hoc:
- Сложная логика: Нет поддержки условий (
when), циклов (loop), обработчиков (handlers). - Повторное использование: Команда существует только в истории shell. Для повторяющихся задач нужен плейбук.
- Читаемость и контроль версий: Плейбуки, хранящиеся в Git, предоставляют историю изменений, код-ревью и ясную документацию.
- Идемпотентность: Некоторые модули (особенно
commandиshell) по умолчанию не идемпотентны. Модули типаapt,yum,copy— идемпотентны.
Рекомендация: Используйте Ad-hoc команды для оперативных задач и разведки. Для любой логики, сложнее одной операции, или для задач, которые будут выполняться регулярно, сразу создавайте плейбук. Ad-hoc команды часто служат прототипом для будущих плейбуков.