Salt extensions
Тема дорожной карты · SaltStack
Salt extensions — механизм вынесения модулей за пределы ядра Salt в отдельные Python-пакеты. Долгие годы ядро тащило в себе тысячи модулей под любую технологию — от управления облаками до чатов, — и большая часть этого кода не имела активных сопровождающих, но продолжала требовать поддержки при каждом релизе. «Great Module Migration», завершившаяся к релизу 3008, разрубила этот узел: в ядре остались базовые, реально сопровождаемые модули, а остальное переехало в community-организацию salt-extensions на GitHub. Каждое расширение — самостоятельный проект со своим репозиторием, версионированием, тестами и релизным циклом, публикуемый в PyPI под именем вида saltext-<название>.
Как это работает
Расширение — обычный Python-пакет, который объявляет свои модули через entry points; после установки loader Salt подхватывает их автоматически, без правки конфигов. Ставить нужно в то окружение Python, где работает Salt: для onedir-пакетов это делает salt-pip install saltext-vault (пример с расширением для интеграции с Vault) — команда salt-pip ставит пакет во встроенное окружение onedir, а не в системный интерпретатор. Важно ставить расширение там, где будет исполняться код: execution- и state-модули работают на миньонах, значит пакет нужен на каждом миньоне (это удобно оформить отдельным состоянием), а runner-модули или модули для pillar — на мастере. После установки процесс salt-minion или salt-master перезапускают, чтобы loader увидел новые модули. Для разработки собственных расширений есть официальный шаблон salt-extension-copier: он генерирует скелет проекта с правильными entry points, тестовой обвязкой и CI.
Когда применять
Первый сценарий — вынужденный: после апгрейда на 3008 состояние падает с ошибкой «module not found», хотя годами работало. Это почти всегда след миграции — найдите одноимённое расширение в организации salt-extensions и добавьте его установку в состояния подготовки хостов. Второй сценарий — осознанный выбор: вам нужна интеграция с внешней системой, и она существует как saltext — расширение обновляется независимо от релизов Salt, что удобно. Третий — собственный код: если ваши кастомные модули переросли каталог _modules в file_roots, упаковка их в saltext через copier-шаблон даёт версионирование, тесты и нормальную доставку через pip вместо синхронизации файлов.
Типичные ошибки
Классика — pip install в системный Python: пакет ставится, но Salt в onedir его не видит; нужен именно salt-pip. Зеркальная ошибка — поставить расширение только на мастер, когда его execution-модули нужны миньонам: на мастере всё выглядит установленным, а state.apply на миньоне падает. Часто забывают перезапустить демона после установки — loader сканирует модули на старте. Ещё одна — не пиннить версии расширений: у saltext свой релизный цикл, и обновление «вместе со всем» может принести несовместимость; фиксируйте версию так же, как версию самого Salt. Наконец, учитывайте, что расширения сопровождает сообщество: у популярных пакетов дела идут живо, у нишевых мейнтейнер может быть один — оценивайте активность репозитория до того, как завязать на него прод.
Связанные понятия
Полезные ресурсы
Проверить знания (2)
Загрузка вопросов…