解析 ansible 事实时出现 ansible JMESPATH 错误

ansible JEMSPATH errors while parasing ansible facts

我正在尝试从下面的 ansible 事实中过滤所有包含 "RegButton-" 的字符串,并将输出用作下一个播放中的项目列表。 尝试使用 json_query 过滤器但失败并显示以下错误

可靠的事实

{
    "ansible_facts": {
        "srcgrpname": [
            "RegButton-48773",
            "test_vio",
            "RegButton-23395",
            "RegButton-520859",
            "RegButton-743141",
            "RegButton-297578",
            "RegButton-186156"
        ]
    },
    "changed": false
}

剧本条目

  - name: "Filter Regbutton policy Names"
    set_fact:
      srcgrpname2: "{{ resultid1 | json_query(query) }}"
    vars:
        query: "ansible_facts.srcgrpname[?contains(@, 'RegButton-') == `true`]"

我收到错误。

{
    "msg": "JMESPathError in json_query filter plugin:\nIn function contains(), invalid type for value: RegButton-48773, expected one of: ['array', 'string'], received: \"unknown\"",
    "_ansible_no_log": false
} 

可以使用 selectregex。例如下面的任务

- set_fact:
    srcgrpname2: "{{ ansible_facts.srcgrpname|
                     select('regex', '^RegButton-(.*)$')|
                     list }}"
- debug:
    var: srcgrpname2

给予

"srcgrpname2": [
    "RegButton-48773", 
    "RegButton-23395", 
    "RegButton-520859", 
    "RegButton-743141", 
    "RegButton-297578", 
    "RegButton-186156"
]


笔记