Организация репозиториев

Тема дорожной карты · 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, версии и синхронизацию. Здоровый ориентир — отдельный репозиторий для кода, который реально переиспользуется или имеет отдельный цикл изменений.

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

  1. Pillar с секретами в общем репозитории со state-кодом: Круг доступа к коду всегда шире круга доступа к данным, и «приватности репозитория» недостаточно.
  2. Формулы без релизов: Версия в метаданных остаётся 0.0.1, тегов нет, потребители тянут ветку, и однажды чужой merge раскатывается на прод в момент state.apply.
  3. Дрейф между способами доставки: Часть формул приезжает через GitFS, часть лежит копией в env-репозитории, и через полгода никто не знает, какая версия реально применяется.
  4. Отсутствие pillar.example в формулах: Интерфейс формулы становится недокументированным, и его восстанавливают чтением Jinja.

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

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

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

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

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