Таргетинг миньонов

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

Таргетинг — это язык, которым вы описываете, на каких миньонах выполнить команду или применить state. Первый позиционный аргумент salt — всегда целевое выражение: в salt '*' test.ping таргетом служит глоб '*' («все миньоны»). От точности таргетинга напрямую зависит безопасность операций: разница между «перезапустить nginx на трёх канареечных машинах» и «на всём проде» — это один символ в выражении. Salt предлагает несколько механизмов отбора — по имени, по свойствам системы (grains), по данным pillar, по подсетям — и compound-синтаксис, позволяющий комбинировать их логическими операторами в одном выражении.

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

Каждый миньон имеет идентификатор (id, по умолчанию — FQDN хоста). Базовый механизм — глоб по id: salt 'web*' test.ping, salt 'db[1-3].example.com' test.ping. Дальше — флаги CLI: -E включает регулярные выражения PCRE (salt -E 'web-(prod|stage)-\d+' ...), -L — явный список имён через запятую, -G — отбор по grains (salt -G 'os:Ubuntu' pkg.install nginx), -I — по значениям pillar, -S — по IP или подсети (salt -S '10.0.2.0/24' ...). Самый мощный — compound-таргетинг -C, где условия соединяются and/or/not, а тип каждого условия задаётся префиксом с @: salt -C 'G@os:Ubuntu and web* and not G@virtual:kvm' state.apply. Здесь G@ — grain, E@ — PCRE, I@ — pillar, S@ — подсеть; выражение без префикса трактуется как глоб. Повторяющиеся выражения выносятся в nodegroups в конфиге мастера и вызываются через -N. Важно понимать механику: мастер публикует задание с таргетом, а решение «моё/не моё» каждый миньон принимает сам, сверяя выражение со своими данными.

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

Глоб — вариант по умолчанию, когда у вас дисциплинированная схема имён (web-prod-01): дёшево и читаемо. Grains-таргетинг нужен, когда отбор идёт по свойствам системы, а не по имени: «все Ubuntu», «все с ролью app» — это основа гетерогенных парков, где одна команда должна вести себя по-разному. Pillar-таргетинг (-I) полезен, когда признак назначается централизованно с мастера и миньону нельзя доверять его выставление. Compound применяйте для точных срезов: salt -C 'G@os:Ubuntu and web* and not db*' .... Nodegroups — когда одно и то же длинное выражение повторяется в командах и в top.sls: одно определение вместо копипасты.

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

Главная ошибка — незакавыченный таргет: salt web* test.ping отдаст глоб на растерзание вашему локальному shell. Вторая — доверять grains в чувствительных сценариях: значения grains контролирует сам миньон, поэтому скомпрометированная машина может «притвориться» другой ролью; для раздачи секретов таргетируйте по pillar или по id. Третья — писать регулярное выражение без -E и удивляться, что глоб .* никого не нашёл. И четвёртая — забывать, что отбор идёт по подключённым миньонам: выключенная машина просто не ответит, и «пусто в выводе» не означает «таких машин нет» — сверяйте со списком salt-key -L.

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

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

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

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