Roster-файл

Тема дорожной карты · SaltStack

Roster — это инвентарь для salt-ssh: файл, который отвечает на вопрос «кто мои цели и как к ним подключиться». В классическом режиме Salt такой файл не нужен — миньоны сами приходят к мастеру, регистрируются ключами, и мастер всегда знает свой парк. В agentless-режиме регистрации нет: постоянного соединения не существует, и список хостов приходится вести явно. По умолчанию roster живёт в /etc/salt/roster и представляет собой YAML: идентификатор цели и параметры подключения. Идентификатор из roster играет ту же роль, что имя миньона, — по нему работает таргетинг в командах salt-ssh.

Как это работает

Минимальная запись — идентификатор и адрес: web1: {host: 192.168.1.10}. На практике добавляют user — пользователь SSH, port — если порт нестандартный, priv — путь к приватному ключу, sudo: True — поднимать привилегии на цели, passwd — пароль (худший вариант, см. ниже). Плоский YAML — это лишь roster-модуль по умолчанию; система подключаемая: список целей может приходить из скрипта, из облачного инвентаря или из кэша известных мастеру миньонов — модуль выбирается опцией --roster при запуске. Таргетинг по roster поддерживает glob-шаблоны по идентификаторам: salt-ssh 'web*' state.apply пройдёт по всем записям, чьи имена начинаются с web. Важно понимать различие с ключами мастера: запись в roster — это просто строчка в файле, никакого криптографического доверия она не создаёт; подлинность хоста проверяется обычными механизмами SSH (host-ключи, известные хосты).

Когда применять

Roster нужен ровно тогда, когда вы используете salt-ssh, — без него команде не с чем работать. Вопрос скорее в том, как его вести. Для маленького статичного парка достаточно рукописного YAML под контролем версий рядом с состояниями. Если хосты создаются динамически (облако, IaC-пайплайн), рукописный файл мгновенно устаревает — генерируйте его из источника истины: из вывода Terraform, из API облака, из CMDB. Разумный паттерн для смешанной инфраструктуры: основной парк на обычных миньонах, а в roster — только «края»: хосты для бутстрапа, машины без агента, изолированные сегменты. Держать в roster то, что уже подключено миньоном, незачем — это два расходящихся списка одного и того же.

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

Самая опасная привычка — пароли открытым текстом в passwd: roster-файл читаем всем, у кого есть доступ к машине с salt-ssh, и попадает в бэкапы; используйте SSH-ключи, а сам файл ограничивайте правами. Вторая ошибка — рассинхронизация с реальностью: хост переехал, запись осталась, и salt-ssh стучится в пустоту или, хуже, в чужую машину с тем же адресом. Третья — забывать про sudo: подключение под непривилегированным пользователем без sudo: True роняет половину состояний ошибками прав. Наконец, не путайте идентификатор из roster с настоящим именем миньона: если позже на хост поставят агента, его имя задаётся конфигурацией миньона, и таргеты в ваших состояниях могут перестать совпадать.

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

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

Проверить знания (2)

Загрузка вопросов…