思路:

本文是网络设备集成测试/组网测试自动化配置脚本的示例。
主要诉求是能够自适应拓扑变化和组网方式变化。
例中使用的是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#

网络设备集成测试/组网测试拓扑/组网自适应自动化配置脚本示例相关推荐

  1. ubuntu linux 163源,Ubuntu 16.04 163网易源设置(自动化配置脚本)

    1.简介 1.1 介绍 很多时候,为了方便 操作,条件允许的情况下,直接 联网 进行安装,但是 系统 所配置的 apt源 配置的 url 地址 并非 国内的,获取资源很慢,所以 需要 配置成 国内的 ...

  2. Esxi自动化配置脚本

    记录一下ESXi自动化配置脚本,脚本功能及脚本如下: 创建站点名称: 配置IP和vmotion IP及子网掩码 配置Vlan 删除默认端口组 增加vSwitch 设置NTP ############# ...

  3. 红米5+plus+信号显示无服务器,我的瞎折腾,红米AX5路由器MESH组网测试

    我的瞎折腾,红米AX5路由器MESH组网测试 2020-08-23 10:42:04 77点赞 443收藏 110评论 创作立场声明:路由器自己买的,我这不是客观测评,纯属主观瞎BB,我写的就是我使用 ...

  4. 空间组网(卫星组网)概述

    一.什么是"空间组网"? 空间组网从字面上来理解就是在空间中组建网络.那么我们类比地面的网络来说,它首先可以组建不同空间尺度上的网络.从相隔几十米的卫星之间组成局域网到覆盖整个太阳 ...

  5. AC+AP组网和MESH组网介绍和区别

    什么是AC+AP组网方案? AC+AP是针对大户型或别墅的一种组网方案,目的是让家里的每个角落都能保持良好的网络连接,是一种WLAN系统.AC是接入控制器,AP是无线接入点. 接入控制器把无线局域网接 ...

  6. python自动化框架测试实操_自动化框架之 python+selenium+pytest

    1.概述 selenium: 基于JavaScript代码库的自动化测试框架,通过脚本语言,模拟用户行为操作,最接近用户真实场景,实现对web自动测试. Selenium,是目前的最火爆企业最主流的w ...

  7. 服务器无线组网,物联网无线组网介绍

    在物联网中,组网方案方案是根据不用应用场景而定,下面说几种典型的组网方案. 一.单向组网 单向组网是,将采集到的数据通过DTU(数据传输终端)单向发送至服务器,称之为单向组网.这种组网方式在热水炉温度 ...

  8. 2021-2027全球与中国5G独立组网非独立组网基础设施市场现状及未来发展趋势

    2021-2027全球与中国5G独立组网&非独立组网基础设施市场现状及未来发展趋势 本文研究全球及中国市场5G独立组网&非独立组网基础设施现状及未来发展趋势,侧重分析全球及中国市场的主 ...

  9. 如何使用vps 异地组网_异地组网简要配置指南

    Tag : 异地组网 异地组网简要配置指南 多台网关设备没有公网地址的情况下,需要能够互相访问各网关设备之间的局域网. 目前异地组网只支持星型网络,成功建立组网后,只允许从分支节点局域网访问中心节点的 ...

最新文章

  1. weblogic反序列化漏洞
  2. leetcode算法题--不同的二叉搜索树 II
  3. 【IM】关于支持向量机分类的理解
  4. R语言实战应用精讲50篇(十八)-R语言实现分词、词频与词云案例解析
  5. java打出三角形乘法表_Java 练习(输出三角形,九九乘法表, 100以内的质数)
  6. JavaScript消息框应用
  7. 《ASP.NET Core 微服务实战》-- 读书笔记(第5章)
  8. ROS笔记(23) Move_base
  9. js 值类型和引用类型
  10. android studio学习----通过github的URL怎么导入新的工程
  11. Flutter进阶第1篇: http get请求数据、post提交数据、以及渲染动态数据
  12. Flask-SQLAlchemy - 不使用外键连表查询。记得常回来看我
  13. 阿里云云计算 10 ECS的使用
  14. Visual Studio开源库集成器Vcpkg全教程--利用Vcpkg轻松集成开源第三方库
  15. 小游戏开发设计之塔防类游戏
  16. 力扣数据库(end09.02)
  17. plsql如何导入csv文件,PLSQL导入csv文件到数据库
  18. WMware中ubuntu移动鼠标时鼠标消失解决办法
  19. Android系统VIN码识别SDK
  20. 尘锋信息scrm与企鲸客的功能差别

热门文章

  1. solr经纬度坐标查询
  2. 智慧消防栓解决方案有效解决了消防栓老化和损坏的问题
  3. Python爬取代理池并清洗可用IP
  4. 【11.9】Codeforces 刷题
  5. 拿阳蕾打赌的那位网友哪里去了?
  6. C盘太满扩容办法(超详细绝不骗人 谁都能也能轻易上手)
  7. Kindle Clippings Export 2012-12
  8. Verilog学习之路(6)— 组合电路的设计
  9. C++编程练习——石头剪刀布
  10. 每个程序员应该了解的97件事情