天天看點

Netmiko批量修改華為交換機的vlan及acl

一、介紹

        内網環境上千台huawei交換機,之前配置有問題,目前需要更改,但是一台台更改即耗時間又費力,是以批量操作一下,腳本一跑,喝茶水去~~希望大佬們多提整改的寶貴意見。

二、腳本介紹

Netmiko批量修改華為交換機的vlan及acl

 三、執行結果

        首先會列印出本機的業務vlan及業務vlan的IP位址,IP比對的是主機位類似192.168.1.,由于沒有比對到vlan,是以全部執行了删除流政策指令。

Netmiko批量修改華為交換機的vlan及acl

        這裡比對到了本機的業務vlan213之後,删除acl,再重新配置,rule比對的IP是上邊過濾出來的主機位加上".2 0",例如:rule permit ip source 192.168.1.2 0

Netmiko批量修改華為交換機的vlan及acl

        最後,對于上邊配置的修改進行儲存。

Netmiko批量修改華為交換機的vlan及acl

四、腳本

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添磚加瓦吧。