TARGETING MINIONS
定位minions,指定哪些minions应该执行管理命令或通过匹配主机名、系统信息、定义的组,甚至以上条件的组合来执行states状态。
例如,命令salt web1 apache.signal restart,可以重新启动机器web1上的Apache httpd服务,并且该命令将仅在该这一个minion上运行。
类似地,当使用States时,以下top file文件指定了只有web1 minion应该执行webserver.sls的内容:
base: 'web1': - webserver
讯享网
简单的目标直接匹配、glob通配符匹配、regex正则表达式以及列表,将可以涵盖许多的使用用例,其中有些甚至可以涵盖所有用例,但除此之外还有更灵活并强大的选项。
大家也可以查看github上的这份资料:Targeting Minions
TARGETING WITH GRAINS
Grains接口内置于Salt中,以允许通过系统属性来定位目标的minions。 因此,可以调用运行特定操作系统或特定内核的minions执行功能函数。
通过将-G选项传递给salt,指定一个grain和一个glob表达式以匹配grain的值来完成对minions的调用。 定义目标的语法是grain key,后跟一个glob表达式:“os:Arch*”。
讯享网salt -G 'os:Fedora' test.version
所有那些运行Fedora系统的minions会返回真。
可以执行grains.items salt函数查看有哪些可用的grains:
salt '*' grains.items
了解更多使用grains进行目标minions定位的知识,可以参阅这个资料。
COMPOUND TARGETING
New in version 0.9.5.
可以结合使用多个目标接口来确定最终执行命令的目标minions。 可以使用and或or组合这些目标。 下面是一个很好的例子:
讯享网salt -C 'G@os:Debian and webser* or E@db.*' test.version
在这个例子中,id是以webser开头并且正在运行Debian系统的任何minions,或者任何以db开头的minions将被匹配。
匹配器的类型默认为glob,但可以使用相应的字母后跟@符号指定使用其它的类型。 在上面的例子中,G@一起使用表示匹配grain,与E@一起表示使用正则表达式。 webser*中没有使用表示目标类型的符号,因为它是一个glob。
有关使用复合定位的更多信息,请点击此处。
NODE GROUP TARGETING
New in version 0.9.5.
对于某些场景下,使用预定义的minions分组来执行命令会更加方便。 这可以使用nodegroups分组来完成。 节点组允许在master配置文件中声明预定义的复合目标,作为一种复杂复合表达式的简写。下面是一个例子。
nodegroups: group1: ',bar.domain.com,baz.domain.com and bl*.domain.com' group2: 'G@os:Debian and foo.domain.com' group3: 'G@os:Debian and N@group1'
ADVANCED TARGETING METHODS
在Salt中有很多方法可以实现定位一个minion或一组minions 。
Matching the minion id
每个minion都需要一个唯一的标识符。 默认情况下,当minion第一次启动时,它会选择其FQDN作为该标识符。 可以通过minion的id配置项指定minion id。
Tip:minion id和minion keys ,由于minion id被用于生成minion的公钥/私钥,如果它发生更改,则master必须重新接受新密钥,就像minion是个新主机一样。
GLOBBING
Salt使用的默认匹配类型是围绕minion id的shell样式的globbing。 这也适用于top file文件中的states状态。
注意:必须在单引号中包含使用globbing的salt调用,以防止shell在调用Salt之前扩展globs。
匹配所有的minions:
讯享网salt '*' test.version
匹配那些在example.net域中的,或者任何在example域的minions:
salt '*.example.net' test.version salt '*.example.*' test.version
匹配所有在example.net域中且名称符合webN规则的minions (web1.example.net, web2.example.net … webN.example.net):
讯享网salt 'web?.example.net' test.version
匹配web1 到 web5 的minions:
salt 'web[1-5]' test.version
匹配 web1 和 web3 minions:
讯享网salt 'web[1,3]' test.version
匹配 web-x, web-y, 和 web-z minions:
salt 'web-[x-z]' test.version
注:有关其他定位方法,请查看前文关于复合匹配器的介绍文档。
REGULAR EXPRESSIONS
可以使用与Perl兼容的正则表达式来匹配Minions。
匹配web1-prod和web1-devel minions:
讯享网salt -E 'web1-(prod|devel)' test.version
在State的top文件中使用正则表达式时,必须在第一个选项指定匹配器的类型。 以下示例在上述minions中执行webserver.sls的内容。
base: 'web1-(prod|devel)': - match: pcre - webserver
LISTS
在最基础的级别,还可以简单地直接指定一个minion IDs的列表:
讯享网salt -L 'web1,web2,web3' test.version
Targeting using Grains
可以通过grains数据来定位minions。
例如,下面的命令中将匹配所有运行CentOS系统的 minions:
salt -G 'os:CentOS' test.version
匹配所有运行64-bit CPUs的minions, 匹配上的minion将返回一个num_cpus的grain的值:
讯享网salt -G 'cpuarch:x86_64' grains.item num_cpus
此外,globs可以用于grains匹配,嵌套在字典中的grains可以通过为遍历的每个级别添加冒号来匹配。 例如,以下内容将匹配具有名称为ec2_tags的grain的主机,该grain的值是一个名为environment的键的字典,键值中包含单词production的值:
salt -G 'ec2_tags:environment:*production*'
重要:查看文章Is Targeting using Grain Data Secure? 以了解使用grains数据进行目标定位的安全相关信息。
Targeting using Pillar
可以使用pillar数据辅助定位minions。 这可以帮助在定位目标minions时实现更大的控制和灵活性。
注:开始使用Pillar定位minions,需要通过以下命令在Salt Master上为每个Minion创建一个Pillar数据缓存:
salt'*'saltutil.refresh_pillar或salt'*'saltutil.sync_all。 此外,Pillar数据缓存也会在运行highstate期间被填充。 Pillar数据更改后,均需要通过运行上述命令来刷新缓存,以使此定位方法正常工作。
例如:
讯享网salt -I 'somekey:specialvalue' test.version
与Grains一样,可以使用globbing匹配Pillar中的嵌套值,方法是为每个要遍历的级别添加冒号。 下面的示例将匹配具有名为foo的pillar的minions,pillar的值是一个dict,该dict具有名为bar的key,其值以baz开头:
salt -I 'foo:bar:baz*' test.version
注:
-I,等同于--pillar参数,用于在命令行中指定pillar数据。
Subnet/IP Address Matching
我们可以很容易的使用IP地址或子网地址来匹配minions:
讯享网salt -S 192.168.40.20 test.version salt -S 2001:db8::/64 test.version
注:
-S,等同于--ipcidr参数,表示使用Subnet或IP地址的匹配类型。
下面是一个在复合匹配规则中使用CIDR ip进行匹配的例子:
salt -C 'S@10.0.0.0/24 and G@os:Debian' test.version
甚至可以把Subnet/IP匹配规则用在states top file中:
讯享网'172.16.0.0/12': - match: ipcidr - internal
Compound matchers
复合匹配器允许使用Salt的任何匹配器进行非常精细的微小目标定位。 默认匹配器是一个glob匹配,就像CLI和top file文件匹配一样。 要使用除glob之外的任何内容进行匹配,请在匹配字符串前加上下表中的相应字母,后跟@符号。
| Letter | Match Type | Example | Alt Delimiter? |
|---|---|---|---|
| G | Grains glob | G@os:Ubuntu | Yes |
| L | List of minions | ,minion3.domain.com or bl*.domain.com | No |
| I | Pillar glob | I@pdata:foobar | 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 |
以及下面三个与使用正则有关的符号:
E,PCRE Minion ID,例如:E@web\d+\.(dev|qa|prod)\.locP,Grains PCRE,例如:P@os:(RedHat|Fedora|CentOS)J,Pillar PCRE,例如:J@pdata:^(foo|bar)$
可以使用布尔函数的and,or和not语法连接多个匹配器。
例如,以下字符串匹配所有Debian minions,并且其主机名以webserv开头,或者是任何具有与正则表达式web-dc1-srv.*匹配的主机名的minions:
salt -C 'webserv* and G@os:Debian or E@web-dc1-srv.*' test.version
把上面的匹配方法继续使用到一个 top file文件中时:
讯享网base: 'webserv* and G@os:Debian or E@web-dc1-srv.*': - match: compound - webserver
New in version 2015.8.0.
根据其ID排除minion也是可能的:
salt -C 'not web-dc1-srv' test.version
复合匹配功能不支持2015.8.0之前的版本中将not放在规则开头的地方。 相反,需要按以下方法做个变通:
讯享网salt -C '* and not G@kernel:Darwin' test.version
salt -C '* and not web-dc1-srv' test.version
PRECEDENCE MATCHING
可以将匹配器与括号组合在一起,以明确声明组之间的优先级。
讯享网salt -C '( ms-1 or G@id:ms-3 ) and G@id:ms-3' test.version
注:请务必注意,括号和目标之间需要空格。 不遵守此规则可能导致不正确的定位结果!
ALTERNATE DELIMITERS
New in version 2015.8.0.
基于键值对的匹配器使用冒号(:)作为分隔符。 在上表的Alt Delimiters列中带有Yes的匹配器表示支持指定备用分隔符。
这是通过在前导匹配器字符和@模式分隔符之间指定备用分隔符来完成的。 这避免了在以下情况下对模式的错误解释:
salt -C 'J|@foo|bar|^foo:bar$ or J!@gitrepo!https://github.com:example/project.git' test.ping
Node groups
使用复合目标匹配规范声明节点分组。 参照上一章节以了解复合目标匹配的使用方法。
Master配置文件参数nodegroups用于定义节点分组。 下面是一份/etc/salt/master中的示例节点组配置:
讯享网nodegroups: group1: ',bar.domain.com,baz.domain.com or bl*.domain.com' group2: 'G@os:Debian and foo.domain.com' group3: 'G@os:Debian and N@group1' group4: - 'G@foo:bar' - 'or' - 'G@foo:baz'
注:group1中的
L匹配一个minions列表,而group2中的G匹配特定的grain。 有关更多详细信息,请参阅复合匹配器文档。从Salt的2017.7.0版本开始,组名也可以加上破折号。 这使得该用法与Salt的许多其他领域一致。 例如:
nodegroups: - group1: ',bar.domain.com,baz.domain.com or bl*.domain.com'
New in version 2015.8.0.
注:节点分组可以引用其他节点组,如group3中所示。 确保不要出现循环引用,否则会导致错误消息。
New in version 2015.8.0.
复合节点分组可以是字符串值或字符串值的列表。 如果需要空格作为模式的一部分,这可能会是一个问题。 要匹配CLI上的节点组,请使用-N命令行选项:
讯享网salt -N group1 test.version
New in version 2019.2.0.
注:历史上,
N@分类器不能用于CLI或top file文件中的复合匹配,它只能在nodegroupsmaster配置文件参数中识别。 截至2019.2.0版本,此限制已不再存在。
要匹配top file文件中的节点组,请确保在节点组名称后面的行上放置- match:nodegroup。
base: group1: - match: nodegroup - webserver
注:将节点组添加到或修改master配置文件时,必须重新启动master节点才能完全识别这些更改。可以在不重新启动的情况下使用有限数量的功能,例如从命令行使用-N进行目标定位。
DEFINING NODEGROUPS AS LISTS OF MINION IDS
一个简单的minion IDs列表传统上是这样定义的:
讯享网nodegroups: group1: L@host1,host2,host3
还可以使用下面的方式定义列表:
nodegroups: group1: - host1 - host2 - host3
New in version 2016.11.0.
Batch Size
-b(或--batch-size)选项允许一次仅在指定数量的minions上执行命令。 支持使用百分比和有限数字。
讯享网salt '*' -b 10 test.version salt -G 'os:RedHat' --batch-size 25% apache.signal restart
这只会一次在10个目标minions上运行test.version,然后在25%的匹配os:RedHat的minions上重启apache并一直持续到任务全部完成。 这使得像滚动重启Web服务器这样的工作,或者salt使用carp对BSD防火墙进行维护等工作都变得更容易。
批处理系统维护一个运行minions的窗口,因此,如果目标总共有150个minions并且批量大小为10,则命令被发送到10个minions,当一个minion返回时,命令被发送到另外一个minion。 因此,这项工作一直在10个minions上运行。
New in version 2016.3.
--batch-wait 参数可用于指定minion返回后等待的秒数,然后再将命令发送给新的minion。
SECO Range
SECO range是由Yahoo!开发和维护的基于集群的元数据存储。
Range project的项目地址是: https://github.com/ytoolshed/range
更多关于range的资料: https://github.com/ytoolshed/range/wiki/
PREREQUISITES
要在Salt中使用range支持,需要一个range服务器。 设置range服务器超出了本文档的范围。 Apache模块包含在range发行版本中。
使用一个range服务器,必须定义集群文件。 这些文件是用YAML编写的,用于定义集群中包含的主机。 有关编写YAML范围文件的完整文档如下:
https://github.com/ytoolshed/range/wiki/"yamlfile"-module-file-spec
此外,必须在salt master上安装Python seco range库。 可以通过以下命令验证它们是否已正确安装:
python -c 'import seco.range'
如果未返回任何错误,则表明在salt master服务器上成功安装range。
PREPARING SALT
必须通过在master配置文件中设置range服务器的主机名和端口,在salt master上启用range支持:
讯享网range_server: my.range.server.com:80
在此之后,必须重新启动master服务器才能使更改生效。
TARGETING WITH RANGE
定义集群后,可以使用-R或--range标志使用salt命令对其进行定位。
例如,给定以下范围的YAML文件从range服务器提供:
$ cat /etc/range/test.yaml CLUSTER: host1..100.test.com APPS: - frontend - backend - mysql
有人可能会使用Salt定位test.com域中host1到host100,如下所示:
讯享网salt --range %test:CLUSTER test.version
下面的命令中将匹配到三个主机: frontend, backend, 和 mysql:
salt --range %test:APPS test.version
LOADABLE MATCHERS
New in version 2019.2.0.
内部定位是通过名为Matchers的代码块实现的。 从2019.2.0版本开始,可以动态加载匹配器。 目前无法创建新匹配器,但现有匹配器可以更改或扩展其功能函数。 有关Matchers的更多信息,请参阅Loadable Matchers 。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/14255.html