salt-call и masterless-режим

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

salt-call — это CLI-инструмент, запускаемый на миньоне, а не на мастере. Он использует ту же библиотеку execution-модулей и тот же движок states, но выполнение и вывод происходят локально. Основные применения: отладка и masterless-режим с флагом --local, когда Salt работает без мастера. В этом режиме конфигурация, states и pillar читаются с локального диска, что делает Salt инструментом для настройки одной машины, полезным для сборки образов, CI и локальной разработки формул.

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

Команда salt-call test.ping выполняет функцию локально, но обращается к мастеру за данными. С флагом --local, например salt-call --local state.apply, обращения к мастеру отсутствуют. SLS-файлы берутся из file_roots, указанных в конфиге миньона (по умолчанию /srv/salt), а pillar — из локальных pillar_roots. Для постоянной работы в masterless-режиме в конфиге миньона выставляют file_client: local. Отладочный приём: salt-call state.apply -l debug показывает полный процесс, включая рендеринг Jinja, загрузку grains и порядок выполнения states. Для просмотра grains локально используйте salt-call --local grains.items.

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

Первый сценарий — отладка: когда state падает на одном миньоне из сотни, можно запустить salt-call state.apply mystate -l debug для получения трассировки. Второй сценарий — сборка образов: в Dockerfile или Packer-шаблоне достаточно установить пакет миньона, положить states и выполнить salt-call --local state.apply. Третий сценарий — CI-проверка формул: прогон states в чистом контейнере на каждый merge request. Четвёртый сценарий — единичные машины (edge-узлы, рабочие станции, домашний сервер), где мастер избыточен: states хранятся в git, машина периодически делает git pull и salt-call --local state.apply. Если машин становится много и нужна центральная точка управления и сбора результатов, это сигнал переходить на полноценную схему с мастером.

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

Частая ошибка — забыть --local на машине без мастера: salt-call будет долго пытаться достучаться до мастера и упадёт по таймауту, хотя states лежат рядом на диске. Обратная ситуация: --local на машине, подключённой к мастеру, — и вы удивляетесь, почему не подтянулся pillar с мастера — в masterless-режиме доступны только локальные данные. Третья ошибка — считать вывод salt-call и вывод мастера эквивалентными по правам: salt-call требует root (или sudo) на самой машине. Четвёртая ошибка — разложить states не туда: в masterless-режиме пути берутся из file_roots конфига миньона, а не из привычного серверного /srv/salt на мастере — проверьте /etc/salt/minion прежде чем винить Salt.

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

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

🔤 Английские термины в этой теме

Слова из этой темы, которые русскоязычные часто произносят неверно. Кнопка 🔊 произносит голосом браузера.

Весь словарь терминов →