test.ping и cmd.run
Тема дорожной карты · SaltStack
Функции test.ping и cmd.run — основные инструменты для практического знакомства с Salt. test.ping проверяет работоспособность связи между мастером и миньоном, а cmd.run позволяет выполнить произвольную shell-команду на любом срезе парка. Команда salt '*' test.ping обычно выполняется после установки: если миньон возвращает True, это означает, что ключ принят, транспорт работает и миньон готов принимать задания. cmd.run — универсальный инструмент для выполнения команд, которые ещё не автоматизированы модулями и states: например, salt 'web*' cmd.run 'uptime' выполнит команду на всех машинах с именем на web и соберёт вывод в одном терминале.
Как это работает
test.ping не является ICMP-пингом и не использует сеть в привычном смысле: мастер публикует задание, миньон получает его по ZeroMQ-каналу и возвращает True. Это проверяет соединение, ключи, шифрование и работоспособность процесса миньона. Если машина доступна по обычному ping, но не отвечает на test.ping, проблема в миньоне или ключах, а не в сети. В модуле test также есть test.version для проверки версии Salt на миньоне и test.echo. cmd.run выполняет строку через shell на миньоне и возвращает stdout. Функция имеет аргументы, такие как runas=deploy для запуска от другого пользователя, cwd=/opt/app для установки рабочего каталога, env для переменных окружения и timeout для ограничения времени выполнения. cmd.run_all возвращает словарь с stdout, stderr и retcode, что полезно для скриптов и диагностики.
Когда применять
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 для построения конфигурации: однострочники не идемпотентны и не сообщают о сделанных изменениях. Вторая ошибка — забывать про кавычки и экранирование: команда с пайпами и переменными проходит через локальный shell, затем через Salt, и затем через shell миньона — проверяйте на одной машине перед отправкой на весь парк. Третья ошибка — интерпретировать молчание миньона на test.ping как «машина выключена»: возможно, завис процесс миньона или не принят ключ (salt-key -L). Четвёртая ошибка — использование секретов в аргументах cmd.run: команда с паролем попадает в job cache и логи.
Связанные понятия
Полезные ресурсы
🔤 Английские термины в этой теме
Слова из этой темы, которые русскоязычные часто произносят неверно. Кнопка 🔊 произносит голосом браузера.
- terminal /ˈtɜːrmɪnəl/ ударение на первый слог разбор: Английский Linux и терминала
- idempotent /ˌaɪdɛmˈpoʊtənt/ ударение на третий слог разбор: Немые буквы и ударение: cache, queue, suite, height
- bare /bɛər/ как *bear* разбор: Метафоры инфраструктуры: bare metal, sidecar, canary, blue-green
- remote /rɪˈmoʊt/ ударение на второй слог разбор: Что носители скажут иначе: айтишник, сеньор, проект
- usage /ˈjuːsɪdʒ/ «Юсидж», с глухим «с» разбор: Пишем README и документацию на английском
- command /kəˈmɑːnd/ ударение на второй слог разбор: Английский Linux и терминала