2017-06-19 46 views
1

我對創建的wpa_supplicant命名管道執行一個簡單的統計任務(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過濾器成功查詢其他值。

我錯過了什麼?

回答

2

我猜你想使用管道表達:

results[*].stat | [?exists].path 

從我JMESPath的低估在stat[?filter]過濾器應用於內部stat(以選擇是向下的路徑元素),但要應用過濾器選擇/拒絕stat兄弟姐妹,所以你應該停止與管道和過濾元件的進一步投影。

+0

謝謝,這從文檔中不明確。 –