You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:00:00