我们远程执行命令或者state文件的目标主机就是target,satl本身就是用来大批量管理我们的计算机系统的,而target就是用来匹配我们管理的目标主机,从而达到批量管理的效果,接下来就以远程执行命令的案例来演示匹配的一些方法,这些方法同样适用于state文件

单台主机

#这里匹配的是kubernetes-node1,kubernetes-node1为minion在master注册的名称,而不是客户端的主机名
salt kubernetes-node1 test.ping

shell通配符(*和?)

#匹配kubernetes开头,结尾为任意多个字符的主机
salt kubernetes* test.ping
#所有主机,必须加引号
salt "*" test.ping
#匹配kubernetes开头,然后一个任意字符,然后node,最后任意一个字符的主机
salt kubernetes?node? test.ping

shell正则表达式

#匹配以k开头,中间任意多个字符,以0到9结尾的主机
salt -E "^k.*[0-9]$" test.ping

列表

#匹配多台主机,主机名需要写全,多台主机用逗号分隔
salt -L "kubernetes-node1,kubernetes-node2" test.ping

grains匹配

#匹配grains信息里面os的值为CentOS的主机
salt -G "os:CentOS" test.ping
#与上面不同的地方就是grains的值可以使用shell正则表达式
salt -P "os:^C" test.ping

pillar匹配

#匹配pillar信息里面apache的值为http的主机
salt -I "apache:httpd" test.ping
与上面不同的地方就是pillar的值可以使用shell正则表达式
salt -J "apache:^h" test.ping

IP地址匹配

#匹配单个IP
salt -S "192.168.3.234" test.ping
#匹配网段
salt -S "192.168.3.0/24" test.ping

分组匹配(需要自己在master配置文件建立分组)

创建分组,编辑配置文件/etc/salt/master

#以下为配置模板案例
nodegroups:
  group1: 'L@foo.domain.com,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组执行操作
salt-N group1 test.ping

复合匹配(多个匹配条件)

#匹配IP地址为192.168.3.0/24网段,并且grains的os为CentOS的主机
salt -C "S@192.168.3.0/24 and G@os:CentOS" test.ping
#匹配IP地址为192.168.3.0/24网段,或者以2结尾的主机
salt -C "S@192.168.3.0/24 or E@^.*2$" test.ping


最后还有一种匹配方法 -R ,找了相当资料没有搞明白是如何使用,大家可以查询官方文档相关说明。只要大家撑握上面的一些方法后就能够非常灵活的匹配我们需要批量操作的主机了