如何筛选ansible stat存在标志?

如何筛选ansible stat存在标志?,ansible,jmespath,Ansible,Jmespath,我正在wpa_supplicant创建的命名管道上执行一个简单的stat任务(Ansible 2.3.1.0): - stat: path: "/var/run/wpa_supplicant/{{ item }}" with_items: - wifi register: wpa_stats sudo: true 执行后,变量包含以下数据: ok: [10.10.23.187] => { "wpa_stats": { "ch

我正在wpa_supplicant创建的命名管道上执行一个简单的stat任务(Ansible 2.3.1.0):

- stat:
    path: "/var/run/wpa_supplicant/{{ item }}"   
  with_items:
    - wifi
  register: wpa_stats   
  sudo: true
执行后,变量包含以下数据:

ok: [10.10.23.187] => {
    "wpa_stats": {
        "changed": false, 
        "msg": "All items completed", 
        "results": [
            {
                "_ansible_item_result": true, 
                "_ansible_no_log": false, 
                "_ansible_parsed": true, 
                "changed": false, 
                "invocation": {
                    "module_args": {
                        "checksum_algorithm": "sha1", 
                        "follow": false, 
                        "get_attributes": true, 
                        "get_checksum": true, 
                        "get_md5": true, 
                        "get_mime": true, 
                        "path": "/var/run/wpa_supplicant/wifi"
                    }
                }, 
                "item": "wifi", 
                "stat": {
                    "atime": 1497900522.6306846, 
                    "attr_flags": "", 
                    "attributes": [], 
                    "block_size": 4096, 
                    "blocks": 0, 
                    "charset": "binary", 
                    "ctime": 1497900290.0605242, 
                    "dev": 18, 
                    "device_type": 0, 
                    "executable": true, 
                    "exists": true, 
                    "gid": 0, 
                    "gr_name": "root", 
                    "inode": 796, 
                    "isblk": false, 
                    "ischr": false, 
                    "isdir": false, 
                    "isfifo": false, 
                    "isgid": false, 
                    "islnk": false, 
                    "isreg": false, 
                    "issock": true, 
                    "isuid": false, 
                    "mimetype": "inode/socket", 
                    "mode": "0770", 
                    "mtime": 1497900290.0605242, 
                    "nlink": 1, 
                    "path": "/var/run/wpa_supplicant/wifi", 
                    "pw_name": "root", 
                    "readable": true, 
                    "rgrp": true, 
                    "roth": false, 
                    "rusr": true, 
                    "size": 0, 
                    "uid": 0, 
                    "version": null, 
                    "wgrp": true, 
                    "woth": false, 
                    "writeable": true, 
                    "wusr": true, 
                    "xgrp": true, 
                    "xoth": false, 
                    "xusr": true
                }
            }
        ]
    }
}
但此筛选器返回一个空结果:

- debug:
    msg: "{{ wpa_stats | json_query('results[*].stat[?exists].path') | list }}"
如果我删除
[?exists]
过滤器,它工作正常:

- debug:
    msg: "{{ wpa_stats | json_query('results[*].stat.path') | list }}"
我也尝试过使用
=
。Jmespath已经安装,我正在使用JSON过滤器成功地查询其他值


我遗漏了什么?

我想您应该使用管道表达式:

results[*].stat | [?exists].path
根据我在
stat[?filter]
中对JMESPath的理解,filter应用于
stat
(选择路径中的元素),但您希望应用filter来选择/拒绝
stat
同级,因此您应该停止管道和过滤器元素的进一步投影