netpalm 架构图
项目地址:https://github.com/xdai555/netpalm
从架构上来看,产品定位就是只有 API,整合了各个南向的驱动,以及模板渲染层;需要配合前端来使用,否则的话个人感觉和脚本调用差不太多(命令执行方面)。
从易用性来看,暴露出来的北向接口,仍然需要使用者懂网络、懂配置,即面向网工人群;整合了自定义脚本、textfsm、jinja2 等功能,能比较方便的管理和调用模板文件。
从搭建平台、生产部署角度来看:
- 数据存储方面:没有持久化存储,执行的任务及结果只保存在 redis 中,没有进一步保存。
- 数据获取方面:没有主机数据来源,需要单独的方法进行获取,例如 netpalm-admin 支持从 netbox 直接获取主机信息
这里是一份接口文档:apipost netpalm
使用上
容器搭建相关:
修改下 Dockerfile,把里面的镜像源、pip 源等修改为国内的,部署会快一点,或者直接先做好一个基础镜像,再二次 build 更省事。以下供参考:
FROM python:3.8-slim
WORKDIR /usr/local/lib/python3.8/site-packages
RUN echo """deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free \
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free \
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free \
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free \
""" > /etc/apt/sources.list
RUN apt-get update \
&& apt-get install -y git \
&& git clone https://github.com/networktocode/ntc-templates.git \
&& mv ntc-templates ntc_templates \
&& pip3 install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple \
&& pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
...
...
napalm 相关:
-
只支持内置的几个设备类型,当前版本实现逻辑:netmiko的device_type做map。(plugin)
优化思路:跳过 device_type 写死的字典,直接让 napalm.get_network_driver 来进行判断
-
直接使用 getconfig、setconfig 方法时,不会进行数据验证,仅在使用 getconfig/{library} 调用的时候会进行验证,第一步中修改之后,这里验证可能会失效。
优化思路:a. 通过直接获取当前已经安装的napalm driver写入文件 b. 直接把公网已有的全部拉取下来写到文件。
不过根据 napalm 的开发路径来看,大概率不会在这方面提供支持,之后尝试 pull 一个试探下。
任务日志查看方法:基于调度策略,fifo/pinned ,看对应的 worker 容器的 log,执行过程和报错都会在这里展示出来
可以清楚的看到底层的执行过程:
netpalm-admin
是项目自带的一个前端界面,但是功能有点受限,设备交互方面只支持 napalm。
- 只有启动的时候,进行初始化配置会从 netbox 拉取主机数据,netbox 更新数据后不会同步;是以 list 的方式直接存储,用来在前端进行选择。按需更新会好点?
- 前端不会显示正确的错误信息,只显示
[object Object]
2020/03/18学了几天JS基础知识后大体上能看懂前端源码了,得出结论:JavaScript 写入 HTML 页面必须是字符串,如果是对象的话,前端就只会显示Object
。
问题出现在:templates/commandatron_get_set_config.html#L201
,task_error
是个列表,里面有三项内容,toString()
的时候貌似没转换成功,所以前端出现了三个Object
。
- 正确的信息中,会把字符串中的逗号处理为换行,但是接口返回的是正常的(例:dis version)
问题出现在:templates/commandatron_get_set_config.html#L201
,JS 源码中把结果中的逗号都做了替换。。。
待调研。。。