天天看点

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