file_roots и salt://
Тема дорожной карты · SaltStack
file_roots — опция конфига мастера, которая сопоставляет каждому окружению (saltenv) список каталогов на диске. Именно от этих каталогов отсчитываются все salt://-URL: путь salt://nginx/init.sls при стандартной настройке превращается в /srv/salt/nginx/init.sls. Это самый простой и самый распространённый бэкенд файлового сервера (roots): никаких внешних зависимостей, всё лежит в обычных каталогах, которые удобно смотреть, дифать и версионировать. Понимание пары «file_roots → salt://» — базовый навык: любое состояние file.managed, любой top.sls, любая формула в итоге разрешаются через эту схему адресации.
Как это работает
В /etc/salt/master окружения описываются так:
file_roots:
base:
- /srv/salt
dev:
- /srv/salt-dev
- /srv/salt
Каждому saltenv соответствует список каталогов; при поиске файла они обходятся по порядку, и побеждает первое совпадение — так в dev можно переопределить часть файлов, а остальное «провалится» в общий /srv/salt. URL salt:// всегда относительный: миньон подставляет своё текущее окружение (по умолчанию base, либо явно указанное saltenv=dev) и просит файл у мастера. В корне окружения по конвенции лежит top.sls, а состояния группируются в каталоги: nginx/init.sls, nginx/files/nginx.conf. Проверить, как мастер видит дерево, можно с миньона: salt '*' cp.list_master saltenv=dev. В masterless-режиме file_roots задаётся уже в конфиге миньона, и salt-call --local state.apply читает файлы напрямую с локального диска — схема адресации не меняется.
Когда применять
roots — выбор по умолчанию для старта и для небольших инсталляций: один мастер, одна команда, дерево /srv/salt под git-репозиторием, который CI выкатывает на мастер (git pull или rsync по тегу). Это даёт версионирование без усложнения самого Salt. Несколько каталогов в одном окружении полезны для наложения: базовая часть — из общего репозитория, поверх — каталог с локальными особенностями площадки. Отдельные окружения в file_roots (dev, prod) имеют смысл, когда нужно обкатывать состояния на тестовых миньонах до продакшена. Когда команда растёт и хочется полноценного flow «ветка = окружение» с ревью, переходят на gitfs — синхронизировать каталоги руками уже не нужно.
Типичные ошибки
Главное заблуждение — считать file_roots безопасным хранилищем: любой принятый миньон может запросить любой файл из любого окружения, поэтому приватные ключи и пароли в дереве состояний — прямая утечка; секреты живут в pillar (у которого свой, отдельный pillar_roots — их регулярно путают). Вторая ошибка — перекрытие каталогов: одинаковый путь в двух корнях одного окружения означает, что второй файл молча игнорируется, и правки в нём «не работают». Третья — редактирование /srv/salt руками на боевом мастере в обход git: через месяц никто не помнит, что и зачем поменяли, а откат невозможен. И не забывайте, что salt:// — это не путь ОС: абсолютные пути в source: не работают.
Связанные понятия
Полезные ресурсы
Проверить знания (2)
Загрузка вопросов…