从 json 输出中提取一个变量,然后使用 ansible 调试和注册输出

you*_*sef 6 json ansible

嗨,我在执行 curl 解析并注册回 ansible 后,遇到了从 json 输出中提取的变量之一的问题

剧本:

- name: debug stdout
  debug: 
    msg: "{{ result.stdout | from_json }}"
  register: dataresult

- name: debug fact
  debug:
    msg: "{{ dataresult.data.start_time_string }}"
Run Code Online (Sandbox Code Playgroud)

输出 :

TASK [backup_api : debug stdout] 
***********************************************
task path: /home/ansible/cm-dha/roles/backup_api/tasks/main.yml:36
ok: [127.0.0.1] => {
   "msg": {
       "data": [
           {
            "backup_id": 40362,
            "certified": null,
            "instance_id": 148,
            "start_time": 1506985211,
            "start_time_string": "10/03/2017 03:00:11 am"
           }
       ],
      "timestamp": 1507022232
   }
Run Code Online (Sandbox Code Playgroud)

}

错误:

致命:[127.0.0.1]:失败!=> { "failed": true, "msg": "字段 'args' 有一个无效值,它似乎包含一个未定义的变量。错误是:'dict object' 没有属性 'data'\n \n错误似乎在 '/home/ansible/cm-dha/roles/backup_api/tasks/main.yml':第 48 行,第 5 列,但可能\n在文件中的其他地方,具体取决于确切的语法问题。 \n\n违规行似乎是:\n\n\n - 名称:调试事实\n ^ 此处\n"

尝试提取值 start_time_string 时发生错误

那么如何做到这一点可能是因为我尝试了太多东西,例如使用 with_items、with_dict、模拟 data[] 输出以进行调试,甚至执行 json 查询但没有成功

所以这里有什么帮助吗?

Kon*_*rov 7

不要debug用于分配事实,set_fact而是使用:

- name: debug stdout
  set_fact: 
    dataresult: "{{ result.stdout | from_json }}"

- name: debug fact
  debug:
    msg: "{{ dataresult.data[0].start_time_string }}"
Run Code Online (Sandbox Code Playgroud)