【问题标题】:How to do Json query in ansible with matched value如何在具有匹配值的ansible中进行Json查询
【发布时间】:2021-01-22 07:29:31
【问题描述】:

有人可以告诉我是否可以这样做吗? 我有以下列表

list:
  - dev
  - uat

我想遍历上面的列表并从下面的输出中获取各个IpAddress 的值。

{
    "Tags": [
        {
            "ResourceType": "instance", 
            "ResourceId": "i-8dh7435490fjksfd", 
            "Environment": "production", 
            "IpAddress": "10.0.0.8"
        }, 
        {
            "ResourceType": "instance", 
            "ResourceId": "i-8dh7435dsj89jfe", 
            "Environment": "dev", 
            "IpAddress": "10.0.0.3"
        },
        {
            "ResourceType": "instance", 
            "ResourceId": "i-8dsdj456ovfvfd", 
            "Environment": "uat", 
            "IpAddress": "10.0.0.7"
        }
    ]
}

这是我正在寻找的输出

[
 "10.0.0.3",
 "10.0.0.7"
]

我正在尝试使用此过滤器Tags| json_query('[*].IpAddress')。但它给了我列表中的所有IpAddress

【问题讨论】:

  • 恐怕 json_query test contains 在这里不起作用。试试selectattrmap(attribute='IpAddress'

标签: json ansible jinja2 json-query


【解决方案1】:

例如

- hosts: localhost
  vars:
    my_list: [dev, uat]
    my_Tags: [
        {
            "ResourceType": "instance", 
            "ResourceId": "i-8dh7435490fjksfd", 
            "Environment": "production", 
            "IpAddress": "10.0.0.8"
        }, 
        {
            "ResourceType": "instance", 
            "ResourceId": "i-8dh7435dsj89jfe", 
            "Environment": "dev", 
            "IpAddress": "10.0.0.3"
        },
        {
            "ResourceType": "instance", 
            "ResourceId": "i-8dsdj456ovfvfd", 
            "Environment": "uat", 
            "IpAddress": "10.0.0.7"
        }
    ]
  tasks:
    - debug:
        msg: "{{ my_Tags|selectattr('Environment', 'in', my_list)|
                 map(attribute='IpAddress')|list }}"

给予

  msg:
  - 10.0.0.3
  - 10.0.0.7

【讨论】:

  • 太棒了。谢谢你,你是我的英雄:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
相关资源
最近更新 更多