NetPulse 文档¶
NetPulse 是一个网络设备管理的 RESTful API 服务器,提供统一的多厂商网络设备管理接口。
什么是 NetPulse?¶
NetPulse 作为客户端和网络设备之间的中间层代理,提供统一的网络设备管理服务:
flowchart LR
subgraph Clients[客户端层<br/>]
direction TB
API[API]
CLI[CLI]
Web[Web]
SDK[SDK]
end
NetPulse[NetPulse 服务端<br/>集中管理·连接复用 · 分布式<br/>FastAPI + Redis + Worker]
subgraph Devices[设备<br/>]
direction TB
Router1[路由器]
Switch1[交换机]
RoCESwitch[RoCE交换机]
Linux[Linux服务器]
end
API -.->|API| NetPulse
CLI -.->|API| NetPulse
Web -.->|API| NetPulse
SDK -.->|API| NetPulse
NetPulse ==>|SSH/API| Router1
NetPulse ==>|SSH/API| Switch1
NetPulse ==>|SSH/API| RoCESwitch
NetPulse ==>|SSH/API| Linux
style Clients fill:#E3F2FD,stroke:#1976D2,stroke-width:2px
style NetPulse fill:#C8E6C9,stroke:#388E3C,stroke-width:3px
style Devices fill:#FFF3E0,stroke:#F57C00,stroke-width:2px
style Linux fill:#E1BEE7,stroke:#7B1FA2,stroke-width:2px
NetPulse 是一个服务端网络自动化控制器,通过 RESTful API 提供统一的网络设备管理接口。与传统的客户端工具(如 Netmiko、NAPALM)不同,NetPulse 采用服务端架构,集中部署在服务器上,客户端只需通过 HTTP 请求即可完成设备操作。
为什么选择服务端模式?¶
传统客户端工具需要在每台机器上安装,每个程序都要自己处理并发调度、连接管理、任务队列等复杂问题。而服务端模式将这些复杂性集中在服务端解决:
- 简化客户端:客户端无需处理并发调度、连接复用、任务队列等逻辑,只需调用 API
- 集中管理:统一管理所有网络设备,资源共享,无需在每个客户端安装工具
- 高可用性:通过分布式架构实现高可用,单点故障不影响服务
- 易于集成:通过标准 RESTful API 轻松集成到现有系统
关于类似框架
在设计过程中,我们借鉴了 NetPalm 的框架设计思路,体现了开源精神的共享与学习。两者在产品层面都使用了相同的开源组件(如 Netmiko、NAPALM、Redis + RQ),但在代码实现逻辑上有很大不同,特别是在长连接管理、调度算法、Worker 架构等核心组件上进行了独立的设计和开发。
主要特性¶
- RESTful API - 统一的异步API接口,支持多厂商网络设备
- 持久化连接 - 通过SSH长连接技术提升操作效率
- 分布式架构 - 支持多节点部署和水平扩展
- 多驱动支持 - Netmiko、NAPALM、PyEAPI、Paramiko等多种驱动
- 模板支持 - 支持Jinja2、TextFSM、TTP模板引擎
- 批量操作 - 支持大规模设备管理和配置
快速开始¶
前置要求
- Docker 20.10+ 和 Docker Compose 2.0+
- 至少 2GB 可用内存
- 端口 9000 未被占用
详细部署说明请查看 快速开始。
新手学习路径¶
如果您是第一次使用 NetPulse,建议按以下顺序阅读文档:
- 快速开始 - 5分钟快速上手,体验基本功能
- 基础概念 - 理解核心概念(驱动、队列、任务等)
- 驱动选择 - 了解如何选择合适的驱动
- API概览 - 了解所有API接口
- 深入使用 - 根据需要阅读架构文档和参考手册
文档导航¶
快速开始¶
API 参考¶
技术架构¶
参考手册¶
常见问题快速解答¶
Q: 设备操作是同步还是异步?
A: 设备操作(/device/execute、/device/bulk)是异步的,需要查询任务状态获取结果。只有 /device/test-connection 是同步的。
Q: 如何选择合适的驱动?
A: Linux服务器用Paramiko,Arista设备用PyEAPI,需要配置回滚用NAPALM,其他场景用Netmiko(推荐)。
Q: 什么时候用FIFO队列,什么时候用Pinned队列?
A: 系统会根据驱动自动选择。Netmiko/NAPALM默认用Pinned(连接复用),PyEAPI/Paramiko默认用FIFO。通常无需手动指定。
Q: 如何获取命令执行结果?
A: 提交任务后获得任务ID,然后通过 /job?id=xxx 接口查询结果。
获取帮助¶
- 文档问题: 查看 故障排查
- 技术问题: 提交 GitHub Issue
- 贡献文档: 欢迎提交 Pull Request