【问题标题】:Regex matching in jinja2 filters (for use in saltstack)jinja2 过滤器中的正则表达式匹配(用于 saltstack)
【发布时间】:2016-11-28 14:54:38
【问题描述】:

似乎 Jinja2(Saltstack 支持)不支持正则表达式匹配,除非我遗漏了什么?许多利用 Jinja2 的框架,例如用于正则表达式过滤器的 Ansible have custom supportElsewhere 人们被指示编写自定义过滤器。

一些问题给知情人士,可能有助于理解这种情况:

  1. 在 Saltstack 中利​​用正则表达式匹配的最佳方法是什么? (我的用例相当简单:测试字符串是否以子字符串结尾,但问题更笼统)。
  2. 在 Jinja2 中没有标准解决方案的情况下,将其作为 Saltstack 中的标准扩展提供(类似于 Ansible 解决方案)是否是一个好主意?
  3. Jinja2 中没有标准正则表达式支持的原因是什么?在even Windows Powershell 支持正则表达式匹配的世界中,自从this perceived regression from Jinja2 compared to the previous version has been complained about since 2010 以来,我一定有一个原因失踪;但是,我在Jinja's github 中找不到任何问题?

【问题讨论】:

    标签: regex jinja2 salt-stack


    【解决方案1】:

    这是一篇过时的帖子,但我偶然发现它并帮助其他做同样事情的人..

    从 2017.7.0 开始,SaltStack 现在有 regex_search 和 regex_match:

    https://docs.saltstack.com/en/latest/topics/jinja/index.html#regex-search

    【讨论】:

      【解决方案2】:

      即使它是旧的,这仍然是谷歌搜索盐匹配正则表达式时的最高帖子。 2018.3.3可以写如下代码:

      {% if "abc" is match("*b*") %}
      ...
      {% endif %}
      

      相关文档链接:https://docs.saltstack.com/en/latest/topics/jinja/index.html#match

      【讨论】:

        【解决方案3】:

        你可以像这样匹配 State 和 Pillar 文件,

        例如,Top.sls

        base:
         '*':
           - servers.{{ grains.id }}
           {% if grains.id | regex_match('nyc(.*)', ignorecase=True) %}
           - data.region.nyc
           {% endif %}
           - ignore_missing: True
        

        任何与 nyc* 匹配的节点都将获得这些支柱值。这也适用于状态文件(在 2018.3.4 上测试)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-10-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-12
          • 1970-01-01
          • 2010-10-10
          • 1970-01-01
          相关资源
          最近更新 更多