Формулы
Тема дорожной карты · SaltStack
Формула (Salt formula) — оформленный по конвенциям, переиспользуемый набор состояний, решающий одну задачу целиком: установить и настроить nginx, развернуть PostgreSQL, завести пользователей. Технически это обычное дерево SLS-файлов, обычно отдельный git-репозиторий с именем вида nginx-formula. Смысл формулы — отделить универсальную логику («как ставится nginx на Debian и RHEL») от настроек конкретной инсталляции: логика живёт в формуле, настройки — в pillar. Существует общественная GitHub-организация saltstack-formulas с большим набором готовых формул, а официальная документация фиксирует конвенции оформления — единый стиль структуры, именования и работы с данными, благодаря которому чужую формулу можно читать как свою.
Как это работает
Формула подключается к файловому серверу одним из двух способов: репозиторий клонируют на мастер и добавляют его путь в file_roots, либо добавляют remote в gitfs_remotes — тогда мастер сам подтянет код. После этого состояния формулы доступны как обычные: в top.sls пишется - nginx, и highstate применит nginx/init.sls. Кастомизация делается только через pillar: формула объявляет дефолты в defaults.yaml, шаблон map.jinja сливает их с grains (различия дистрибутивов через os_family) и pillar-значениями, а состояния читают итоговый словарь. Пользователь формулы копирует поставляемый с ней pillar.example в своё pillar-дерево, правит значения — и та же формула настраивает nginx по-разному на разных хостах. Внутри формула разбита на подсостояния (nginx.install, nginx.config, nginx.service), которые можно применять и по отдельности.
Когда применять
Первый сценарий — не изобретать велосипед для типового ПО: формулы для распространённых сервисов уже учитывают различия пакетов и путей между дистрибутивами. Второй, более важный — оформлять собственные состояния как формулы, даже сугубо внутренние: конвенции дают переиспользуемость между проектами, тестируемость (kitchen-salt, testinfra) и низкий порог входа для новых людей в команде. Отдельный репозиторий на формулу оправдан, когда её версионируют и подключают в несколько инсталляций; внутри одного монорепозитория достаточно соблюдать структуру каталогов. Честная оговорка: сильно универсальные community-формулы бывают сложнее задачи — сотни опций, глубокие map.jinja; если вам нужно поставить один пакет и положить один конфиг, короткий собственный SLS понятнее и дешевле в сопровождении.
Типичные ошибки
Классика — взять community-формулу «как есть» и не зафиксировать версию: репозитории saltstack-formulas поддерживаются сообществом неравномерно, часть фактически заброшена, и очередное обновление может молча поменять поведение — всегда пиньте тег или коммит и просматривайте код перед подключением. Вторая ошибка — править файлы формулы под себя вместо переопределения через pillar: форк расходится с оригиналом, и обновляться становится невозможно. Третья — игнорировать pillar.example: формула без обязательных pillar-ключей падает или, хуже, применяет неожиданные дефолты. Наконец, не тащите всю организацию формул в gitfs_remotes «про запас» — каждый remote это код, который вы фактически запускаете на своих серверах с правами root.
Связанные понятия
Полезные ресурсы
Проверить знания (2)
Загрузка вопросов…