Execution-модули
Тема дорожной карты · SaltStack
Execution-модули — это библиотека функций, которые миньон умеет выполнять; из них состоит вся команда salt после таргета. Запись вида pkg.install читается как «модуль pkg, функция install»: salt '*' test.ping вызывает функцию ping модуля test, salt -G 'os:Ubuntu' pkg.install nginx — функцию install модуля pkg. Модули написаны на Python и покрывают сотни областей — пакеты, сервисы, файлы, пользователи, сеть, базы данных, облака. Это фундамент всей системы: state-модули под капотом вызывают те же execution-функции, поэтому понимание этого слоя объясняет, что на самом деле происходит при применении state.
Как это работает
При старте миньон через загрузчик (loader) собирает доступные модули и отбрасывает неприменимые: у каждого модуля есть функция __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, после «Great Module Migration», значительная часть модулей вынесена из ядра в 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: встроенная документация точнее соответствует установленной версии, чем сайт.
Связанные понятия
Полезные ресурсы
Проверить знания (2)
Загрузка вопросов…