Execution-модули

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

Execution-модули — это библиотека функций, которые миньон может выполнять. Они составляют основу команды salt после таргета. Например, запись pkg.install означает вызов функции install из модуля pkg. Команда salt '*' test.ping вызывает функцию ping из модуля test, а salt -G 'os:Ubuntu' pkg.install nginx — функцию install из модуля pkg для установки пакета nginx. Модули написаны на Python и охватывают множество областей: пакеты, сервисы, файлы, пользователи, сеть, базы данных и облака. Они формируют основу системы, так как state-модули используют те же execution-функции. Понимание этого слоя помогает разобраться, что происходит при применении state.

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

При запуске миньон через загрузчик собирает доступные модули и отбрасывает неприменимые. У каждого модуля есть функция __virtual__, которая решает, загружаться ли на текущей системе и под каким именем. Например, имя pkg на Ubuntu указывает на реализацию для APT, а на RHEL-подобных системах — для YUM/DNF. Команда pkg.install корректна на всех системах. Для изучения библиотеки можно использовать команды salt '*' sys.list_modules для просмотра загруженных модулей, salt '*' sys.list_functions pkg для просмотра функций модуля и salt '*' sys.doc pkg.install для просмотра документации с примерами. Свои модули следует кладать в каталог _modules/ в file_roots и синхронизировать командой saltutil.sync_modules. После этого кастомная функция вызывается так же, как встроенная. С релиза 3008 значительная часть модулей вынесена из ядра в community-расширения (организация salt-extensions на GitHub) и устанавливается отдельно через salt-pip install saltext-....

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

Execution-модули используются для ad-hoc-операций и диагностики, например, для сбора версий пакета по парку (salt '*' pkg.version openssl), перезапуска сервиса или проверки файла. В states те же модули работают как строительные блоки — декларативный pkg.installed внутри опирается на функции pkg. Собственный execution-модуль пишут, когда логика не выражается цепочкой готовых функций, например, для интеграции с внутренним API или специфичным для компании инвентарём. Это обычная Python-функция в файле в _modules/, которой доступны все данные миньона. Прежде чем писать своё, стоит проверить sys.doc и каталог salt-extensions, так как вероятность, что задача уже решена, высока.

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

Первая ошибка — путать execution- и state-модули: pkg.install — императивная функция (устанавливай), а pkg.installed — декларативный state (должен быть установлен). В SLS-файле нужен второй, а в ad-hoc-команде — первый. Вторая ошибка — после обновления до 3008 обнаружить, что привычный модуль «исчез»: он переехал в salt-extensions и его нужно доставить через salt-pip. Третья ошибка — забыть saltutil.sync_modules после правки кастомного модуля и полчаса отлаживать старую версию кода. Четвёртая ошибка — лезть в исходники вместо sys.doc: встроенная документация точнее соответствует установленной версии.

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

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

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

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

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