json_query在Ansible中获取json输出的值

时间:2019-03-01 01:02:42

标签: ansible

当我运行Ansible播放时,以下输出到shell:

TASK [java : debug] ************************************************************************************************************************************************************
ok: [10.3.16.114] => {
    "msg": {
        "changed": false,
        "examined": 1,
        "failed": false,
        "files": [
            {
                "attributes": "Directory, NotContentIndexed",
                "creationtime": 1551375173.18858,
                "filename": "jre1.8.0_201",
                "isarchive": false,
                "isdir": true,
                "ishidden": false,
                "islnk": false,
                "isreadonly": false,
                "isshared": false,
                "lastaccesstime": 1551375199.2058175,
                "lastwritetime": 1551375199.2058175,
                "owner": "NT AUTHORITY\\SYSTEM",
                "path": "C:\\Program Files\\Java\\jre1.8.0_201",
                "size": 205713652
            }
        ],
        "matched": 1
    }
}

我只需要path的值,以便可以将其用作在Windows内部设置动态java_home的变量。

我一直试图在yaml中使用json_query,但是这里存在知识限制。

- name: Obtain information about a folder
  win_find:
    paths: C:\Program Files\Java
    recurse: no
    file_type: directory
  register: java_folder

- set_fact:
    java_home_dir: "{{java_folder.file | json_query()}}"

1 个答案:

答案 0 :(得分:0)

这是一条简单的道路。需要对第一个元素进行寻址,因为“ 文件”是一个列表。

- set_fact:
    java_home_dir: "{{ java_folder.files[0].path }}"

如果列表中还有更多文件,则需要json_query。