繁体   English   中英

如何解析字典列表并输出Ansible中的值?

[英]How parse a list of dictionary and out the values in Ansible?

我有以下json输出。 这是字典的清单。 我只想解析它并输出其值。

我尝试了以下游戏,但没有成功...

"output1": {
    "changed": false, 
    "msg": "All items completed", 
    "results": [
        {
            "item": [
                {
                    "Device_Name": "SW1"
                }, 
                {
                    "Interface": "GigabitEthernet1/0/7"
                }
                    ]
         }
    ]
}
    - name: Display output1...2
      debug:
        msg: "{{ item.1.Device_Name }};{{ item.1.Interface }}"
      with_subelements: 
        - "{{ output1.results }}"
        - item

错误是““ msg”:“该任务包括带有未定义变量的选项。 错误是:“字典对象”没有属性“ int_name” \\ n \\ n”

请尝试以下-我还没有测试过。

    - name: Display output1...2
      debug:
        msg: "{{ item|first }} : {{ item[item|first] }}"
      with_items:
        - "{{ output1.results[0].item }}"

又快又脏

以下任务可快速给出要求的内容

- set_fact:
    Device_Name: "{{ output1.results[0]['item']|
                     map(attribute='Device_Name')|
                     select('defined')|
                     list|first }}"
    Interface: "{{   output1.results[0]['item']|
                     map(attribute='Interface')|
                     select('defined')|
                     list|first }}"

细节

这是不良数据结构的典型示例。 下面的任务

- debug:
    msg: "{{ output1.results|
             map('dict2items')|list|flatten|
             json_query('[?key==`item`].value')|flatten }}"

给出item ,它是一个列表,必须再次进行迭代,

"msg": [
        {
            "Device_Name": "SW1"
        }, 
        {
            "Interface": "GigabitEthernet1/0/7"
        }
]

而不是字典,这很容易引用。

"msg": [
        {
            "Device_Name": "SW1",
            "Interface": "GigabitEthernet1/0/7"
        }
]

由于进行了此类过滤,因此以下任务

- set_fact:
    Device_Name: "{{ output1.results|
                     map('dict2items')|list|flatten|
                     json_query('[?key==`item`].value')|flatten|
                     map('dict2items')|list|
                     json_query('[*][?key==`Device_Name`].value')|flatten }}"
- set_fact:
    Interface: "{{ output1.results|
                   map('dict2items')|list|flatten|
                   json_query('[?key==`item`].value')|flatten|
                   map('dict2items')|list|
                   json_query('[*][?key==`Interface`].value')|flatten }}"
- debug:
    var: Device_Name
- debug:
    var: Interface

"Device_Name": [
    "SW1"
]

"Interface": [
    "GigabitEthernet1/0/7"
]

暂无
暂无

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

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