Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
排除列表中不包含vale的json对象_Json_Ansible_Jinja2_Json Query - Fatal编程技术网

排除列表中不包含vale的json对象

排除列表中不包含vale的json对象,json,ansible,jinja2,json-query,Json,Ansible,Jinja2,Json Query,如何删除不包含特定值的json对象?在下面的json中,您如何保持 包含“11.22.33.0/24”的对象块 如何通过jinja或Ansible过滤实现这一点 json内容 my_data: description: "for load balancer access" group_is: "sg-1234" group_name: "MY GroupName" ip_permissions: - from: 80 ip_protocol: "tcp"

如何删除不包含特定值的json对象?在下面的json中,您如何保持 包含“11.22.33.0/24”的对象块

如何通过jinja或Ansible过滤实现这一点

json内容

my_data:
  description: "for load balancer access"
  group_is: "sg-1234"
  group_name: "MY GroupName"
  ip_permissions:
    - from: 80
      ip_protocol: "tcp"
      ip_ranges: []
      to_port: 80
    - from: null
      ip_protocol: "-1"
      ip_ranges:
        - cidr_ip: "11.22.33.0/24"
          description: "MY site"
      to_port: null
    - from: 22
      ip_protocol: "tcp"
      ip_ranges: []
      to_port: 22
    - from: 3306
      ip_protocol: "tcp"
      ip_ranges: []
      to_port: 3306
    - from: 3000
      ip_protocol: "tcp"
      ip_ranges:
        - cidr_ip: "11.22.33.0/24"
          description: "MY site"
      to_port: 3000
    - from: 443
      ip_protocol: "tcp"
      ip_ranges: []
      to_port: 443

问:“如何保持包含“11.22.33.0/24”的对象块?”

答:给定变量
my\u data
中的JSON内容,使用
JSON\u query
创建对象列表块
my\u ip\u权限
合并
结果。例如,下面的任务可以完成这项工作

   - set_fact:
        my_ip_permissions: "{{ my_data.ip_permissions|json_query(my_query) }}"
      vars:
        my_query: "[?ip_ranges[?cidr_ip == '11.22.33.0/24']]"
    - set_fact:
        my_data: "{{ my_data|combine({'ip_permissions': my_ip_permissions}) }}"

使用变量my_data

my_data:
  description: "for load balancer access"
  group_is: "sg-1234"
  group_name: "MY GroupName"
  ip_permissions:
    - from: 80
      ip_protocol: "tcp"
      ip_ranges: []
      to_port: 80
    - from: null
      ip_protocol: "-1"
      ip_ranges:
        - cidr_ip: "11.22.33.0/24"
          description: "MY site"
      to_port: null
    - from: 22
      ip_protocol: "tcp"
      ip_ranges: []
      to_port: 22
    - from: 3306
      ip_protocol: "tcp"
      ip_ranges: []
      to_port: 3306
    - from: 3000
      ip_protocol: "tcp"
      ip_ranges:
        - cidr_ip: "11.22.33.0/24"
          description: "MY site"
      to_port: 3000
    - from: 443
      ip_protocol: "tcp"
      ip_ranges: []
      to_port: 443
输出是

    "my_data": {
        "description": "for load balancer access", 
        "group_is": "sg-1234", 
        "group_name": "MY GroupName", 
        "ip_permissions": [
            {
                "from": null, 
                "ip_protocol": "-1", 
                "ip_ranges": [
                    {
                        "cidr_ip": "11.22.33.0/24", 
                        "description": "MY site"
                    }
                ], 
                "to_port": null
            }, 
            {
                "from": 3000, 
                "ip_protocol": "tcp", 
                "ip_ranges": [
                    {
                        "cidr_ip": "11.22.33.0/24", 
                        "description": "MY site"
                    }
                ], 
                "to_port": 3000
            }
        ]
    }

将图像替换为文本。剪切和粘贴会使测试更容易。因为当时我有文本。Stackoverflow标记了太多的代码这很奇怪。我能够输入数据。我得到了这个输出<代码>代码:{“描述”:“对于负载平衡器访问”,“组id”:“sg-12345”,“组名称”:“我的负载平衡器”,“ip权限”:“}<代码>代码如何添加from_端口、ip_协议和to_端口?我不知道。我已键入您的数据,结果符合要求。我已将Ansible更新为当前版本。谢谢@弗拉基米尔·博克塔