首页 > 解决方案 > Ansible:如何使用变量进行过滤

问题描述

我有 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

解决方案


可以隔离正则表达式的声明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"
    ]

推荐阅读