vscode代码库登录配置_用vscode打造自己的网络配置模板管理系统

用vscode打造自己的网络配置模板管理系统

这个想法是源自China NetDevOps Club群里的一个人,本人在此基础上做了一些开发,方便大家快速生成自己的配置模板代码片段,进而在vscode中可以检索、快速调用指定的配置模板。基于配置模板可以对自己出配置可以非常好的进行指导,老师一直告诉我们好脑子不如烂笔头,当今时代的烂笔头可以是多样化的。同时最重要的,我觉得是出的配置有所约束,不再是天马行空拍脑袋想出来的了。

关于vscode

vscode是微软家的一款IDE,跨平台源代码编辑器,开源的。对于想写Python人来说,新手真正的IDE一般2种选择,vscode和pycharm。各有千秋,回头我也考虑分享下怎么使用这两款,以及对比。其中vscode非常轻量级,且支持的代码不只是Python,且对各类文本编辑都有非常好的支持。大家有兴趣可以去下载一个试试。

思路

vscode可以自定义用户代码片段,且全局生效。什么是用户代码片段呢。

比如以下代码片段

if __name__ == '__main__':

pass

我们在vscode里可能输入 main,vscode立刻检索我们录入的和系统自带的代码片段,每个代码片段都有一个名字,比如上面代码片段对应名字是__main__

我们可以任意挑选字符,vscode都会帮助我们自动筛选符合条件的代码片段。

什么意思呢,假如我有三个端口配置的代码片段,名字分别如下:

cisco_interface_config,hw_interface_config,cisco_vlan_config

我们输入c f的时候,所有包含字母cf的的代码片段会出现在右侧(但是如果名字过长,尽量输入比较靠前的字母会比较容易检索成功)

我们的第一个想法来了

将我们日常用的配置模板写成vscode(你也可以写其他ide)支持的用户代码片段格式即可。然后放入指定目录,比如我的目录是

C:\Users\Administrator\AppData\Roaming\Code\User\snippets

这样我们就可以在vscode中任意输入字符来检索我们的模板库,调取对应的模板。调出模板后再出我们的配置。

我们打开一个代码片段看看它长什么样子

这个代码片段描述了代码主体 body,代码片段的描述 description,以及如何通过前缀 也就是我们的输入访问它 cisco_ios_confg,我们只要输入这个前缀的相关信息就可以会自动检索出来。

有了众多的基于我们的配置模板的代码片段,我们专属的配置模板库就搭建成功了。

组织好自己的配置模板仓库

但是这个时候出现了两个问题:一个是如何比较好的组织这个模板配置库(有效的组织,可以极大提高我们检索的效率)

另外一个就是如何快速的生成这个模板配置库(它可以通过图形界面手工导入,但是这个过程其实很繁琐,我们的配置模板如果特别多,就会非常非常的。。。)。

这两个问题我是这么解决的配置模板的prefix遵循以下规则 {厂商}_{平台}_{配置名称}。这样比较符合我们配置时候的思路,先选厂商再选平台最后是配置项,和ansible netmiko的思路基本一致

通过xlsx结合jinja2来大批量生成配置模板的代码片段。

我们写了一段代码,可以读取excel的表头如下

利用jinja2结合表格生成自己的配置模板用户代码片段

然后用jinja2模板结合表格动态生成以上vscode识别的用户代码片段格式。

jinja2模板如下:

{

"config template": {

"prefix": "{{vendor}}_{{platform}}_{{name}}",

"body": [

{% for i in commands %}

"{{i}}",

{%endfor%}

],

"description": "{{description}}"

}

}

我们模板里用了commands,表头用了template,实际使用中需要将二者对应起来,需要将template按行切割。

非常简单的一个jinja2模板,没有学过jinja2模板引擎的可以 看看我之前的文章

之后就是通过脚本,将数据与模板结合生成符合样式的用户代码片段

from jinja2 import Template

import pandas as pd

def get_meta_datas(file='vscode_user_sinppets.xlsx'):

data = pd.read_excel(file)

data = data.to_dict(orient='records')

print(data)

return data

def make_snippets_files():

with open('code-snippets.j2','r',encoding='utf8') as f:

templ = Template(f.read())

meta_datas = get_meta_datas()

for data in meta_datas:

data['commands'] = data['template'].splitlines()

with open('{}_{}_{}.code-snippets'.format(data['vendor'],data['platform'],data['name']),'w',encoding='utf8') as snippets_file:

snippets_file.write(templ.render(**data))

if __name__ == "__main__":

make_snippets_files()

以上代码理论上Python3.X应该都支持。

最后就是开头说的,将代码片段复制粘贴到指定位置,即可在vscode里使用我们的代码片段了。

开脑洞以上所说的方法其实可以用到其他支持代码片段的IDE或者文本编辑器中,比如pycharm,sublime等,但是需要我们修改用户代码片段。

vscode有web版本,大家统一使用web版本的vscode ,可以实现代码片段的统一管理,这样实现了全团队的配置规范

今天讲的无法把参数传入其中,仅仅是从配置模板的样式约束了使用人

最理想的状态,是用户选择配置项,比如cisco_interface,然后传入端口名,描述,是否起等参数,最终生成配置,这个思想其实和ansible的很多module有点类似了,也和napalm的一些思想类似,再结合IP,这就是一个面向对象的操作了。真真正正的是殊途同归啊。

最后欢迎大家点赞、喜欢、在读、分享、收藏等等。

NetDevOps加油站,同名公众号与知乎专栏,欢迎大家一同关注!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值