一、介绍
内网环境上千台huawei交换机,之前配置有问题,目前需要更改,但是一台台更改即耗时间又费力,所以批量操作一下,脚本一跑,喝茶水去~~希望大佬们多提整改的宝贵意见。
二、脚本介绍
三、执行结果
首先会打印出本机的业务vlan及业务vlan的IP地址,IP匹配的是主机位类似192.168.1.,由于没有匹配到vlan,所以全部执行了删除流策略命令。
这里匹配到了本机的业务vlan213之后,删除acl,再重新配置,rule匹配的IP是上边过滤出来的主机位加上".2 0",例如:rule permit ip source 192.168.1.2 0
最后,对于上边配置的修改进行保存。
四、脚本
from netmiko import ConnectHandler
from getpass import getpass
import re
username = input('Username: ')
password = getpass('password: ')
# Open file and login
f = open("ip_list.txt", "r")
# ssh netmiko config switch
for line in f.readlines():
ip = line.strip()
huawei = {
'device_type' : 'huawei',
'host' : ip,
'username' : username,
'password' : password,
'port' : '22',
}
net_connect = ConnectHandler(**huawei)
output = net_connect.send_command('dis cu | include ^vlan')
vlan = re.findall(r"\b\d+\b", output);
vlanlist = sorted(set(vlan),key=vlan.index)
portvlan = net_connect.send_command('dis cu interface GigabitEthernet 1/0/1 | include pvid vlan')
pvlan = re.findall(r'\d+', portvlan)
pvlan_str = ''.join(list(map(str,pvlan)))
print("本机的业务VLAN是:", pvlan_str)
ipadd = net_connect.send_command('dis current-configuration configuration vlan ' + pvlan_str + ' | include des')
ip = re.findall(r'\d[0-9].\d[0-9].\d[0-9]', ipadd)
ip_str = ''.join(list(map(str,ip)))
print("本业务VLAN的主机位IP是:", ip)
for i in vlanlist:
if i == pvlan_str:
delacl_commands = ["undo acl 30", "acl name Update&Domain 30", "rule permit ip source " + ip_str+ ".2 0"]
output2 = net_connect.send_config_set(delacl_commands)
print(output2)
else:
config_commands = ['vlan ' + (i),'undo traffic-policy Up&Domain inbound']
output3 = net_connect.send_config_set(config_commands)
print(output3)
output4 = net_connect.save_config()
print(output4)
======================================================================
======================================================================
脚本执行起来很慢,如果想快一点,可以参考我这边的多线程+队列,大佬可以自己搞然后分享给我学习一下,让我们一起为netdevops添砖加瓦吧。