Ansible如何基于trunk_ports列表过滤neighbour_details字典
Ansible实现端口邻居信息过滤的方案
方法1:内置过滤器组合(推荐)
这是Ansible官方推荐的简洁写法,仅需一行过滤器链即可完成需求:
- name: 过滤Trunk端口对应的邻居信息 ansible.builtin.set_fact: neighbour_filtered: "{{ neighbour_details | dict2items | selectattr('key', 'in', trunk_ports) | items2dict }}"
过滤逻辑说明:
- 用
dict2items将neighbour_details字典转换为[{key: "端口名", value: "邻居信息"}]格式的列表 - 用
selectattr筛选出键存在于trunk_ports列表中的条目 - 用
items2dict将筛选后的列表还原为原结构的字典
注:dict2items/items2dict过滤器需要Ansible 2.7及以上版本支持,目前主流发行版均已满足该要求
方法2:Jinja2字典推导(适合复杂逻辑场景)
如果需要额外增加端口校验、值修改等自定义逻辑,可以使用更灵活的Jinja2推导写法:
- name: 自定义逻辑过滤Trunk端口邻居信息 ansible.builtin.set_fact: neighbour_filtered: >- {% set result = {} %} {% for port in trunk_ports %} {% if port in neighbour_details %} {% set _ = result.update({port: neighbour_details[port]}) %} {% endif %} {% endfor %} {{ result }}
两种方法最终得到的neighbour_filtered结构与预期输出完全一致。
内容的提问来源于stack exchange,提问作者rove88
相关产品推荐
相关产品推荐

