ansible 剧本通过调用自定义 python 脚本实现路由拓扑动态解析与割接比对:脚本基于 netmiko/napalm 统一采集多厂商路由状态,递归构建转发路径,输出结构化 json;ansible 执行前后两次采集生成 baseline/current.json,用 deepdiff 比对并渲染带风险标识的 html/pdf 报告。

在大型自动化割接中,Ansible 剧本本身不直接解析路由表拓扑,但可通过调用自定义 Python 脚本完成动态采集、分析与报告生成。关键在于让脚本能安全获取设备路由状态(如 BGP 邻居、FIB 条目、下一跳迭代结果),并结构化输出供 Ansible 消费。
Python 脚本需具备的路由解析能力
脚本应支持主流厂商(Cisco IOS/XE/NX-OS、Juniper Junos、华为 VRP)的 CLI/API 接口,重点提取:当前活跃前缀数、主备路径标识(如 OSPF cost/BGP AS_PATH/IGP metric)、下一跳物理接口与出向设备、路由来源(connected/static/BGP/OSPF)及收敛状态。建议用 netmiko 或 napalm 统一驱动连接,避免硬编码厂商命令。
- 对每个核心节点,执行
show ip route <pre class="brush:php;toolbar:false;" fix></pre>或get-route-information获取路径细节 - 递归解析下一跳,构建从源到目的的完整转发链(含 ECMP 分支)
- 识别关键路径变更点(如某 prefix 原走 R1→R2,割接后拟改走 R1→R3)
- 输出 JSON 格式数据,字段包含:
prefix、inbound_interface、next_hops(含 IP、interface、peer ASN)、route_origin、timestamp
Ansible 中集成脚本并生成对照报告
在 playbook 中用 community.general.script 模块调用本地 Python 脚本,传入设备清单和目标网段列表;脚本返回结果存入 fact 变量。再用 ansible.builtin.set_fact 提取关键字段,最后通过 community.general.template 渲染 Jinja2 报告模板。
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
- 割接前运行一次脚本,保存 baseline.json 到临时目录
- 割接操作完成后,再次运行同一脚本,生成 current.json
- 用 Python 的
deepdiff库或 Ansible 的difference过滤器比对两份 JSON,标记新增/消失/路径变更的路由条目 - 报告模板中按 prefix 分组,列出旧路径(含 hop list 和 metric)、新路径、变更类型(如 “BGP path prepending 生效”、“IGP cost 调整导致切换”)
保障动态解析稳定性的实操要点
真实网络中路由瞬态多、响应延迟高,脚本必须内置容错逻辑:
- 设置超时(建议 30s CLI / 60s API),失败后自动重试 2 次,记录 warn 日志而非中断 playbook
- 对 BGP 表,优先采集
show bgp ipv4 unicast summary确认邻居 up,再查具体前缀,避免空表误判 - 过滤掉 pending、stale、not-in-fib 的条目,只保留 active 最优路径
- 将设备 hostname、loopback IP、role(spine/leaf/core)写入输出 JSON,便于后续按拓扑层级聚合统计
报告交付与人工复核衔接
生成的 HTML/PDF 报告不应只列 raw 数据,而要突出风险信号:
- 标红显示跨 AS 或跨区域路径变更(如原在 DC 内转发,现经 WAN 链路)
- 自动计算每条变更路由的 hop count 差异、AS_PATH length 变化、metric delta
- 附带 CLI 快速验证命令片段(如 “在 R1 上执行
ping vrf MGMT 10.1.2.3 source loopback0”) - 导出 CSV 版本,供 NMS 系统导入做割接后自动巡检基线比对
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










