【问题标题】:Ansible regex_findall is not giving expected results with negative searchAnsible regex_findall 没有给出负搜索的预期结果
【发布时间】:2021-07-10 01:43:10
【问题描述】:

我的 ansible 否定正则表达式正在返回所有内容

所以我从 JSON 中获得了 dns 名称的结果,我正在尝试对其进行排序以创建一个自动化的 ansible 库存。 我有具有命名方案的服务器,例如:

abc02vsomeserver01.subdomain1.domain.gov
abc02someserver01.subdomain1.domain.gov
xyz03votherserver11.subdomain2.domain.gov
wyz03otherserver11.subdomain2.domain.gov
qrsmainserver02.maindomain.domain.gov

我将“v”服务器按环境划分,然后我想创建一个不是“v”服务器的包罗万象的组 所以!我正在尝试这样做:

{{ jsonOutput | json_query('json.response.results[].dnsName') | regex_findall('(?![a-z]{3}[0-9]{2}v)^.*', multiline=true) }}

当我将它插入https://pythex.org 时,它似乎确实有效。 但是 ansible 正在返回所有内容...... 我到底做错了什么?

【问题讨论】:

    标签: ansible python-regex


    【解决方案1】:

    这是因为json_query 发出一个list[str],当直接输入regex_findall 时,它不会成为一个换行符分隔的字符串,它与str(["alpha", "beta"]) 相同(例如['alpha', 'beta']),然后是多行正则表达式没有达到你的预期

    就像生活中的许多事情一样,有几种方法可以解决这个问题。一种是将结果输入|join("\n"),然后您可能会回到您认为开始的位置:

    - debug:
        msg: "{{ jsonOutput | json_query('json.response.results[].dnsName') | join('\n') | regex_findall('(?![a-z]{3}[0-9]{2}v)^.*', multiline=true) }}"
    

    另一个是承认它是list[str] 并使用| select("match", ...) 过滤器只允许匹配的项目:

        - debug:
            msg: >-
              {{ response | json_query('results[].dnsName')
              | select('match', '(?![a-z]{3}[0-9]{2}v)^.*')
              | list }}
          vars:
            response:
              results:
              - dnsName: abc02vsomeserver01.subdomain1.domain.gov
              - dnsName: abc02someserver01.subdomain1.domain.gov
              - dnsName: xyz03votherserver11.subdomain2.domain.gov
              - dnsName: wyz03otherserver11.subdomain2.domain.gov
              - dnsName: qrsmainserver02.maindomain.domain.gov
    

    同样产生:

        "msg": [
            "abc02someserver01.subdomain1.domain.gov",
            "wyz03otherserver11.subdomain2.domain.gov",
            "qrsmainserver02.maindomain.domain.gov"
        ]
    

    我猜这是个人喜好,哪种风格最适合你的剧本

    【讨论】:

    • 这太棒了!谢谢!!!那 lil join('\n') 成功了!完美!!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多