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

如何在Ansible Playbook中用关键链路列表过滤源链路列表?

Ansible过滤包含关键节点-接口对的链路条目

实现步骤

  1. 加载链路文件:将源链路和关键链路的YAML文件加载为Ansible变量
  2. 提取关键节点-接口配对:把关键链路中的每个节点与对应接口组合成元组,形成需要排查的集合
  3. 过滤源链路:遍历源链路列表,移除包含任意一个关键节点-接口对的条目

完整Playbook示例

---
- name: 过滤非关键链路
  hosts: localhost
  gather_facts: false

  tasks:
    # 加载源链路文件(替换为你的源文件路径)
    - name: 加载源链路数据
      include_vars:
        file: source_links.yaml
        name: source_links

    # 加载关键链路文件(替换为你的关键文件路径)
    - name: 加载关键链路数据
      include_vars:
        file: essential_links.yaml
        name: essential_links

    # 提取所有关键节点与接口的配对元组
    - name: 生成关键节点-接口对集合
      set_fact:
        critical_pairs: >
          {{
            essential_links.key2
            | map('extract', ['nodes', 'interfaces'])
            | map('zip')
            | flatten
            | map('tuple')
            | list
            | unique
          }}

    # 过滤源链路,移除包含关键节点-接口对的条目
    - name: 过滤非关键链路
      set_fact:
        filtered_links: >
          {{
            source_links.key2
            | reject(
                lambda link:
                  zip(link.nodes, link.interfaces)
                  | map('tuple')
                  | intersect(critical_pairs)
                  | length > 0
              )
            | list
          }}

    # 验证过滤结果(可选)
    - name: 打印过滤后的链路
      debug:
        var: filtered_links

代码解释

  • 加载文件:使用include_vars将YAML文件内容读取为变量,source_links和essential_links分别对应源链路和关键链路数据
  • 生成关键配对:
    • map('extract', ['nodes', 'interfaces']):从每个关键链路条目中提取nodes和interfaces两个列表
    • map('zip'):将每个链路的节点列表与接口列表一一配对,生成元组迭代器
    • flatten:将所有链路的配对元组合并为一个列表
    • map('tuple'):确保配对为不可变元组,方便后续集合操作
    • unique:去重,避免重复检查相同的节点-接口对
  • 过滤逻辑:
    • reject过滤器用于剔除符合条件的条目
    • 对于每个源链路条目,将其nodes和interfaces配对后,与critical_pairs求交集;如果交集长度大于0,说明该条目包含关键节点-接口对,予以剔除

匹配规则说明

此逻辑会过滤掉任何包含至少一个关键节点-接口配对的源链路条目,完全匹配你给出的示例场景:只要源链路里存在ESSENTIAL_NODE + ESSENTIAL_interface这个组合,就会被过滤。

内容的提问来源于stack exchange,提问作者karl mueller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 09:00:13