网络设备集成测试/组网测试拓扑/组网自适应自动化配置脚本示例
思路:
本文是网络设备集成测试/组网测试自动化配置脚本的示例。
主要诉求是能够自适应拓扑变化和组网方式变化。
例中使用的是cisco模拟器,IOS版本是12.4。
本例中演示了域内MPLS/BGP VPN组网环境中P网络的OSPF和BGP的自动配置。
自适应效果举例:本例中 dut2做PE、dut3做RR,只需修改配置文件,脚本可以自适应。 添加dut4连接到dut2上,做为一个新的PE,只需修改配置文件,脚本可以自适应。
本例中要求设备已经连好线,接口已经up,配置好了接口ip地址,也配置好了loopback地址。
源代码:
auto_config.py:
# python3.8
# coding=utf-8
# author=liuyifan'''
网络设备集成测试/组网测试自动化配置脚本的示例。本例中使用的是cisco模拟器,IOS版本是12.4。
主要诉求是能够自适应拓扑变化和组网方式变化。
本例中演示了域内MPLS/BGP VPN组网环境中P网络的OSPF和BGP的自动配置。拓扑为dut1-dut2-dut3。
比如本例中
dut2做PE、dut3做RR,只需修改配置文件,脚本可以自适应。
添加dut4连接到dut2上,做为一个新的PE,只需修改配置文件,脚本可以自适应。
本例中要求设备已经连好线,接口已经up,配置好了接口ip地址,也配置好了loopback地址。
'''import re
import ipaddressfrom netmiko import Netmikoimport config# 字符串表示的dut转换成dut对象。例如将字符串'dut3'转换成列表元素duts[2]
def dut_str_to_dut_list_member(dut_str):m = re.match(r'^dut(\d+)$', dut_str)index = int(m.group(1))-1return eval('duts[%d]' % index)class DUT():def __init__(self, dut):self.c = Netmiko(**dut)# self.connected_networks是所有直连网络的列表,例如["1.1.0.0/16","1.2.0.0/16"]self.connected_networks = self.get_networks_from_connected_routes()# self.loopback是有两个元素的列表,第一个元素是loopback接口的IP地址,第二个元素是loopback接口的编号,比如["1.0.0.1",1]self.loopback = self.get_loopback_from_connected_routes()# 返回从show ip route connected的反馈信息中提取出的网络组成的列表,比如["1.1.0.0/16","1.2.0.0/16"]。def get_networks_from_connected_routes(self):networks = []for line in self.c.send_command("show ip route connected").splitlines():print(line)m = re.match('^C\s+(\d+\.\d+\.\d+\.\d+/\d+)\s',line)if m:networks.append(m.group(1))return networks# 返回从show ip route connected的反馈信息中提取出的第一个loopback接口的地址和接口编号,比如["1.0.0.1",1]。def get_loopback_from_connected_routes(self):for line in self.c.send_command("show ip route connected").splitlines():print(line)m = re.match('^C\s+(\d+\.\d+\.\d+\.\d+/\d+)\s.*Loopback(\d+)$', line)if m:return m.group(1).split('/')[0], int(m.group(2))# 配置ospf# 这些网络对应的接口启用ospfdef config_ospf(self,process_id=1):commands = []commands.append("router ospf %d" % process_id)loopback_address = self.loopback[0]commands.append("router-id %s" % loopback_address)for network in self.connected_networks:n = ipaddress.IPv4Network(network)commands.append("network %s %s area 0" % (n.network_address, n.hostmask))print(self.c.send_config_set(commands))# 配置bgp邻居。peer是一个DUT的实例def config_ibgp(self, peer, vpnv4_activate=False, ipv4_rr_client=False, vpnv4_rr_client=False):commands = []commands.append("router bgp 1")local_loopback_address = self.loopback[0]commands.append("bgp router-id %s" % local_loopback_address)peer_loopback_address = peer.loopback[0]commands.append("neighbor %s remote-as 1" % peer_loopback_address)local_loopback_number = self.loopback[1]commands.append("neighbor %s update-source Loopback %d" % (peer_loopback_address, local_loopback_number))if ipv4_rr_client:commands.append("neighbor %s route-reflector-client" % peer_loopback_address)if vpnv4_activate:commands.append("address-family vpnv4 unicast")commands.append("neighbor %s activate" % peer_loopback_address)if vpnv4_rr_client:commands.append("neighbor %s route-reflector-client" % peer_loopback_address)print(self.c.send_config_set(commands))if __name__ == '__main__':duts = []for i in range(0, config.dut_number):duts.append(DUT(config.duts[i]))# 所有设备上配置ospffor dut in duts:dut.config_ospf()# 每一台PE设备上配置到所有RR的ibgp邻居for pe in config.PE:pe = dut_str_to_dut_list_member(pe)for rr in config.RR:rr = dut_str_to_dut_list_member(rr)pe.config_ibgp(rr, vpnv4_activate=True)# 每一台RR设备上配置到所有PE的ibgp邻居for rr in config.RR:rr = dut_str_to_dut_list_member(rr)for pe in config.PE:pe = dut_str_to_dut_list_member(pe)rr.config_ibgp(pe, vpnv4_activate=True, vpnv4_rr_client=True, ipv4_rr_client=True)
config.py:
'''
设置设备登陆所需的信息
设置设备在组网环境中的角色
'''# 设置dut的数目
dut_number=3# 设置dut登录信息
duts = []
dut1 = {'ip': '127.0.0.1','port': 2001,'device_type': 'cisco_ios_telnet',
}
duts.append(dut1)dut2 = {'ip': '127.0.0.1','port': 2002,'device_type': 'cisco_ios_telnet',}
duts.append(dut2)dut3 = {'ip': '127.0.0.1','port': 2003,'device_type': 'cisco_ios_telnet',}
duts.append(dut3)PE = ['dut1', 'dut3']RR = ['dut2']
执行输出:
50.0.0.0/8 is variably subnetted, 7 subnets, 2 masks
C 50.0.1.0/24 is directly connected, FastEthernet1/0
C 50.0.0.1/32 is directly connected, Loopback1
50.0.0.0/8 is variably subnetted, 7 subnets, 2 masks
C 50.0.1.0/24 is directly connected, FastEthernet1/0
C 50.0.0.1/32 is directly connected, Loopback1
50.0.0.0/8 is variably subnetted, 7 subnets, 2 masks
C 50.0.2.0/24 is directly connected, FastEthernet1/1
C 50.0.0.2/32 is directly connected, Loopback50
C 50.0.3.0/24 is directly connected, FastEthernet2/0
C 50.0.1.0/24 is directly connected, FastEthernet1/0
50.0.0.0/8 is variably subnetted, 7 subnets, 2 masks
C 50.0.2.0/24 is directly connected, FastEthernet1/1
C 50.0.0.2/32 is directly connected, Loopback50
50.0.0.0/8 is variably subnetted, 7 subnets, 2 masks
C 50.0.2.0/24 is directly connected, FastEthernet1/0
C 50.0.0.3/32 is directly connected, Loopback50
50.0.0.0/8 is variably subnetted, 7 subnets, 2 masks
C 50.0.2.0/24 is directly connected, FastEthernet1/0
C 50.0.0.3/32 is directly connected, Loopback50
configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#router ospf 1
R1(config-router)#router-id 50.0.0.1
R1(config-router)#network 50.0.1.0 0.0.0.255 area 0
R1(config-router)#network 50.0.0.1 0.0.0.0 area 0
R1(config-router)#end
R1#
configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
R2(config)#router ospf 1
R2(config-router)#router-id 50.0.0.2
R2(config-router)#network 50.0.2.0 0.0.0.255 area 0
R2(config-router)#network 50.0.0.2 0.0.0.0 area 0
R2(config-router)#network 50.0.3.0 0.0.0.255 area 0
R2(config-router)#network 50.0.1.0 0.0.0.255 area 0
R2(config-router)#end
R2#
configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
R3(config)#router ospf 1
R3(config-router)#router-id 50.0.0.3
R3(config-router)#network 50.0.2.0 0.0.0.255 area 0
R3(config-router)#network 50.0.0.3 0.0.0.0 area 0
R3(config-router)#end
R3#R1#configure terminal
Enter configuration commands, o
R1(config)#router bgp 1
R1(config-router)#bgp router-id 50.0.0.1
R1(config-router)#neighbor 50.0.0.2 remote-as 1
R1(config-router)#neighbor 50.0.0.2 update-source Loopback 1
R1(config-router)#address-family vpnv4 unicast
R1(config-router-af)#neighbor 50.0.0.2 activate
R1(config-router-af)#end
R1#
configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
R3(config)#router bgp 1
R3(config-router)#bgp router-id 50.0.0.3
R3(config-router)#neighbor 50.0.0.2 remote-as 1
R3(config-router)#neighbor 50.0.0.2 update-source Loopback 50
R3(config-router)#address-family vpnv4 unicast
R3(config-router-af)#neighbor 50.0.0.2 activate
R3(config-router-af)#end
R3#R2#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
R2(config)#router bgp 1
R2(config-router)#bgp router-id 50.0.0.2
R2(config-router)#neighbor 50.0.0.1 remote-as 1
R2(config-router)#neighbor 50.0.0.1 update-source Loopback 50
R2(config-router)#neighbor 50.0.0.1 route-reflector-client
R2(config-router)#address-family vpnv4 unicast
R2(config-router-af)#neighbor 50.0.0.1 activate
R2(config-router-af)#neighbor 50.0.0.1 route-reflector-client
R2(config-router-af)#end
R2#
configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
R2(config)#router bgp 1
R2(config-router)#bgp router-id 50.0.0.2
R2(config-router)#neighbor 50.0.0.3 remote-as 1
R2(config-router)#neighbor 50.0.0.3 update-source Loopback 50
R2(config-router)#neighbor 50.0.0.3 route-reflector-client
R2(config-router)#address-family vpnv4 unicast
R2(config-router-af)#neighbor 50.0.0.3 activate
R2(config-router-af)#neighbor 50.0.0.3 route-reflector-client
R2(config-router-af)#end
R2#
网络设备集成测试/组网测试拓扑/组网自适应自动化配置脚本示例相关推荐
- ubuntu linux 163源,Ubuntu 16.04 163网易源设置(自动化配置脚本)
1.简介 1.1 介绍 很多时候,为了方便 操作,条件允许的情况下,直接 联网 进行安装,但是 系统 所配置的 apt源 配置的 url 地址 并非 国内的,获取资源很慢,所以 需要 配置成 国内的 ...
- Esxi自动化配置脚本
记录一下ESXi自动化配置脚本,脚本功能及脚本如下: 创建站点名称: 配置IP和vmotion IP及子网掩码 配置Vlan 删除默认端口组 增加vSwitch 设置NTP ############# ...
- 红米5+plus+信号显示无服务器,我的瞎折腾,红米AX5路由器MESH组网测试
我的瞎折腾,红米AX5路由器MESH组网测试 2020-08-23 10:42:04 77点赞 443收藏 110评论 创作立场声明:路由器自己买的,我这不是客观测评,纯属主观瞎BB,我写的就是我使用 ...
- 空间组网(卫星组网)概述
一.什么是"空间组网"? 空间组网从字面上来理解就是在空间中组建网络.那么我们类比地面的网络来说,它首先可以组建不同空间尺度上的网络.从相隔几十米的卫星之间组成局域网到覆盖整个太阳 ...
- AC+AP组网和MESH组网介绍和区别
什么是AC+AP组网方案? AC+AP是针对大户型或别墅的一种组网方案,目的是让家里的每个角落都能保持良好的网络连接,是一种WLAN系统.AC是接入控制器,AP是无线接入点. 接入控制器把无线局域网接 ...
- python自动化框架测试实操_自动化框架之 python+selenium+pytest
1.概述 selenium: 基于JavaScript代码库的自动化测试框架,通过脚本语言,模拟用户行为操作,最接近用户真实场景,实现对web自动测试. Selenium,是目前的最火爆企业最主流的w ...
- 服务器无线组网,物联网无线组网介绍
在物联网中,组网方案方案是根据不用应用场景而定,下面说几种典型的组网方案. 一.单向组网 单向组网是,将采集到的数据通过DTU(数据传输终端)单向发送至服务器,称之为单向组网.这种组网方式在热水炉温度 ...
- 2021-2027全球与中国5G独立组网非独立组网基础设施市场现状及未来发展趋势
2021-2027全球与中国5G独立组网&非独立组网基础设施市场现状及未来发展趋势 本文研究全球及中国市场5G独立组网&非独立组网基础设施现状及未来发展趋势,侧重分析全球及中国市场的主 ...
- 如何使用vps 异地组网_异地组网简要配置指南
Tag : 异地组网 异地组网简要配置指南 多台网关设备没有公网地址的情况下,需要能够互相访问各网关设备之间的局域网. 目前异地组网只支持星型网络,成功建立组网后,只允许从分支节点局域网访问中心节点的 ...
最新文章
- weblogic反序列化漏洞
- leetcode算法题--不同的二叉搜索树 II
- 【IM】关于支持向量机分类的理解
- R语言实战应用精讲50篇(十八)-R语言实现分词、词频与词云案例解析
- java打出三角形乘法表_Java 练习(输出三角形,九九乘法表, 100以内的质数)
- JavaScript消息框应用
- 《ASP.NET Core 微服务实战》-- 读书笔记(第5章)
- ROS笔记(23) Move_base
- js 值类型和引用类型
- android studio学习----通过github的URL怎么导入新的工程
- Flutter进阶第1篇: http get请求数据、post提交数据、以及渲染动态数据
- Flask-SQLAlchemy - 不使用外键连表查询。记得常回来看我
- 阿里云云计算 10 ECS的使用
- Visual Studio开源库集成器Vcpkg全教程--利用Vcpkg轻松集成开源第三方库
- 小游戏开发设计之塔防类游戏
- 力扣数据库(end09.02)
- plsql如何导入csv文件,PLSQL导入csv文件到数据库
- WMware中ubuntu移动鼠标时鼠标消失解决办法
- Android系统VIN码识别SDK
- 尘锋信息scrm与企鲸客的功能差别