copy и fetch
Тема дорожной карты · Ansible
Копирование файлов в режиме ad hoc осуществляется с помощью модуля copy из командной строки для передачи файлов с управляющего узла на один или несколько целевых хостов без необходимости создания плейбука. Команда ansible all -m copy -a "src=example.txt dest=/tmp/example.txt mode=0644" передает локальный файл на все хосты из inventory параллельно, при этом Ansible самостоятельно устанавливает SSH-соединения. Эта функциональность особенно полезна при первоначальной подготовке серверов, распространении конфигураций или в экстренных ситуациях, когда требуется немедленная разовая передача. Для больших файлов или когда источник уже находится на удалённом хосте более эффективны модули fetch (загрузка с хоста) или synchronize (обёртка над rsync).
Копирование файлов в режиме ad hoc позволяет быстро и эффективно настроить серверы, не требуя написания сложных плейбуков. Это особенно полезно для быстрых операций, таких как развертывание конфигураций, обновление файлов или инициализация нового сервера. Однако стоит помнить, что использование ad hoc команд не обеспечивает идемпотентность, что может привести к нежелательным последствиям при повторном выполнении команд.
Как это работает
copy и fetch выполняют один модуль против inventory без плейбука: ansible webservers -m service -a "name=nginx state=restarted", ansible all -m ping, ansible db -m setup (gather facts). Полезно для разовых операций, быстрой диагностики, проверки связи с inventory до написания полного плейбука. Модули -m command и -m shell позволяют гонять произвольные команды, но теряют идемпотентность.
Модуль copy передает файлы с управляющего узла на целевые хосты, используя SSH-соединения. Модуль fetch позволяет загружать файлы с удаленных хостов на управляющий узел. Оба модуля могут использоваться для быстрого копирования и загрузки файлов без необходимости создания сложных плейбуков.
Когда применять
Ad-hoc — для emergency-фиксов (рестарт сервиса по флоту), explore (-m setup для просмотра facts), теста inventory (-m ping). Для всего, что может повториться — плейбук: версионирован, ревьюится, идемпотентен. Сочетайте -i inventory.yml --limit "subgroup:&another" для сужения scope до массовых действий.
Ad hoc команды полезны для быстрого решения проблем, таких как рестарт сервиса на большом количестве хостов или проверка состояния хостов. Они также могут быть использованы для быстрой диагностики и сбора информации о хостах. Однако для повторных операций следует использовать плейбуки, которые обеспечивают идемпотентность, версионирование и ревью.
Типичные ошибки
Ловушки copy и fetch: забыли --check --diff сначала (нельзя un-restart сервис на 200 хостах); -m shell где есть нормальный модуль (apt, systemd, user); слишком широкий inventory-паттерн и попадание в посторонние машины; нет paging для большого флота — стена зелёного нечитаема.
Типичные ошибки при использовании ad hoc команд включают забывание использовать опции --check --diff для предварительного просмотра изменений перед их выполнением. Также часто возникают проблемы с использованием модуля shell, когда есть специализированные модули для выполнения определенных задач, таких как apt, systemd, user. Широкий паттерн inventory может привести к выполнению команд на непредназначенных хостах, что может привести к нежелательным последствиям.