Pillar top file
Тема дорожной карты · SaltStack
Pillar top file — это файл top.sls в корне дерева pillar (/srv/pillar/top.sls при стандартном pillar_roots), который определяет, какие данные получит каждый миньон. Синтаксис аналогичен top-файлу состояний, но функционально они различаются: top file состояний определяет действия при highstate, а pillar top file определяет данные, доступные миньонам. Ошибка в таргетинге может привести к тому, что хост не получит необходимые данные или секреты окажутся у неправильных машин.
Как это работает
Файл имеет вложенную структуру YAML: окружение, выражения таргетинга и списки pillar-SLS. Минимальный рабочий пример:
base:
'*':
- common
'web*':
- nginx
'G@os_family:Debian':
- match: compound
- apt
Здесь каждый миньон получает common.sls, хосты с id на web — дополнительно nginx.sls, а Debian-подобные системы — apt.sls через compound-таргетинг (строка - match: compound переключает тип матчинга; доступны также grain, pcre, list и другие). Когда миньон запрашивает pillar, мастер проходит по top file, собирает все совпавшие записи, рендерит каждый SLS и объединяет словари в один. При пересечении ключей действует стратегия слияния из опции pillar_source_merging_strategy (по умолчанию smart): вложенные словари объединяются рекурсивно, а конфликтующие скалярные значения перезаписываются — полагаться на порядок здесь не стоит, лучше не дублировать ключи между файлами.
Когда применять
Top file — обязательная часть любого дерева pillar. Рабочий паттерн: common для всех через '*', далее файлы по ролям (web, db, monitoring) с таргетингом по id или grains и, при необходимости, точечные записи для отдельных хостов по полному minion id. Для различий stage/prod удобнее отдельные подкаталоги (- prod.db против - stage.db) с таргетингом по соответствующему grain или отдельные pillar-окружения через pillarenv. Таргетинг по кастомным grains в pillar top file допустим только для несекретных данных: значения grains задаёт сам миньон, и скомпрометированный хост может «переехать» в чужую роль. Секреты назначайте по minion id — его подделать нельзя, он закреплён принятым ключом.
Типичные ошибки
Классика — перепутать два top-файла и положить назначение pillar в /srv/salt/top.sls (или наоборот): синтаксис одинаковый, ошибка не бросается в глаза, а данные не приходят. Вторая — таргетить секретные pillar по grains: миньон контролирует свои grains и может подобрать значения, чтобы получить чужие ключи. Третья — дублировать один ключ в нескольких SLS для одного миньона и удивляться результату слияния. Четвёртая — забыть saltutil.refresh_pillar после правки top file: назначение изменилось, но миньоны живут со старой копией в памяти. Диагностика простая: salt <id> pillar.items показывает итог именно для этого миньона.
Связанные понятия
Полезные ресурсы
🔤 Английские термины в этой теме
Слова из этой темы, которые русскоязычные часто произносят неверно. Кнопка 🔊 произносит голосом браузера.
- assign /əˈsaɪn/ g немая разбор: Глаголы: задеплоить, пофиксить, замержить, заапрувить
- assignment /əˈsaɪnmənt/ «эсайнмент», буква g не произносится разбор: Операторы: not equal, greater or equal, arrow
- could /kʊd/ l немое разбор: Смягчение критики: consider, might, what if
- mandatory /ˈmændətəri/ обязательный разбор: Читаем man pages: SYNOPSIS, OPTIONS, скобки
- merge /mɜːrdʒ/ один слог, «мёрдж», без русского «е» разбор: Рунглиш vs английский: когда что уместно
- result /rɪˈzʌlt/ ударение на второй слог разбор: Behavioral questions и метод STAR
- should /ʃʊd/ l немая разбор: Язык RFC: MUST, SHOULD, MAY (RFC 2119)