【问题标题】:How do I filter elements from a list correctly with JMESPath and Ansible?如何使用 JMESPath 和 Ansible 从列表中正确过滤元素?
【发布时间】:2018-06-26 10:30:19
【问题描述】:

我有以下结构。

[
            {
                "ami_launch_index": 0, 
                "architecture": "x86_64",                     
                "instance_type": "t2.micro", 
                "monitoring": {
                    "state": "disabled"
                } ,
                "placement": {
                    "availability_zone": "eu-central-1a", 
                    "group_name": "", 
                    "tenancy": "default"
                },                 
                "tags": {
                    "Name": "MYNAME 1", 
                    "Project": "MY PROJECT", 
                    "Purpose": "MYTEST"
                }, 
                "virtualization_type": "hvm"
            }, 
            {
                "ami_launch_index": 2, 
                "architecture": "x86_64",              
                "instance_type": "t2.micro", 
                "monitoring": {
                    "state": "disabled"
                }, 
                "placement": {
                    "availability_zone": "eu-central-1a", 
                    "group_name": "", 
                    "tenancy": "default"
                },
                "tags": {
                    "Name": "MYNAME 2", 
                    "Project": "MY SECOND PROJECT", 
                    "Purpose": "WHY THE HECK NOT"
                }, 
                "virtualization_type": "hvm"
            }
        ]

我想打印 [].tags.Name 包含字符串“SECOND”的所有元素(所以只是第二个元素。我该如何实现?

这是我尝试过的,但它不起作用。

- debug:
        msg: "{{ instances.stdout | from_json | json_query(\"[][?contains(tags.Name, 'SECOND')]\") }}"

我尝试使用http://jmespath.org,但也无法按照我想要的方式提取数据。

【问题讨论】:

    标签: json ansible filtering jmespath


    【解决方案1】:

    要获取 tags.Name 中包含 SECOND 的项目,您可以使用以下查询:

    [?contains(tags.Name,'SECOND')]
    

    但您的示例数据似乎与任何内容都不匹配,因为 SECOND 仅在 Project 属性中,而不是 Name

    【讨论】:

    • 是的,我的意思是 tags.Project 而不是 tags.Name 应该包含 SECOND。再次感谢;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    相关资源
    最近更新 更多