Что такое grains
Тема дорожной карты · SaltStack
Grains — это набор пар «ключ–значение», содержащих информацию о конкретном миньоне, собранную Salt автоматически. Информация включает данные от os и osrelease до количества ядер и списка IP-адресов. Три ключевых свойства grains: они собираются на стороне миньона, статичны и доступны везде в системе Salt. Это делает grains универсальным «паспортом машины», на который опирается вся остальная система.
Как это работает
При запуске процесс миньона выполняет серию Python-функций для сбора фактов: парсит /etc/os-release, опрашивает интерфейсы, читает данные о CPU и памяти, определяет виртуализацию. Результат — словарь, который миньон хранит в памяти и отдаёт по запросу. Для доступа к grains используются три команды: salt '*' grains.ls для получения имен всех grains, salt '*' grains.items для получения полного словаря со значениями и salt '*' grains.item os osrelease cpuarch для выборки конкретных ключей. Точечное значение можно получить через grains.get, поддерживающий вложенность через двоеточие: salt '*' grains.get ip_interfaces:eth0. На самой машине то же самое доступно без мастера: salt-call --local grains.items. Пара os / os_family — самая используемая: os — конкретный дистрибутив (Ubuntu, CentOS), os_family — семейство (Debian, RedHat). После изменений на машине кэш обновляется командой salt '*' saltutil.refresh_grains или перезапуском миньона.
Когда применять
Grains отвечают на вопросы вида «что это за машина». Их можно применять для выбора поведения по платформе: в Jinja {% if grains['os_family'] == 'Debian' %} подставляет правильное имя пакета. Для отбора машин: salt -G 'os:Ubuntu' pkg.install nginx вместо ведения списков хостов руками. Инвентаризация и аудит: выгрузка grains.items --out=json по парку — фактическая база данных оборудования без отдельного CMDB. Сравнение с pillar задаёт границу: grains генерируются миньоном и описывают его физическую и системную реальность; pillar назначается мастером и описывает намерения администратора (роли с точки зрения доверия, секреты, параметры окружений). Если значение придумали вы, а не «обнаружила» машина, задумайтесь, не место ли ему в pillar.
Типичные ошибки
Первая ошибка — воспринимать grains как мониторинг: mem_total не изменится после апгрейда памяти, пока вы не обновите кэш; grains — снимок на момент старта. Вторая — доверие: миньон может объявить любые значения своих grains, поэтому строить на них раздачу секретов нельзя. Третья — обращение к несуществующему ключу в Jinja: grains['datacenter'] на машине без этого grain уронит рендеринг SLS; безопаснее grains.get('datacenter', 'default'). Четвёртая — ветвление по os там, где достаточно os_family: формула обрастает перечислением дистрибутивов вместо двух веток по семействам.
Связанные понятия
Полезные ресурсы
🔤 Английские термины в этой теме
Слова из этой темы, которые русскоязычные часто произносят неверно. Кнопка 🔊 произносит голосом браузера.
- result /rɪˈzʌlt/ ударение на второй слог разбор: Behavioral questions и метод STAR
- consider /kənˈsɪdər/ ударение на второй слог разбор: Смягчение критики: consider, might, what if
- database /ˈdeɪtəbeɪs/ «дЕйтабейс», ударение на первый слог разбор: Английский баз данных и бэкенда