简体   繁体   English

Ansible playbook 从 dict 获取值

[英]Ansible playbook get values from dict

I want to retrieve the id from a json dict based on a certain name.我想根据某个名称从 json dict 中检索 id。 In this case I would like to get the ID from the "WebLogic" and store it into a variable to use the ID in a next task.在这种情况下,我想从“WebLogic”中获取 ID 并将其存储到一个变量中,以便在下一个任务中使用该 ID。

The playbook:剧本:

- name: Get Tags 
  uri:
      url: "https://xx.xx-xx.xx{{ uat_env }}api/config/v1/autoTags"
      method: GET
      headers:
        Content-Type: application/json; charset=utf-8
        Authorization: xxx
      return_content: yes  
  register: data
            
- name: Print returned json dictionary
  debug:
    var: data.json
       - debug:
    msg: "{{ data.json['values'] | json_query(query) }}"
  vars:
    name: 'WebLogic'
    query: "[?name=='{{ name }}'].id"
- name: TEST
  set_fact:
    test: "{{ data.json['values'] | json_query([?name=='WebLogic'].id) }}"
    

  

Test run:测试运行:

PLAY [TEST] ********************************************************************
TASK [Get all UAT autoTags] ****************************************************
ok: [localhost]
TASK [Print returned json dictionary] ******************************************
ok: [localhost] => {
    "data.json": {
        "values": [
            {
                "id": "5c3849a4-a044-4a98-a67a-c1ea42d652ca",
                "name": "Apache"
            },
             
            {
                "id": "b37511f4-d4e8-4c77-a628-841dba5c65d8",
                "name": "WebLogic"
            }
        ]
    }
}
TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": [
        "b37511f4-d4e8-4c77-a628-841dba5c65d8"
    ]
}


TASK [TEST] ********************************************************************
fatal: [localhost]: FAILED! => {"msg": "template error while templating string: unexpected char '?' at 37. String: {{ data.json['values'] | json_query([?name=='WebLogic'].id) }}"}


PLAY RECAP *********************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

The message returns empty.消息返回空。

the problem is at the data.json.values syntax, please replace with data.json["values"]问题出在data.json.values语法上,请替换为data.json["values"]

the two tasks to show the difference:显示差异的两个任务:

  - debug:
      msg: "{{ data.json.values | json_query(query) }}"
    vars:
      name: 'WebLogic'
      query: "[?name=='{{ name }}'].id"

  - debug:
      msg: "{{ data.json['values'] | json_query(query) }}"
    vars:
      name: 'WebLogic'
      query: "[?name=='{{ name }}'].id"

update:更新:

To assign the value to a variable, below task should do it:要将值分配给变量,下面的任务应该这样做:

  - set_fact:
      my_var: "{{ data.json['values'] | json_query(query) }}"
    vars:
      name: 'WebLogic'
      query: "[?name=='{{ name }}'].id"

  - debug:
      var: my_var

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM