Ad-hoc команды

Тема дорожной карты · Ansible

Ad hoc команды в Ansible представляют собой однострочные вызовы бинарного файла ansible, позволяющие выполнить один модуль на целевом хосте или группе хостов без необходимости создания полноценного файла playbook. Это делает их идеальными для быстрых операционных задач, таких как сбор фактов, проверка связи, перезапуск служб или срочные разовые изменения. Однако, для повторяемых, документированных рабочих процессов автоматизации следует использовать полноценные playbook.

Общий синтаксис ad hoc команды выглядит следующим образом: ansible <паттерн> -m <модуль> -a "<аргументы>". Например, команда ansible all -m service -a "name=nginx state=restarted" одновременно перезапускает nginx на всех хостах. Ad hoc команды наследуют те же гарантии идемпотентности и возвращают такую же структуру вывода JSON, что и эквивалентные задачи playbook.

Как это работает

Ad hoc команды выполняют один модуль против inventory без использования плейбука. Это позволяет быстро выполнить определённые действия, такие как перезапуск сервиса на группе серверов (ansible webservers -m service -a "name=nginx state=restarted"), проверка связи (ansible all -m ping), или сбор фактов (ansible db -m setup). Такой подход особенно полезен для разовых операций, быстрой диагностики и проверки связи с inventory до написания полного плейбука.

Модули -m command и -m shell позволяют выполнять произвольные команды, но они теряют гарантии идемпотентности, поскольку их результат может зависеть от конкретного состояния системы.

Когда применять

Ad hoc команды идеально подходят для быстрых операций, таких как emergency-фиксы (например, перезапуск сервиса на большом количестве хостов), эксплорация (-m setup для просмотра фактов), и тестирование inventory (-m ping). Однако, для задач, которые могут повторяться и требуют документации, следует использовать полноценные playbook. Playbook версионируются, проходят ревью и обеспечивают гарантии идемпотентности.

Для сужения области действия до массовых действий можно использовать опции -i inventory.yml --limit "subgroup:&another", что позволяет точно указать, на какие хосты или группы хостов будет применена команда.

Типичные ошибки

При использовании ad hoc команд могут возникнуть различные ловушки. Например, забыть добавить опции --check --diff для предварительного просмотра изменений, что может привести к нежелательным изменениям на большом количестве хостов. Также использование модулей -m shell вместо специализированных модулей, таких как apt, systemd или user, может привести к потерям гарантий идемпотентности. Широкий паттерн inventory может привести к выполнению команд на непредназначенных хостах. Наконец, отсутствие paging для большого количества хостов может привести к непрочитанной стене зелёного текста.

Связанные понятия

Полезные ресурсы