3.9 KiB
Compound matchers
Compound matchers allow very granular minion targeting using any of
Salt's matchers. The default matcher is a glob <python2:fnmatch>
match, just as with CLI
and top file
matching.
To match using anything other than a glob, prefix the match string with
the appropriate letter from the table below, followed by an
@
sign.
Letter | Match Type | Example | Alt Delimiter? <target-alt-delimiters> |
---|---|---|---|
G | Grains glob | G@os:Ubuntu |
Yes |
E | PCRE Minion ID | E@web\d+\.(dev|qa|prod)\.loc |
No |
P | Grains PCRE | P@os:(RedHat|Fedora|CentOS) |
Yes |
L | List of minions | L@minion1.example.com,minion3.domain.com or bl*.domain.com |
No |
I | Pillar glob | I@pdata:foobar |
Yes |
J | Pillar PCRE | J@pdata:^(foo|bar)$ |
Yes |
S | Subnet/IP address | S@192.168.1.0/24 or S@192.168.1.100 |
No |
R | Range cluster | R@%foo.bar |
No |
N | Nodegroups | N@group1 |
No |
Matchers can be joined using boolean and
,
or
, and not
operators.
For example, the following string matches all Debian minions with a
hostname that begins with webserv
, as well as any minions
that have a hostname which matches the regular expression <python2:re>
web-dc1-srv.*
:
salt -C 'webserv* and G@os:Debian or E@web-dc1-srv.*' test.version
That same example expressed in a top file
looks like the following:
base:
'webserv* and G@os:Debian or E@web-dc1-srv.*':
- match: compound
- webserver
2015.8.0
Excluding a minion based on its ID is also possible:
salt -C 'not web-dc1-srv' test.version
Versions prior to 2015.8.0 a leading not
was not
supported in compound matches. Instead, something like the following was
required:
salt -C '* and not G@kernel:Darwin' test.version
Excluding a minion based on its ID was also possible:
salt -C '* and not web-dc1-srv' test.version
Precedence Matching
Matchers can be grouped together with parentheses to explicitly declare precedence amongst groups.
salt -C '( ms-1 or G@id:ms-3 ) and G@id:ms-3' test.version
Note
Be certain to note that spaces are required between the parentheses and targets. Failing to obey this rule may result in incorrect targeting!
Alternate Delimiters
2015.8.0
Matchers that target based on a key value pair use a colon
(:
) as a delimiter. Matchers with a Yes
in the
Alt Delimiters
column in the previous table support
specifying an alternate delimiter character.
This is done by specifying an alternate delimiter character between
the leading matcher character and the @
pattern separator
character. This avoids incorrect interpretation of the pattern in the
case that :
is part of the grain or pillar data structure
traversal.
salt -C 'J|@foo|bar|^foo:bar$ or J!@gitrepo!https://github.com:example/project.git' test.ping