Skip to content

garygagaga/netdev

Repository files navigation

项目介绍

项目地址:https://github.com/garygagaga/netdev

网络工程师如何自己编写和使用自动化工具

本项目重点为分享自己在过往工作中编写过的自动化工具,如果你恰巧为网络工程师,同时你也会一点Golang编程,那么本项目或许可以给到你一些启发和帮助

写在最前面

为什么大家都在使用python,而我选择了使用Golang作为网络自动化编程的语言?首先,语言没有优劣之分,适合你的才是最重要的,我本人也是从python开始入门,一开始看了网印大佬出版的《网络工程师的python之路》,受益匪浅,后来自己又刷了一遍python三剑客那三本书,勉强算入门了python,从那开始也开始接手网络团队的自动化需求,并全程使用python去开发,开发了大半年后觉得python的包管理有点难,后来也尝试过使用docker但效果一直不是很理想。

最直接冲击到我,且让我决定使用Go重构现有项目的是运行效率,当时团队管理两千台左右的交换机,最典型的需求就是配置备份了,当时有测试过,使用python做需要消耗10分钟左右,已经是自认为优化到极致了(在nonir框架下改进采用了多进程+多线程的模式,感兴趣的后面可以分享出来),但是我尝试了使用Golang,发现竟然10s就完成了,而且服务器的资源消耗几乎忽略不计,可能我本身是一个比较追求完美的人,加上Golang天然具有高并发且编译后的文件可以跨平台运行,于是毅然决然的将已有的项目全部用Go重构了(自己花下班时间打黑工:(

个人感受

结合自身的工作经验来看(每个人的工作环境不同,因人而异),网络自动化有三板斧,抽象为:设备交互、数据处理、利用数据,举个最小的需求例子:收集100台交换机的版本号,那根据三板斧大概可以如下实现:

1、设备交互,我编写的工具需要具备我能同时给多台设备下发命令且能成功获取到执行结果

2、数据处理,命令执行后的原始回显是非结构化的数据,我们只需要关注版本号的具体内容,因此需要进行数据清洗

3、利用数据,经过清洗后的数据一般为结构化数据,意味着符合key-value格式,可以存入数据库中,方便前端调用,当然也可以做一些简单的逻辑判断,比如遍历所有的版本,发现存在重大缺陷的版本自动通过邮件告警出来

本项目结合自身有限的经验,围绕着设备交互、数据处理、利用数据展开,每个部份会提供一些自己用过的觉得好的函数和第三方包,也会写一写自己踩过的坑

持续更新...

如果你发现本项目有内容上的错误,欢迎提交 issues 进行指正。

文档指引

学习交流

个人邮箱:[email protected]

有问题欢迎指正和交流,邮件看到肯定会回,着急的可以添加个人vx:

WechatIMG56

Releases

No releases published

Packages

No packages published

Languages