Нацеливание на миньоны
| Сайт: | Атом.Порт: портал изучения |
| Курс: | Атом.Порт: портал изучения |
| Книга: | Нацеливание на миньоны |
| Напечатано:: | |
| Дата: | суббота, 6 декабря 2025, 08:22 |
1. Простые цели
Нацеливание на миньоны – это указание, на каких миньонах следует запустить команду или применить состояние. Нацеливание на миньоны осуществляется путём сопоставления с заданными шаблонами:
- сетевые имена
- IP-адреса и подсети миньонов
- системная информация, получаемая от миньонов
- элементы информации из встроенного хранилища SaltStack
- наименования групп миньонов
- комбинации указанных выше данных
Пример:
Команда для перезапуска сервера Apache httpd
salt web1 apache.signal restart
определяет в качестве цели миньон web1. Команда перезапуска будет выполнена только на этом миньоне.
Каждый миньон имеет уникальный идентификатор. По умолчанию, когда миньон запускается первый раз, в качестве идентификатора ему присваивается его FQDN. Идентификатор миньона можно переопределить с помощью настройки параметра id в файле конфигурации миньона.
1.1. Подстановки (GLOBBING)
Тип сопоставления, используемый в Salt по умолчанию – подстановочные (glob-) выражения (shell-style globbing). Glob-выражения интерпретируются так же, как в командной оболочке Linux (bash).
В вызовах Salt подстановки необходимо заключать в одинарные кавычки, чтобы командная оболочка не выполняла разбор подстановки до вызова Salt.
Символ * можно просто экранировать (комбинация \* корректно сработает).
В таблице 1 приведены наиболее часто применяемые подстановочные выражения.
Таблица 1 – Подстановочные символы в glob-выражениях
| Выражение | Значение |
| * | Соответствует любой строке, включая пустую строку |
| ? | Соответствует любому ОДНОМУ символу |
| [A-Z] [1-20] [A-Fa-f0-9] |
[ . - . ] - символ ’-‘ объявляет диапазон возможных значений. Примеры: [A-Z] - любой символ в верхнем регистре от A до Z включительно. [A-Fa-f0-9] – под данное выражение попадают следующие значения “ABCDEFabcdef0123456789” |
| [!][!W]in10 | ! - совпадает с любым одиночным символом, не входящим в строку, входящую в диапазон [! … ] Примеры: [!W]in10 – любой символ кроме W. |
В SaltStack символ ‘.’ не является glob-выражением. Он вычисляется не как выражение, а как просто часть имени хоста.
Примеры:
1. Проверка доступности миньонов:
salt '*' test.ping
Указанная команда выведет следующую информацию:

В данном примере мастером приняты публичные ключи миньонов altos , win10 и ключ миньона, работающего непосредственно на мастере – server-atomport
.
Команда test.ping выполнилась на всех миньонах, публичные ключи которых приняты мастером.
2. Выбрать все миньоны в домене example.net:
salt '*.example.net' test.ping
3. Выбрать все миньоны в доменах example.*
salt '*.example.*' test.ping
4. Выбрать все миньоны по маске ’web?’ в домене example.net( web1.example.net , web2.example.net … webN.example.net):
salt 'web?.example.net' test.ping
5. Выбрать все миньоны с web1 по web5 :
salt 'web[1-5]' test.ping
6. Выбрать миньоны web1 и web3 :
salt 'web[1,3]' test.ping
7. Выбрать миньоны web-x , web-y и web-z :
salt 'web-[x-z]' test.ping
1.2. Регулярные выражения
Миньоны могут быть выбраны с использованием регулярных выражений, совместимых с Perl (стандарт PCRE).
Выбрать миньоны web1-prod и web1-devel :
salt -E 'web1-(prod|devel)' test.ping
1.3. Списки
В самом простом случае можно указать список идентификаторов целевых миньонов, разделённый запятыми:
salt -L 'altos,win10' test.ping
Указанная команда выведет следующую информацию:

1.4. Нацеливание по подсети / IP-адресу
Миньоны могут быть выбраны по IP-адресу или подсети (с использованием нотации CIDR).
Пример:
Пусть миньоны имеют следующие IP-адреса:

При выполнении команд
salt -S 10.32.10.227 test.ping
salt -S
10.32.10.0/24 test.ping
будет выведена следующая информация:
Сопоставление по шаблону
’10.32.10.227/24’ будет работать некорректно. Нельзя комбинировать поиск по IP-адресу и поиск по подсети (CIDR).
Тип сопоставления по подсети/IP-адресу может использоваться в составных сопоставлениях, например:
salt -C 'S@10.0.0.0/24 and G@os:Debian'
test.ping
Возможно также использование сопоставления по подсети/IP-адресу в State-файлах:
'172.16.0.0/12':
- match: ipcidr
- internal
1.5. Нацеливание с помощью интерфейса Grains
Интерфейс Grains был встроен в Salt для того, чтобы обеспечить возможность нацеливания на миньоны, основываясь на их системной информации. На миньонах, работающих в определенной операционной системе или с определённым ядром операционной системы, могут запускаться совместимые функции интерфейса Grains.
Для вызова функции с помощью интерфейса Grains указывается опция -G , элемент grain и glob-выражение, которому должно соответствовать значение grain. Синтаксис строки нацеливания включает в себя ключ grain и следующее за ним glob-выражение, например: os:Arch* .
Например, в следующем вызове будут выбраны миньоны, работающие на операционной системе CentOS:
salt -G 'os:CentOS' test.ping
В следующем вызове выводится количество процессорных ядер на каждом миньоне с 64-битным процессором:
salt -G 'cpuarch:x86_64' grains.item num_cpus
При нацеливании с помощью Grains можно использовать подстановочные glob-выражения, а вложенные значения словаря можно сопоставлять путём добавления двоеточия для каждого уровня словаря.
Например, в следующем вызове будут выбраны хосты, имеющие элемент grain с именем ec2_tags , который, в свою очередь, является словарём с ключом ’environment’ и значением, содержащим подстроку ’production’ :
salt -G
'ec2_tags:environment:*production*'
Примеры:
1. Для вывода доступных элементов grain и их значений на миньоне altos необходимо выполнить команду grains.items (вывод показан не полностью):
salt 'altos' grains.items

Команда
salt -G 'shell:/bin/bash' test.ping
выполнит команду test.ping на всех миньонах, у которых grain ’shell’ содержит значение ’/bin/bash’ :

К серверу подключено три клиента, но ответило только два, т. к. только у них элемент grain ’shell’ имеет значение ’/bin/sh’ .
2. Давайте создадим выражение которое использует 2 grains’а для определения миньона. Возьмем os и ipv4.

3. В данном примере команда test.ping выполняется на всех миньонах, которые:
имеют элемент grain ’os’ со значением, не равным ‘Windows’
И
имеют элемент grain ‘ipv4’, соответствующий шаблону ‘10.32.10.2*’ , т. е., ‘10.32.10.2’, ‘10.32.10.20’, ‘10.32.10.21’,
‘10.32.10.200’ и т. д.

1.6. Нацеливание с помощью Pillar
При нацеливании на миньоны можно использовать данные Pillar. Это обеспечивает максимальный контроль и гибкость при нацеливании на миньоны.
Для использования нацеливания с помощью Pillar необходимо создать кеш данных Pillar в Salt Master для каждого миньона с помощью одной из следующих команд:
salt '*'
saltutil.refresh_pillarили
salt
'*' saltutil.sync_allКроме того, кэш данных Pillar будет заполняться во время выполнения highstate.
Для корректной работы данного метода нацеливания после изменения данных Pillar следует обновить кеш, выполнив приведенные выше команды.
Пример:
salt -I 'somekey:specialvalue' test.version
Как и в случае с Grains, в при нацеливании с помощью Pillar можно использовать подстановочные glob-выражения, а также сопоставлять вложенные значения словаря, добавляя двоеточие для каждого уровня словаря.
В приведенном ниже примере будут выбраны миньоны, имеющие pillar с именем atom, который представляет собой словарь, содержащий ключ port, значение которого начинается с подстроки ’project’
salt -I 'atom:port:project*' test.version
1.7. Нацеливание на группу узлов
В некоторых случаях для выполнения команд и состояний может быть удобно использовать заранее определенную группу миньонов – «группу узлов» (nodegroup). Группы узлов позволяют объявлять предопределенные составные цели в главном файле конфигурации (своего рода сокращения для использования в сложных составных выражениях).
Пример:
nodegroups:
group1: 'L@atom.domain.ru,port.domain.ru,project.domain.ru
and bl*.domain.ru'
group2: 'G@os:Debian and atom.domain.ru'
group3:
'G@os:Debian and N@group1'
2. Составные цели
В вызове Salt одновременно могут использоваться различные методы нацеливания, при этом для объединения множеств целей, вычисленных разными методами, используются логические операторы:
- not;
- and;
- or.
Пример:
salt -C 'G@os:Debian and webser* or E@db.*' test.version
В этом примере целью является любой миньон, имеющий идентификатор, начинающийся с подстроки ’webser’ , и работающий на операционной системе Debian, или миньон идентификатор которого начинается с подстроки ’db’ .
Тип сопоставления по умолчанию – glob, но он может быть изменён непосредственно в логическом выражении с помощью префикса, включающего соответствующую букву и следующий за ней символ @ . В приведённом выше примере элемент grain указан с префиксом G@ , а регулярное выражение – с префиксом E@ . Для цели webser*
спецификатор типа цели указывать не требуется, т. к. подстрока является glob-выражением.
Составные сопоставления позволяют очень точно нацеливаться на миньоны, используя любые типы сопоставления Salt. Сопоставление по умолчанию — это сопоставление с использованием подстановок glob. Для выполнения сопоставления любого типа, кроме glob, следует добавить к строке сопоставления префикс, включающий соответствующую букву из таблицы 2 и следующий за ней символ @.
Таблица 2 – Ключи типов сопоставления в синтаксисе утилиты salt
| Ключ | Тип сопоставления | Пример | Альтернативные разделители |
| G | Grains glob | G@os:Ubuntu |
Да |
| E | PCRE Minion ID | E@web\d+\.(dev|qa|prod)\.loc |
Нет |
| P | Grains PCRE | P@os: (RedHat|Fedora|CentOS) |
Да |
| L | Список миньонов | L@minion1.example.ru,minion3.domain.ru or
bl*.domain.ru |
Нет |
| I | Pillar glob | I@pdata:atomport |
Да |
| J | Pillar PCRE | J@pdata:^(atom|port)$ |
Да |
| S | Подсеть/ IP-адрес | S@192.168.1.0/24 or
S@192.168.1.100 |
Нет |
| R | Range cluster | R@%atom.port |
Нет |
| N | Группа узлов | N@group1 |
Нет |
Сопоставления могут быть объединены с помощью логических операторов and, or,
not.
Например, в приведённом ниже вызове salt будут выбраны все миньоны, работающие на операционной системе Debian, имя хоста которых начинается с подстроки ’webserv’ , а также все миньоны, имя хоста которых соответствует регулярному pcre-выражению ’web-dc1-srv.*’:
salt -C 'webserv* and G@os:Debian or E@web-dc1-srv.*' test.version
Возможно исключение из результата сопоставления миньона по его идентификатору:
salt -C 'not web-dc1-srv' test.version
2.1. Порядок выполнения сопоставлений
Для явного указания порядка выполнения отдельных сопоставлений в рамках составного сопоставления следует сгруппировать их с помощью круглых скобок:
salt -C '( ms-1 or G@id:ms-3 ) and G@id:ms-3' test.version
Круглые скобки и выражения необходимо отделять пробелами. Несоблюдение этого правила может привести к неправильному нацеливанию!
2.2. Альтернативные разделители
Сопоставления, которые выполняют нацеливание на основе пары «ключ-значение», в качестве разделителя используют двоеточие ( : ). Типы сопоставления со значением ’Yes’ в столбце «Альтернативные разделители» таблицы 2 поддерживают указание альтернативного символа-разделителя.
Альтернативный символ-разделитель указывается между ведущим символом, обозначающим тип сопоставления, и символом @. Это позволяет избежать неправильной интерпретации шаблона в случае, если двоеточие ( : ) является частью обхода структуры данных элемента grain или pillar.
Пример:
salt -C 'J|@atom|port|^atom:port$ or J!@gitrepo!https:
//github.com:example/project.git' test.ping
2.3. Группы узлов
Группы узлов объявляются с использованием спецификации составной цели.
Параметр главного файла конфигурации nodegroups используется для определения групп узлов. Ниже приведён пример конфигурации группы узлов в файле /etc/salt/master:
nodegroups:
group1:
'L@atom.domain.ru,port.domain.ru,project.domain.ru or bl*.domain.ru'
group2: 'G@os:Debian and atom.domain.ru'
group3: 'G@os:Debian and
N@group1'
group4:
- 'G@atom:port'
- 'or'
-
'G@atom:project'
Префикс L в группе group1 соответствует списку миньонов, а префикс G в
группе group2 соответствует элементам grain.
Имена групп также можно предварять знаком дефиса, например:
nodegroups:
- group1:
'L@atom.domain.ru,port.domain.ru,project.domain.ru or bl*.domain.ru'
Группы узлов могут ссылаться на другие группы узлов, как показано в group3. При обнаружении циклической ссылки регистрируется сообщение об ошибке.
Для нацеливания на группу узлов в CLI используйте опцию -N:
salt -N group1 test.version
При добавлении или изменении групп узлов в главном файле конфигурации мастер необходимо перезапустить.
Без перезагрузки доступен ограниченный объем функций, таких как нацеливание на группу узлов с помощью опции -N из командной строки.
Определение групп узлов в виде списков MINION ID
Список идентификаторов миньонов обычно определяется следующим образом:
nodegroups:
group1: L@host1,host2,host3
Список идентификаторов миньонов можно также определить как список YAML, например:
nodegroups:
group1:
- host1
- host2
- host3