saltstack正则匹配主机

一、正则语法

语法 | 说明 | 表达式实例 | 完整匹配的字符串
:-: | :-: | :-: | :-: | :-:
. | 匹配任意除换行字符" "外的字符,在DOTALL模式中也能匹配换行符 |a.c|abc
| 转移字符,使后一个字符改变原来的意思,如果字符串中有*需要匹配,可使用*或者字符集[*] |a.c|a.c
[...] | 字符集,对应的位置可以是字符集中任意字符。|a[bcd]e | abe、ace、ade
d |数字:0~9 |adc|a1c
D |非数字:[^d]|aDc|abc
s |空白字符:[<空格> fv]| asc |a c
S |非空白字符:[^s]|aSc |abc
w |字符[A-Za-z0-9]|awc|abc
W |[^w]|aWc|ac

  • |匹配前一个字符0次或无限次|abc*|abcc
  • |匹配前一个字符1次或无限次|abc*|abcc
    ? |匹配前一个字符0次或1次|abc?|ab、abc
    {m} |匹配前一个字符m次 |ab{2}c|abbc
    {m,n} |匹配前一个字符m次,m和n可以省略,若省略m,则匹配0至n次,若省略n,则匹配m至无限次|ab{1,2}c|abc、abbc
    ^ |匹配字符串开头,在多行模式中匹配每一行的开头|^abc|abc
    $ |匹配字符串末尾,在多行模式中匹配每一行的末尾|abc$|abc
    A |进匹配字符串开头|Aabc|abc
     |仅匹配字符串结尾|abc|abc

以特定字符开头或结尾的匹配方式:

[root@29-server ~]# salt -E "^minion-.*" test.ping 
 minion-one: 
    True 
[root@29-server ~]# salt -E ".*-one$" test.ping 
 minion-one: 
    True 
[root@29-server ~]# salt -E 'm{0, 1} inio[m, n]-one$' test.ping 
 minion-one: 
    True

分组匹配的方式:

[root@29-server ~]# salt -E 'minion-((one)|(other))' test.ping 
 minion-one: 
    True 
[root@29-server ~]# salt -E 'minion-(one)?' test.ping 
 minion-one: 
    True

二、列表匹配

有时候,我们只想匹配一个指定列表里面的主机并进行远程执行操作,这时可能全局匹配方式和正则表达式方式都无法很好地完成任务,这种情况下我们可以直接使用-L选项进行列表匹配。

[root@29-server ~]# salt -L "minion-one, minion-two, minion-three" test.ping 
minion-one: 
    True 
minion-two: 
    True 
minion-three: 
    True

通常列表匹配的主机都写在master的配置文件中,/etc/salt/master中以nodegroups形式出现,包括正则匹配全局匹配等方式都可以写在配置文件中,然后通过分组匹配选项-N加上nodegroups名称进行匹配。

[root@29-server ~]# cat /etc/salt/master |grep -vE "^$|#"
nodegroups:
  testgroup: "minion-one"
[root@29-server ~]# salt -N "testgroup" test.ping
minion-one:
    True

三、grains匹配

我们可以使用Grains定位主机:利用-G或—grain:对只是CentOS的机器进行定位。

[root@29-server ~]# salt -G "os:CentOS" test.ping
minion-one:
    True

定位系统版本是7.6的主机,如下所示。

[root@29-server ~]# salt "minion-one" grains.item osrelease
minion-one:
    ----------
    osrelease:
        7.6.1810
[root@29-server ~]# salt -G "osrelease:7.6.1810" test.ping
minion-one:
    True

四、pillars匹配

创建两个自定义的pillar数据

[root@29-server]# tree /srv/pillar/
/srv/pillar/
├── test.sls
└── top.sls

[root@29-server ~]# cat /srv/pillar/top.sls 
base:
  '*':
    - test
    
[root@29-server ~]# cat /srv/pillar/test.sls 
name: wang
role: aaa
  
[root@29-server ~]# salt '*' pillar.items
minion-one:
    ----------
    name:
        wang
    role:
        aaa

匹配role值是Web的主机并执行远程命令:

[root@29-server ~]# salt -I "name:wang" test.ping
minion-one:
    True

五、复合匹配

复合匹配如下所示,这些匹配方式之间用逻辑运算符进行组合,同时用@符号来规定每部分匹配的类型。这段匹配的含义是匹配所有minion-开头的并且操作系统是CentOS且不能以two结尾的主机。

[root@29-server ~]# salt -C 'minion-* and G@os:CentOS not E@.*-two$' test.ping
minion-one:
    True

复合匹配可以混合所有的Salt匹配主机方法,以下为官方文档的所有匹配方式。

字母 匹配类型 示例
G Grains glob G@os:Ubuntu
E PCRE Minion ID E@webd+(dev|qa|prod).loc
P Grains PCRE P@os:(RedHat|Fedora|CentOS)
L List of minions L@agent1,agent2,agent3
I Pillar glob I@pdata:foobar
S Subnet/ IP address S@192.168.1.0/24 or S@192.168.2.0/24
R Range cluster R@%foo.bar
原文地址:https://www.cnblogs.com/wangyajian/p/11572572.html