【发布时间】:2021-02-16 04:27:28
【问题描述】:
我在使用 json_query 搜索以下数据结构时遇到问题,我想从中创建两个单独的列表。
列表 1 应包含来自每个字典的条目的名称键,这些条目的成员列表包含 subPath 键且其值包含特定值。
列表 2 应包含每个字典中的名称键,用于其成员列表不包含 subPath 键且名称包含特定值的条目。
到目前为止,我能找到的最接近的方法是找到那些其成员字典具有 subPath 键的字典:
- name: debug
debug:
msg: "{{ device_facts.gtm_a_pools | json_query(query) }}"
vars:
query: "[].members[?!subPath][].name"
或者没有 subPath 键:
- name: debug
debug:
msg: "{{ device_facts.gtm_a_pools | json_query(query) }}"
vars:
query: "[].members[?subPath][].name"
但是这是从成员字典中返回名称键,当我想要的是基于上述两个标准的每个 gtm_a_pools 字典中的名称键(一个具有子路径的列表和一个没有子路径的列表)。
使用以下数据结构:
- List1 = ['a2-test_pool']
- 列表 2 = ['aci_pool']
"gtm_a_pools": [
{
"alternate_mode": "global-availability",
"dynamic_ratio": "no",
"enabled": "yes",
"fallback_mode": "return-to-dns",
"full_path": "/Common/a2-test_pool",
"load_balancing_mode": "global-availability",
"manual_resume": "no",
"max_answers_returned": 1,
"members": [
{
"disabled": "no",
"enabled": "yes",
"limitMaxBps": 0,
"limitMaxBpsStatus": "disabled",
"limitMaxConnections": 0,
"limitMaxConnectionsStatus": "disabled",
"limitMaxPps": 0,
"limitMaxPpsStatus": "disabled",
"member_order": 0,
"monitor": "default",
"name": "a2-test_443_vs",
"partition": "Common",
"ratio": 1,
"subPath": "test-dmz-dc1-pair:/Common"
},
{
"disabled": "no",
"enabled": "yes",
"limitMaxBps": 0,
"limitMaxBpsStatus": "disabled",
"limitMaxConnections": 0,
"limitMaxConnectionsStatus": "disabled",
"limitMaxPps": 0,
"limitMaxPpsStatus": "disabled",
"member_order": 1,
"monitor": "default",
"name": "dc2-a2-test_443_vs",
"partition": "Common",
"ratio": 1,
"subPath": "test-dmz-dc2-pair:/Common"
}
],
"name": "a2-test_pool",
"partition": "Common",
"qos_hit_ratio": 5,
"qos_hops": 0,
"qos_kilobytes_second": 3,
"qos_lcs": 30,
"qos_packet_rate": 1,
"qos_rtt": 50,
"qos_topology": 0,
"qos_vs_capacity": 0,
"qos_vs_score": 0,
"ttl": 30,
"verify_member_availability": "yes"
},
{
"alternate_mode": "round-robin",
"dynamic_ratio": "no",
"enabled": "yes",
"fallback_mode": "return-to-dns",
"full_path": "/Common/aci_pool",
"load_balancing_mode": "round-robin",
"manual_resume": "no",
"max_answers_returned": 1,
"members": [
{
"disabled": "no",
"enabled": "yes",
"limitMaxBps": 0,
"limitMaxBpsStatus": "disabled",
"limitMaxConnections": 0,
"limitMaxConnectionsStatus": "disabled",
"limitMaxPps": 0,
"limitMaxPpsStatus": "disabled",
"member_order": 0,
"monitor": "default",
"name": "prod_dc1_servers:aci",
"partition": "Common",
"ratio": 1
},
{
"disabled": "no",
"enabled": "yes",
"limitMaxBps": 0,
"limitMaxBpsStatus": "disabled",
"limitMaxConnections": 0,
"limitMaxConnectionsStatus": "disabled",
"limitMaxPps": 0,
"limitMaxPpsStatus": "disabled",
"member_order": 1,
"monitor": "default",
"name": "prod_dc1_servers:aci",
"partition": "Common",
"ratio": 1
}
],
"name": "aci_pool",
"partition": "Common",
"qos_hit_ratio": 5,
"qos_hops": 0,
"qos_kilobytes_second": 3,
"qos_lcs": 30,
"qos_packet_rate": 1,
"qos_rtt": 50,
"qos_topology": 0,
"qos_vs_capacity": 0,
"qos_vs_score": 0,
"ttl": 30,
"verify_member_availability": "yes"
}
]
【问题讨论】:
标签: ansible json-query