【问题标题】:Ansible: how to filter using varibleAnsible:如何使用变量进行过滤
【发布时间】:2020-02-03 13:35:49
【问题描述】:

我有 ansible-playbook,它给出了debug 输出中的行列表。 我可以使用string(exp:CUST)过滤调试输出,但我正在努力使用变量过滤列表。

- debug:
    msg: "{{ List.msg | select('match', '^(CUST)[0-9]+') | list }}"

List msg output:

CUST1
CUST2
NEW1
NEW2

通过上述调试命令,我在过滤后的输出中得到 CUST1、CUST2。

- set_fact:
    filter: "{{ fileout.results[0].content }}"

filter 以上生成“CUST”,我想在上面的调试命令中使用这个filter 变量。

使用下面的语法我什么也得不到,可能是 ansible 没有把它当作适当的变量。

- debug:
    msg: "{{ List.msg | select('match', '^("{{ filter }}")[0-9]+') | list }}"

请帮忙。

提前致谢。

【问题讨论】:

    标签: ansible


    【解决方案1】:

    可以隔离正则表达式filter 的声明并简化引用。例如

      vars:
        List:
          msg: ['CUST1','CUST2','NEW1','NEW2']
        Patterns: ['CUST','NEW']
    
      tasks:
        - debug:
            msg: "{{ List.msg | select('match', filter) | list }}"
          vars:
            filter: '^{{ item }}[0-9]+'
          loop: "{{ Patterns }}"
    

    给予

        "msg": [
            "CUST1", 
            "CUST2"
        ]
    
        "msg": [
            "NEW1", 
            "NEW2"
        ]
    

    【讨论】:

    • 嗨弗拉基米尔,非常感谢您的帮助.. 上述解决方案完美运行.. 我所做的唯一更改是使用 Pattern 作为列表.. loop: "{{ [ Patterns ] }} .. 这是因为在我的任务中,过滤参数是一个动态值,它可以是 CUST 或任何东西。所以我在vars_prompt 中定义了Patterns
    • ` vars_prompt:` ` - name: Patterns` ` 提示:“请输入:”` `private: no`
    • 事实上,我最初的想法是获取下面问题中的参数。但我没能解决它,因此我像这样改变了我的过滤方法.. stackoverflow.com/questions/60023625/…>`
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    • 1970-01-01
    • 2016-01-07
    • 2023-02-21
    • 1970-01-01
    相关资源
    最近更新 更多