netpalm 使用踩坑调研

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 相关:

  1. 只支持内置的几个设备类型,当前版本实现逻辑:netmiko的device_type做map。(plugin)
    优化思路:跳过 device_type 写死的字典,直接让 napalm.get_network_driver 来进行判断
    在这里插入图片描述

  2. 直接使用 getconfig、setconfig 方法时,不会进行数据验证,仅在使用 getconfig/{library} 调用的时候会进行验证,第一步中修改之后,这里验证可能会失效。
    优化思路:a. 通过直接获取当前已经安装的napalm driver写入文件 b. 直接把公网已有的全部拉取下来写到文件。
    不过根据 napalm 的开发路径来看,大概率不会在这方面提供支持,之后尝试 pull 一个试探下。

任务日志查看方法:基于调度策略,fifo/pinned ,看对应的 worker 容器的 log,执行过程和报错都会在这里展示出来
可以清楚的看到底层的执行过程:
在这里插入图片描述


netpalm-admin

是项目自带的一个前端界面,但是功能有点受限,设备交互方面只支持 napalm。

  1. 只有启动的时候,进行初始化配置会从 netbox 拉取主机数据,netbox 更新数据后不会同步;是以 list 的方式直接存储,用来在前端进行选择。按需更新会好点?
    在这里插入图片描述

在这里插入图片描述

  1. 前端不会显示正确的错误信息,只显示 [object Object]
    在这里插入图片描述
    在这里插入图片描述
    2020/03/18学了几天JS基础知识后大体上能看懂前端源码了,得出结论:JavaScript 写入 HTML 页面必须是字符串,如果是对象的话,前端就只会显示 Object
    问题出现在:templates/commandatron_get_set_config.html#L201task_error是个列表,里面有三项内容,toString()的时候貌似没转换成功,所以前端出现了三个 Object
    在这里插入图片描述
  2. 正确的信息中,会把字符串中的逗号处理为换行,但是接口返回的是正常的(例:dis version)
    在这里插入图片描述
    在这里插入图片描述
    问题出现在:templates/commandatron_get_set_config.html#L201,JS 源码中把结果中的逗号都做了替换。。。
    在这里插入图片描述

待调研。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

某呆啊

赏个糖吃吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值