• 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
  • 相关阅读:
    【逆向】《0day安全-软件漏洞分析技术》实验笔记2
    【逆向】《0day安全-软件漏洞分析技术》实验笔记1
    WorkWithPlus 13.15 升级!列表对象的优化效果显著!
    「版本更新」Genexus 16 Upgrade 9已发布!
    下一波数字化转型来临,我们需要选择更智能的开发工具
    太棒!企业和程序员都高兴!2-3个月打造全栈工程师
    GeneXus中如何使用聊天机器人
    「版本更新」GeneXus16 Upgrade 8的特性
    看完视频我终于明白:资深架构师角度的技术架构是这样!
    数据报告和分析:Dashboard
  • 原文地址:https://www.cnblogs.com/wangyajian/p/11572572.html
Copyright © 2020-2023  润新知