Salt extensions
Тема дорожной карты · SaltStack
Salt extensions представляют собой механизм вынесения модулей за пределы ядра Salt в отдельные Python-пакеты. Раньше ядро Salt содержало тысячи модулей для различных технологий, от управления облаками до чатов. Большая часть этого кода не имела активных сопровождающих, но продолжала требовать поддержки при каждом релизе. «Great Module Migration», завершившаяся к релизу 3008, разделила эти модули: в ядре остались базовые, реально сопровождаемые модули, а остальное переехало в community-организацию salt-extensions на GitHub. Каждое расширение — это самостоятельный проект со своим репозиторием, версионированием, тестами и релизным циклом, публикуемый в PyPI под именем вида saltext-<название>.
Как это работает
Расширение — это обычный Python-пакет, который объявляет свои модули через entry points. После установки loader Salt подхватывает их автоматически, без правки конфигов. Установка должна производиться в то окружение Python, где работает Salt: для onedir-пакетов это делает команда salt-pip install saltext-vault (пример с расширением для интеграции с Vault). Эта команда ставит пакет во встроенное окружение 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. Наконец, учитывайте, что расширения сопровождает сообщество: у популярных пакетов дела идут живо, у нишевых мейнтейнер может быть один — оценивайте активность репозитория до того, как завязать на него прод.
Связанные понятия
Полезные ресурсы
🔤 Английские термины в этой теме
Слова из этой темы, которые русскоязычные часто произносят неверно. Кнопка 🔊 произносит голосом браузера.
- maintainer /meɪnˈteɪnər/ ударение на второй слог разбор: Словарь GitHub issues: reproduce, workaround, upstream, wontfix
- interpreter /ɪnˈtɜːrprɪtər/ ударение на «тёр» разбор: Ошибки терминала: permission denied, no such file, segfault
- scenario /sɪˈnɑːrioʊ/ «синАриоу» разбор: Тестирование: flaky, coverage, mock, fixture, regression
- release /rɪˈliːs/ ударение на второй слог, «релис», а не «релиз» с русским «з» разбор: Версии и числа: two point oh, semver
- repository /rɪˈpɒzɪtəri/ ударение на «по», четыре слога, а не «репозитОри» разбор: Где встречается: код, доки, тикеты, созвоны