Организация репозиториев
Тема дорожной карты · SaltStack
Разделение Salt-кода по репозиториям влияет на удобство ревью изменений, контроль доступа и переиспользование кода. Обычно используют два типа репозиториев: формулы (переиспользуемый код, например nginx-formula, ssh-formula) и окружение (env-репозиторий с top.sls и pillar-данными, который связывает формулы с конкретными хостами). Формулы отвечают за настройку сервисов, а окружение определяет, на каких машинах и с какими данными эти формулы применяются. Это разделение также определяет границы ответственности: формулы могут ревьюить все, а env-репозиторий требует более тщательного контроля.
Как это работает
Типичный env-репозиторий содержит два дерева: base/top.sls для назначения state-формул на таргеты и pillar/ для данных по ролям. Формулы подключаются к мастеру двумя способами: через GitFS или CI-доставку. В GitFS каждому репозиторию формулы прописывается gitfs_remotes в конфиге мастера, и его состояния становятся доступны в file_roots. В CI-доставке пайплайн собирает нужные версии формул и выкладывает их на мастер в каталог, например /srv/salt-formulas, указанный в file_roots. В обоих случаях потребитель фиксирует версию формулы — тег или коммит, а не движущуюся ветку. Использование ветки может привести к неожиданным изменениям в инфраструктуре.
Когда применять
Разделение на формулы и окружение окупается уже с 3–5 сервисами, так как без него top file, данные и код срастаются в монолит, который трудно переиспользовать и ревьюить. Pillar следует выносить в отдельный репозиторий с узким кругом доступа, если в нём есть чувствительные данные. Даже зашифрованные секреты и сетевые политики доступа не должны быть видны всем, кто правит формулы. Излишнее разделение на репозитории тоже вредит: если формулу использует одна команда в одном окружении, десяток микрорепозиториев только умножает накладные расходы на PR, версии и синхронизацию. Здоровый ориентир — отдельный репозиторий для кода, который реально переиспользуется или имеет отдельный цикл изменений.
Типичные ошибки
- Pillar с секретами в общем репозитории со state-кодом: Круг доступа к коду всегда шире круга доступа к данным, и «приватности репозитория» недостаточно.
- Формулы без релизов: Версия в метаданных остаётся
0.0.1, тегов нет, потребители тянут ветку, и однажды чужой merge раскатывается на прод в моментstate.apply. - Дрейф между способами доставки: Часть формул приезжает через GitFS, часть лежит копией в env-репозитории, и через полгода никто не знает, какая версия реально применяется.
- Отсутствие
pillar.exampleв формулах: Интерфейс формулы становится недокументированным, и его восстанавливают чтением Jinja.
Связанные понятия
Полезные ресурсы
🔤 Английские термины в этой теме
Слова из этой темы, которые русскоязычные часто произносят неверно. Кнопка 🔊 произносит голосом браузера.
- monolith /ˈmɒnəlɪθ/ с «θ» разбор: Архитектура: coupling, bottleneck, single point of failure
- merge /mɜːrdʒ/ один слог, «мёрдж», без русского «е» разбор: Рунглиш vs английский: когда что уместно
- configure /kənˈfɪɡjər/ ударение на «фи» разбор: Глаголы инженера: deploy, merge, roll back, refactor
- repo /ˈrɛpoʊ/ «репоу» разбор: Английский Git и code review
- usage /ˈjuːsɪdʒ/ «Юсидж», с глухим «с» разбор: Пишем README и документацию на английском
- deploy /dɪˈplɔɪ/ ударение на второй слог, не «дЕплой» разбор: Рунглиш vs английский: когда что уместно
- commit /kəˈmɪt/ ударение на второй слог разбор: Словарь IT-рунглиша