在使用 SaltStack 对主机进行批量管理的时候,因为不同的服务器组所做的业务功能不同,因此为了更加方便的管理,势必要对主机进行分组管理。
因此就自己在分组使用的过程中有以下一点记录下。
参考 SaltStack 的官方文档 4.4 Compound matchers 和 4.3. Node groups 知道,对目标服务器分组有以下七种方式,这七种方式的标示符分别为:
- G -- 针对 Grains 做单个匹配,例如:G@os:Ubuntu
- E -- 针对 minion 针对正则表达式做匹配,例如:E@web\d+.(dev|qa|prod).loc
- P -- 针对 Grains 做正则表达式匹配,例如:P@os:(RedHat|Fedora|CentOS)
- L -- 针对 minion 做列表匹配,例如:L@minion1.example.com,minion3.domain.com or bl*.domain.com
- I -- 针对 Pillar 做单个匹配,例如:I@pdata:foobar
- S -- 针对子网或是 IP 做匹配,例如:S@192.168.1.0/24 or S@192.168.1.100
- R -- 针对客户端范围做匹配,例如: R@%foo.bar
然后我自己在做分组的时候,尝试了下 L
是否可以使用正则表达式
尝试一:
nodegroups:
# group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com and bl*.domain.com'
# group2: 'G@os:Debian and foo.domain.com'
TEST1: 'L@JF1-TEST1-001,JF1-TEST1-002,JF-TEST1-0[0-9][0-9]'
执行命令 sudo salt -N TEST1 test.ping
结果为:
JF1-TEST1-002:
True
JF1-TEST1-001:
True
只会出现两台服务器,后面的不能匹配。
尝试二:
nodegroups:
# group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com and bl*.domain.com'
# group2: 'G@os:Debian and foo.domain.com'
TEST1: 'L@JF1-TEST1-001,JF1-TEST1-002 or JF-TEST1-0[0-9][0-9]'
执行命令 sudo salt -N TEST1 test.ping
结果为:
JF1-TEST1-002:
True
JF1-TEST1-001:
True
JF1-TEST1-003:
True
JF1-TEST1-004:
True
JF1-TEST1-006:
True
JF1-TEST1-005:
True
结果是所有的都匹配成功了
尝试三
nodegroups:
# group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com and bl*.domain.com'
# group2: 'G@os:Debian and foo.domain.com'
TEST1: 'L@JF-TEST1-0[0-9][0-9]'
执行结果为:
No minions matched the target. No command was sent, no jid was assigned.
表示没有匹配到任何一个
结论
使用 L
列表的方式,必须把 minion 列出来,或者是列出几台后,在后面接 or 或者 and 表达式, or 或者 and 后面接的表达式后面可以使用正则表达式。
注:想使用正则表达式,最好的方式就是使用
E
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。