saltstack正则匹配主机

时间:2019-09-23
本文章向大家介绍saltstack正则匹配主机,主要包括saltstack正则匹配主机使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、正则语法

语法 说明 表达式实例 完整匹配的字符串
. 匹配任意除换行字符"\n"外的字符,在DOTALL模式中也能匹配换行符 a.c abc
\ 转移字符,使后一个字符改变原来的意思,如果字符串中有*需要匹配,可使用\*或者字符集[*] a\.c a.c
[...] 字符集,对应的位置可以是字符集中任意字符。 a[bcd]e abe、ace、ade
\d 数字:0~9 a\dc a1c
\D 非数字:[^\d] a\Dc abc
\s 空白字符:[<空格>\t\r\n\f\v] a\sc a c
\S 非空白字符:[^\s] a\Sc abc
\w 字符[A-Za-z0-9] a\wc abc
\W [^\w] a\Wc 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
\Z 仅匹配字符串结尾 abc\Z 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@web\d+\(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