test.ping и cmd.run

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

test.ping и cmd.run — две функции, с которых начинается практическое знакомство с Salt. Первая отвечает на вопрос «жива ли связь мастер–миньон», вторая позволяет выполнить произвольную shell-команду на любом срезе парка. salt '*' test.ping — стандартная первая команда после установки: если миньон вернул True, значит ключ принят, транспорт работает и миньон готов принимать задания. cmd.run — «швейцарский нож» для всего, что ещё не автоматизировано модулями и states: salt 'web*' cmd.run 'uptime' выполнит команду на всех машинах с именем на web и соберёт вывод в одном терминале.

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

Важно: test.ping — это не ICMP-пинг. Функция вообще не трогает сеть в привычном смысле: мастер публикует задание, миньон получает его по ZeroMQ-каналу и просто возвращает True. Проверяется, таким образом, весь путь целиком — соединение, ключи, шифрование и работоспособность процесса миньона. Если машина доступна по обычному ping, но молчит на test.ping, проблема в миньоне или ключах, а не в сети. В том же модуле есть test.version (версия Salt на миньоне — полезно при постепенных обновлениях) и test.echo. cmd.run выполняет строку через shell на миньоне и возвращает stdout. У функции есть практичные аргументы: runas=deploy — запуск от другого пользователя, cwd=/opt/app — рабочий каталог, env — переменные окружения, timeout — ограничение времени. Родственная cmd.run_all возвращает словарь с stdout, stderr и retcode — для скриптов и диагностики она информативнее, чем голый stdout.

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

test.ping применяйте как smoke-тест: после установки миньона, после перезапуска мастера, перед массовой операцией («сколько машин сейчас на связи?») и в связке с таргетом — salt -C 'G@os:Ubuntu and web*' test.ping покажет, кто попадёт под удар, до запуска реальной команды. Это дешёвый и безопасный способ проверить выражение таргетинга. cmd.run — для разовой диагностики (df -h, journalctl --since -5m, ss -tlnp) и для утилит, у которых нет готового модуля. Правило зрелого использования: cmd.run читает и диагностирует, а изменения системы оформляются модулями (pkg, service, file) или states — у них есть идемпотентность и предсказуемый отчёт об изменениях.

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

Классика — строить конфигурацию на cmd.run: «однострочники» не идемпотентны, не сообщают, что именно изменили, и не работают в режиме test=True. Вторая ошибка — забывать про кавычки и экранирование: команда с пайпами и переменными проходит через ваш локальный shell, потом через Salt, потом через shell миньона — проверяйте на одной машине, прежде чем слать на весь парк. Третья — интерпретировать молчание миньона на test.ping как «машина выключена»: возможно, завис процесс миньона или не принят ключ (salt-key -L). Четвёртая — секреты в аргументах cmd.run: команда с паролем попадёт в job cache и логи.

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

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

Проверить знания (2)

Загрузка вопросов…