作为网工,在日常工作中,一个比较常规的操作,就是对交换机接口进行配置,在IDC机房的网络维护中,尤其突出。

试想一下,在机房中有新业务要部署上线,就需要先对底层网络进行扩容,具体就是新增机柜及上架接业务服务器接入的交换机,这时就会遇到一个常见的场景:业务扩容新上架了100台服务器,总共需要10个机柜的网络支撑,那么就需要对每个机柜的接入交换机进行接口配置,实际这些接口都不会在同一个vlan或是同一个接口模式access或trunk,其中还会包括做带外的交换,可以说应对这种需求,最基本在实施前,都是需要提前准备接口配置脚本的

这时就遇到了工作量问题,这些接口的配置如果可以通过脚本自动生成,然后再批量刷入到设备,是否会比手动复制粘贴修改每个接口配置更有效率?

jinja2就比较直观简单的解决了这个问题。

以思科C9200为例

解决思路:
1、准备交换机接口access和trunk模式下,实际的设备命令配置脚本

如下两种模式时的配置,可以看出它们的配置存在共同点,如port_num:1,vlan_id:10,mode:access or trunk。

access接口

        interface GigabitEthernet1/0/1switchport mode accessswitchport access vlan 10spanning-tree portfast

trunk接口

        interface GigabitEthernet1/0/1switchport mode trunkswitchport trunk allowed vlan 2-4094spanning-tree portfast trunk

2、梳理实际工作场景逻辑
1) 假设上连的接口使用10G光口(49、50、51、52口),那么需要做接口配置的就是电口1-48

2) 48个接口需要配置为access或trunk,不同的vlan

3)自动配置生成,需要提前判断接口mode是access还是trunk

3、将生成的配置,按机柜名称写入到文件(维护IDC,一般机柜区分)

jinja2简单介绍

参考:Jinja2官方网站

Jinja2 是一个现代的,设计者友好的,仿照 Django 模板的 Python 模板语言

简单说,Jinja2结合python完成特定模板内容文本的生成输出

这里的“模板”根据实际需求而不同,当前这个场景,模板内容就是跟交换机接口配置相关,如前面的设备命令配置脚本;或者现在如果要使用nornir实现批量自动化,可以自动生成hosts.yaml。

jinja2工作机制:

将实际输出文本需要的数据,“赋值”给模板文件进行渲染,进而生成最终需要的文本

以当前交换机接口配置为例:
如前边提到的,“实际输出文本需要的数据”就是接口配置中的这些属性和数值,“port_num:1,vlan_id:10,mode:access or trunk”

        interface GigabitEthernet1/0/1switchport mode accessswitchport access vlan 10spanning-tree portfast

如下脚本,实现了交换机接口access或trunk模式的配置

# -*- coding: utf-8 -*-from jinja2 import Environment,FileSystemLoader
# 选择文件系统加载模板文件
env = Environment(loader=FileSystemLoader('.'))
# 模板文件与脚本在同一个目录
template = env.get_template('sw_template')# 这里以一个元素为字典的列表为例子,实际数据来源从excel表格的居多,这里只演示jinja2
# 这个列表中的每个元素,都包含host,type,port_num,vlan_id三个属性,实际对应着模板文件中的需要替换的字段变量
dev_info = [{'host':'A10','type':'access','port_num':'10','vlan_id':'300'},{'host':'A11','type':'trunk','port_num':'20','vlan_id':'2-4094'}]
# 遍历列表,每次获取一个设备的字典信息,将这个字典赋值dev进行渲染获取最终文本配置,同时从中提前出host的值,以做后边的文件命名
for i in dev_info:info = template.render(dev=i)host = i['host']
# 使用host将每次遍历后,生成的文本内容info写入到文件(,如host相同可追加)
# 文件名以host进行区分with open(host + '_' + 'config.txt', 'a') as f:f.write(info)print(open(host + '_' + 'config.txt').read())
  • 模板文件

模板支持如同python类似的if语句
当进行渲染时,就会将模板中的变量进行替换

如:
‘port_num’:‘10’
‘vlan_id’:‘300’

替换其中
interface GigabitEthernet1/0/{{dev[‘port_num’]}}
switchport access vlan {{dev[‘vlan_id’]}}

{# 判断字典dev的mode值是access时,使用access的配置模板,字典dev中实际的值替换其中的port_num和vlan_id #}
{% if dev['mode'] == 'access' %}interface GigabitEthernet1/0/{{dev['port_num']}}switchport mode accessswitchport access vlan {{dev['vlan_id']}}spanning-tree portfast{# 否则mode为trunk时,就使用mode的配置模板 #}
{% else %}interface GigabitEthernet1/0/{{dev['port_num']}}switchport mode trunkswitchport trunk allowed vlan {{dev['vlan_id']}}spanning-tree portfast trunk{% endif %}

最后会分别生成的两个接口配置脚本,A10_config.txt和A11_config.txt

  • A10
        interface GigabitEthernet1/0/10switchport mode accessswitchport access vlan 300spanning-tree portfast
  • A11
        interface GigabitEthernet1/0/20switchport mode trunkswitchport trunk allowed vlan 2-4094spanning-tree portfast trunk

使用jinja2自动生成交换机接口配置脚本相关推荐

  1. SAP工具箱 自动生成发出接口程序(三 配置表)

    点击蓝字 关注我们 一 前言 前文讲了自动生成发出接口程序的基本操作及接口定义表的用处 详见链接 无峰,公众号:ABAP 技巧与实战SAP工具箱 自动生成发出接口程序(一) 详见链接 无峰,公众号:A ...

  2. python生成api文档_Django 自动生成api接口文档教程

    最近在写测试平台,需要实现一个节点服务器的api,正好在用django,准备使用djangorestframework插件实现. 需求 实现一个接口,在调用时,通过传递的参数,直接运行对应项目的自动化 ...

  3. python api接口生成_Django 自动生成api接口文档教程

    最近在写测试平台,需要实现一个节点服务器的api,正好在用django,准备使用djangorestframework插件实现. 需求 实现一个接口,在调用时,通过传递的参数,直接运行对应项目的自动化 ...

  4. 自动生成python接口文档_Django自动生成Swagger接口文档

    Django自动生成Swagger接口文档 1. 前言 当接口开发完成,紧接着需要编写接口文档.传统的接口文档通常都是使用Word或者一些接口文档管理平台进行编写,但此类接口文档维护更新比较麻烦,每次 ...

  5. SAP工具箱 自动生成发出接口程序(二 接口定义表)

    点击蓝字 关注我们 一 前言 前文介绍了发出接口程序的执行原理及怎么自动生成发出接口程序. 详见链接 无峰,公众号:ABAP 技巧与实战SAP工具箱 自动生成发出接口程序(一) 本文主要介绍生成发出接 ...

  6. linux如何生成网卡配置文件,自动生成Linux网卡配置

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. #!/bin/bash #update:2013-02-25 #author:ihuotu ...

  7. [PHPUnit]自动生成PHPUnit测试骨架脚本-提供您的开发效率【2015升级版】

    2019独角兽企业重金招聘Python工程师标准>>> 场景 在编写PHPUnit单元测试代码时,其实很多都是对各个类的各个外部调用的函数进行测试验证,检测代码覆盖率,验证预期效果. ...

  8. 如何用python自动改试卷_利用Python和Jinja2自动生成试卷

    一.概述 Jinja2是Python 3下一个被广泛应用的模版引擎,它的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能.其中最显著的一个是增加了沙箱执行功能和可选的自动转义功能 ...

  9. MybatisPlu自动生成CRUD接口(二)

    作为一个有一定经验开发人员,一定不希望自己每天都在做简单CRUD操作,这样其实只是在浪费自己的时间,那么有没有什么工具让我们自动生成对数据库的CRUD操作啦?答案是肯定的,下面我们就介绍下如何通过My ...

最新文章

  1. 一些达成共识的JavaScript编码风格约定
  2. 细数Android 7.0“牛轧糖”的五大缺陷:不支持悬浮窗口
  3. 【EventBus】发布-订阅模式 ( Android 中使用 发布-订阅模式 进行通信 )
  4. Java学习笔记_匿名/ArrayList
  5. mysql+url的配置参数详解_MySql链接url参数详解
  6. 小程序基础 - wafer2 - PHP - 后台和前台 - 利用对象数组来传递表单数组的正确方法 - 下载部分(服务器到微信)
  7. 7-8 菲波那契数列 (15 分)
  8. C#,SharpGL开发的3D图表控件
  9. 网站运维:git工具-常用命令(5):创建远程仓库、git remote 查看远程仓库、添加远程仓库、git push 推送到远程仓库、git pull 从远程仓库拉取
  10. Oracle数据库SQL技术——习题1
  11. 家用 NAS 服务器(2)| HyperV的Winserver 2022和Ubuntu 22.04双系统
  12. 从二维到三维,可见Web3D技术的重要性,让线上3D产品展示所见即所得
  13. 【面试智力题】一楼到十楼的每层电梯门口都放着一颗钻石,钻石大小不一。你乘坐电梯从一楼到十楼,怎样拿到最大的一颗?
  14. HTML中表格写法,在HTML代码里面表格的写法以及表格的特性
  15. 苹果电脑 开机密码 忘记了, 黑苹果系统
  16. hibernate 二级缓存 @cache注解
  17. 多线程下载器 IDM
  18. 电脑硬件知识入门之硬盘篇
  19. 企业邮箱服务器搭建,如何搭建企业邮箱服务器
  20. 国内从事机器视觉领域的公司(转)

热门文章

  1. 关于G0、G1、G2、G3的名词解释
  2. 征信篇: 如何保护个人隐私,防止征信受损?
  3. 过采样算法之SMOTE
  4. 明日之后系统互通的服务器,明日之后安卓苹果互通么?安卓苹果混服/能联机吗问题介绍[图]...
  5. java 锯齿_java 生产文字图片边缘有锯齿状
  6. Forth(背包!动态规则)
  7. 搭载三款动力 宝马丰田将联手推全新跑车
  8. Kafka安装(windows)
  9. 秘密secret的安全性以及解决哪些痛点
  10. sql空值用什么表示_表面粗糙度Ra为什么用0.8,1.6,3.2,6.3,12.5表示?