1、Globbing通配符

* 表示匹配所有

salt '*' test.pingsalt '*.example.net'test.pingsalt '*.example.*' test.ping

? 表示任意一个字符

salt 'web?.example.net'test.ping

[] 表示枚举或者一个区间

salt 'web[1-5]' test.pingsalt 'web[1,3]' test.pingsalt 'web-[x-z]' test.ping

2、regularexpressions正则表达式

同时匹配 web1-prod和web1-devel:

salt -E 'web1-(prod|devel)'test.ping

#-E表示使用正则表达式匹配

在sls文件中也可使用:

base:  'web1-(prod|devel)':  - match: pcre  - webserver

3、List列表

salt -L 'web1,web2,web3'test.ping

4、Grains模块

[root@linux-node1 ~]# salt -G os:CentOS cmd.run 'w'linux-node2.example.com:     19:43:02 up 49 min,  1 user,  load average: 0.06, 0.02, 0.00    USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT    root     pts/0    10.0.0.1         06:46    3:19   0.09s  0.09s -bashlinux-node1.example.com:     19:43:02 up 49 min,  1 user,  load average: 0.26, 0.07, 0.02    USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT    root     pts/0    10.0.0.1         06:46    2.00s  1.84s  1.74s /usr/bin/python#-G表示使用Grains进行匹配

自定义Grains:

[root@linux-node2 salt]# vim /srv/salt/grains                   web:    - nginx

在Master上查看

[root@linux-node1 ~]# salt '*' grains.item weblinux-node1.example.com:    ----------    web:        nginxlinux-node2.example.com:    ----------    web:

名字(即此处的web)不能和/etc/salt/minion中 roles冲突

在top.sls中使用Grains匹配Minion

[root@linux-node1 ~]# vim /srv/salt/top.sls base:  'web:nginx':    - match: grain    - apache[root@linux-node1 ~]# salt '*' state.highstate linux-node2.example.com:----------          ID: states    Function: no.None      Result: False     Comment: No Top file or external nodes data matches found     Started:     Duration:      Changes:   Summary------------Succeeded: 0Failed:    1------------Total states run:     1linux-node1.example.com:----------          ID: apache-install    Function: pkg.installed        Name: httpd      Result: True     Comment: Package httpd is already installed.     Started: 19:59:18.844017    Duration: 2694.508 ms     Changes:   ----------          ID: apache-install    Function: pkg.installed        Name: httpd-devel      Result: True     Comment: Package httpd-devel is already installed.     Started: 19:59:21.539596    Duration: 2.807 ms     Changes:   ----------          ID: apache-service    Function: service.running        Name: httpd      Result: True     Comment: Service httpd is already enabled, and is in the desired state     Started: 19:59:21.545357    Duration: 122.63 ms     Changes:   Summary------------Succeeded: 3Failed:    0------------Total states run:     3 [root@linux-node1 ~]# cat /srv/salt/apache.sls apache-install:  pkg.installed:    - names:      - httpd      - httpd-develapache-service:  service.running:    - name: httpd    - enable: True    - reload: True

 5、Pillar模块

[root@linux-node1 ~]# vim /etc/salt/master pillar_roots:  base:      - /srv/pillar#打开注释   [root@linux-node1 ~]# /etc/init.d/salt-master restart[root@linux-node1 ~]# mkdir -p /srv/pillar[root@linux-node1 ~]# cat /srv/pillar/apache.sls {% if grains['os'] == 'CentOS' %}apache: httpd{% elif grains['os'] == 'Debian' %}apache: apache2{% endif %}[root@linux-node1 ~]# vim /srv/pillar/top.sls base:  '*':    - apache# '*'表示让所有Minion可以看到apache这个Pillar[root@linux-node1 ~]# salt '*' saltutil.refresh_pillarlinux-node2.example.com:    Truelinux-node1.example.com:    True#刷新使Pillar生效[root@linux-node1 ~]# salt '*' pillar.itemslinux-node2.example.com:    ----------    apache:        httpdlinux-node1.example.com:    ----------    apache:        httpd[root@linux-node1 ~]# salt -I 'apache:httpd' test.pinglinux-node1.example.com:    Truelinux-node2.example.com:    True#-I表示使用Pillar进行匹配

6、Subnet/IP Address Matching使用网段或IP地址进行匹配

salt -S 192.168.40.20 test.pingsalt -S 10.0.0.0/24 test.ping

也可以在Pillar和sls文件里进行匹配

'172.16.0.0/12':   - match: ipcidr   - internal

注意:只能用于IPv4