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

上一篇:HCNP学习笔记之史上最全华为路由器交换机配置命令大合集


下一篇:华为/思科ACL