一、介紹
内網環境上千台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添磚加瓦吧。