【发布时间】:2023-01-26 05:11:35
【问题描述】:
我有一个服务器名称列表和一个环境中所有集群的字典列表。字典列表包含该集群中的相关服务器。例如
"full_cluster_dict": [
{
"key": "cluster_a",
"value": [
"ca_server1",
"ca_server2",
"ca_server3",
"ca_server4",
"ca_server5",
"ca_server6",
"ca_server7",
"ca_server8"
]
},
{
"key": "cluster_b",
"value": [
"cb_server1",
"cb_server2",
"cb_server3"
]
},
{
"key": "cluster_c",
"value": [
"cc_server1",
"cc_server2",
"cc_server3",
"cc_server4"
]
}
和
"server_list": [
"ca_server1",
"cb_server2",
"ca_server6"
]
我想创建一个较小的字典列表,仅显示包含来自 server_list 的服务器的集群。例如
"needed_cluster_dict": [
{
"key: "cluster_a",
"value": [
"ca_server1",
"ca_server2",
"ca_server3",
"ca_server4",
"ca_server5",
"ca_server6",
"ca_server7",
"ca_server8"
]
},
{
"key": "cluster_b",
"value" : [
"cb_server1",
"cb_server2",
"cb_server3"
]
}
]
我尝试了以下
- name: extract only relevant clusters based on the list of servers
ansible.builtin.set_fact:
needed_cluster_dict: "{{ needed_cluster_dict|d({}) | combine({item: cluster_filter}) }}"
with_items: "{{ server_list }}"
vars:
cluster_filter: "{{ sds_dict|dict2items|json_query(_query) }}"
_query: '[?value.contains(@, `{{ item }}`)].value'`
但这只返回一个字典,其中上面的服务器名称是键,每个键包含一个服务器列表,例如
needed_cluster_list: {
"ca_server1: [
"ca_server1",
"ca_server2",
"ca_server3",
"ca_server4"
],
"ca_server2: [
"ca_server1",
"ca_server2",
"ca_server3",
"ca_server4"
],
...
...
}
对我最初问题的编辑表示歉意,但在询问之后,我发现循环字典列表比循环字典更容易。
【问题讨论】:
标签: ansible ansible-facts ansible-filter