栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python Configure Switches

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python Configure Switches

assignservers.py
from netmiko import ConnectHandler
from datetime import datetime
import csv
import openpyxl
import re


def connected_switches_and_1stports(servers):
    csvfile2 = open('huaweiswpass.csv', 'r')
    reader2 = list(csv.DictReader(csvfile2))
    with open(servers, newline='') as csvfile:
        reader = list(csv.DictReader(csvfile))
        l = [[[row2['e_sw_ip'], row2['e_username'], row2['e_password']], [row2['l_sw_ip'], row2['l_username'], row2['l_password']]] for row in reader for row2 in reader2 if row['rack'] == row2['rack']]
        m = []
        for i in l:
            if i not in m:
                m.append(i)
        li = list(dict.fromkeys([row['rack'] for row in reader]))
        sl = []
        x = 0
        for i in li:
            sl.append([])
            for row in reader:
                if row['rack'] == i:
                    sl[x].append(row['no'])
            x += 1
    csvfile2.close()
    return zip(m,sl)


def backup_vlan(ports, fname):
    f = open(fname, 'w+')
    for sw in ports:
        sshcon = ConnectHandler(device_type='huawei', ip=sw[0][0][0], username=sw[0][0][1], password=sw[0][0][2], global_delay_factor=0.5)
        output = sshcon.send_command_timing("display port vlan")
        f.write(sw[0][0][0] + "n")
        f.write(output + "nnn")
        sshcon.disconnect()
        if not sw[0][1][0] == '':
            sshcon = ConnectHandler(device_type='huawei_vrpv8', ip=sw[0][1][0], username=sw[0][1][1], password=sw[0][1][2], global_delay_factor=0.5)
            output = sshcon.send_command_timing("display port vlan")
            f.write(sw[0][1][0] + "n")
            f.write(output + "nnn")
            sshcon.disconnect()
    f.close()


def vlan_batch_and_uplink(ports, vlans):
    v = vlans.split()
    mvlan = v[0]
    servlan = v[1].split("-")
    serfrvlan = servlan[0]
    sertovlan = servlan[1]
    allowed_vlans = mvlan + " " + serfrvlan + " to " + sertovlan
    for sw in ports:
        sshcon = ConnectHandler(device_type='huawei', ip=sw[0][0][0], username=sw[0][0][1], password=sw[0][0][2], global_delay_factor=0.5)
        output = sshcon.send_config_set(["vlan batch " + allowed_vlans, "int eth 1", "port trunk all vlan " + allowed_vlans, "return"])

        sshcon.exit_config_mode()
        output = sshcon.send_command_timing("save")
        if "Y/N" in output:
            output += sshcon.send_command_timing("y", strip_prompt=False, strip_command=False)
        sshcon.disconnect()

        if not sw[0][1][0] == '':
            sshcon = ConnectHandler(device_type='huawei_vrpv8', ip=sw[0][1][0], username=sw[0][1][1], password=sw[0][1][2], global_delay_factor=0.5)
            output = sshcon.send_config_set(["vlan batch " + allowed_vlans, "int 10g1/0/48", "port trunk all vlan " + allowed_vlans], False)
            sshcon.commit()

            sshcon.exit_config_mode()
            output = sshcon.send_command_timing("save")
            if "Y/N" in output:
                output += sshcon.send_command_timing("y", strip_prompt=False, strip_command=False)
            sshcon.disconnect()


def undo_vlan_batch_and_uplink(ports, vlans):
    v = vlans.split()
    #mvlan = v[0]
    servlan = v[1].split("-")
    serfrvlan = servlan[0]
    sertovlan = servlan[1]
    allowed_vlans =  serfrvlan + " to " + sertovlan
    for sw in ports:
        sshcon = ConnectHandler(device_type='huawei', ip=sw[0][0][0], username=sw[0][0][1], password=sw[0][0][2], global_delay_factor=0.5)
        sshcon.config_mode()
        output = sshcon.send_command_timing("undo vlan batch " + allowed_vlans, strip_command=False, strip_prompt=False)
        if "Y/N" in output:
            output += sshcon.send_command_timing("y", strip_prompt = False, strip_command = False)
        output = sshcon.send_config_set(["int eth 1", "undo port trunk all vlan " + allowed_vlans, "return"])
        sshcon.disconnect()
        if not sw[0][1][0] == '':
            sshcon = ConnectHandler(device_type='huawei_vrpv8', ip=sw[0][1][0], username=sw[0][1][1], password=sw[0][1][2], global_delay_factor=0.5)
            sshcon.config_mode()
            output = sshcon.send_command_timing("undo vlan batch " + allowed_vlans, strip_command=False, strip_prompt=False)
            if "Y/N" in output:
                output += sshcon.send_command_timing("y", strip_prompt = False, strip_command = False)
            output = sshcon.send_config_set(["int 10g1/0/48 ", "undo port trunk all vlan " + allowed_vlans], False)
            sshcon.commit()

            sshcon.exit_config_mode()
            output = sshcon.send_command_timing("save")
            if "Y/N" in output:
                output += sshcon.send_command_timing("y", strip_prompt = False, strip_command = False)
            sshcon.disconnect()


def configure_int_vlan(ports,vlans):
    start_time = datetime.now()
    v = vlans.split()
    mvlan = v[0]
    servlan = v[1].split("-")
    serfrvlan = servlan[0]
    sertovlan = servlan[1]
    allowed_vlans = serfrvlan + " to " + sertovlan
    for sw in ports:
        print("Configuring " + sw[0][0][0])
        for port in sw[1]:
            int1 = "g0/0/" + str(int(port))
            int2 = "g0/0/" + str(int(port) + 15)
            int3 = "g0/0/" + str(int(port) + 30)
            int4 = "g1/0/" + str(int(port))
            sshcon = ConnectHandler(device_type='huawei', ip=sw[0][0][0], username=sw[0][0][1], password=sw[0][0][2], global_delay_factor=0.5)
            sshcon.config_mode()
            output = sshcon.send_command_timing("clear configuration interface " + int1, strip_command=False, strip_prompt=False)
            if "Y/N" in output:
                output += sshcon.send_command_timing("y", strip_prompt = False, strip_command = False)
            output = sshcon.send_config_set(["interface " + int1, "undo shutdown", "port link trunk", "port trunk pvid vlan " + serfrvlan, "undo port trunk all vlan all", "port trunk all vlan " + allowed_vlans, "return"])
            print(int1 + "Done")

            sshcon.config_mode()
            output = sshcon.send_command_timing("clear configuration interface " + int2, strip_command=False, strip_prompt=False)
            if "Y/N" in output:
                output += sshcon.send_command_timing("y", strip_prompt = False, strip_command = False)
            output += sshcon.send_config_set(["interface " + int2, "undo shutdown", "port link trunk", "port trunk pvid vlan " + mvlan, "undo port trunk all vlan all", "port trunk all vlan "  + mvlan + " " + allowed_vlans, "return"])
            print(int2 + "Done")

            sshcon.config_mode()
            output = sshcon.send_command_timing("clear configuration interface " + int3, strip_command=False, strip_prompt=False)
            if "Y/N" in output:
                output += sshcon.send_command_timing("y", strip_prompt = False, strip_command = False)
            output += sshcon.send_config_set(["interface " + int3, "undo shutdown", "port link trunk", "port trunk pvid vlan " + str(int(serfrvlan)+1), "undo port trunk all vlan all", "port trunk all vlan " + allowed_vlans, "return"])
            print(int3 + "Done")

            sshcon.config_mode()
            output = sshcon.send_command_timing("clear configuration interface " + int4, strip_command=False, strip_prompt=False)
            if "Y/N" in output:
                output += sshcon.send_command_timing("y", strip_prompt = False, strip_command = False)
            output += sshcon.send_config_set(["interface " + int4, "undo shutdown", "port link trunk", "port trunk pvid vlan " + str(int(serfrvlan)+2), "undo port trunk all vlan all", "port trunk all vlan " + allowed_vlans, "return"])
            print(int4 + "Done")

            sshcon.exit_config_mode()
            output = sshcon.send_command_timing("save")
            if "Y/N" in output:
                output += sshcon.send_command_timing("y", strip_prompt=False, strip_command=False)

            sshcon.disconnect()

        if sw[0][1][0] != '':
            for port in sw[1]:
                if int(port) <= 12:
                    int1 = "10g1/0/" + str(int(port))
                    int2 = "10g1/0/" + str(int(port) + 12)
                    int3 = "10g1/0/" + str(int(port) + 24)
                    int4 = "10g1/0/" + str(int(port) + 36)
                    print("Configuring" + sw[0][1][0])

                    sshcon = ConnectHandler(device_type='huawei_vrpv8', ip=sw[0][1][0], username=sw[0][1][1], password=sw[0][1][2], global_delay_factor=0.5)
                    sshcon.config_mode()

                    output = sshcon.send_command_timing("clear configuration interface " + int1, strip_command=False, strip_prompt=False)
                    if "Y/N" in output:
                        output += sshcon.send_command_timing("y", strip_prompt=False, strip_command=False)
                    output += sshcon.send_config_set(["interface " + int1, "undo shutdown", "port link trunk", "port trunk pvid vlan " + str(int(serfrvlan) + 3), "undo port trunk all vlan all", "port trunk all vlan " + allowed_vlans], False)
                    sshcon.commit()
                    print(int1 + "Done")

                    output = sshcon.send_command_timing("clear configuration interface " + int2, strip_command=False, strip_prompt=False)
                    if "Y/N" in output:
                        output += sshcon.send_command_timing("y", strip_prompt=False, strip_command=False)
                    output += sshcon.send_config_set(["interface " + int2, "undo shutdown", "port link trunk", "port trunk pvid vlan " + str(int(serfrvlan) + 3), "undo port trunk all vlan all", "port trunk all vlan " + allowed_vlans], False)
                    sshcon.commit()
                    print(int2 + "Done")

                    output = sshcon.send_command_timing("clear configuration interface " + int3, strip_command=False, strip_prompt=False)
                    if "Y/N" in output:
                        output += sshcon.send_command_timing("y", strip_prompt=False, strip_command=False)
                    output += sshcon.send_config_set(["interface " + int3, "undo shutdown", "port link trunk", "port trunk pvid vlan " + str(int(serfrvlan) + 4), "undo port trunk all vlan all", "port trunk all vlan " + allowed_vlans], False)
                    sshcon.commit()
                    print(int3 + "Done")

                    if int(port) != 12:
                        output = sshcon.send_command_timing("clear configuration interface " + int4, strip_command=False, strip_prompt=False)
                        if "Y/N" in output:
                            output += sshcon.send_command_timing("y", strip_prompt=False, strip_command=False)
                        output += sshcon.send_config_set(["interface " + int4, "undo shutdown", "port link trunk", "port trunk pvid vlan " + str(int(serfrvlan) + 4), "undo port trunk all vlan all", "port trunk all vlan " + allowed_vlans], False)
                        sshcon.commit()
                        print(int4 + "Done")

                    sshcon.exit_config_mode()
                    output = sshcon.send_command_timing("save")
                    if "Y/N" in output:
                        output += sshcon.send_command_timing("y", strip_prompt=False, strip_command=False)

                    sshcon.disconnect()

                else:
                    output = "waiting to be implemented"

    end_time = datetime.now()
    print("Total time: {}".format(end_time - start_time))


def clear_conf_interface(ports):
    start_time = datetime.now()
    for sw in ports:
        print("Releasing " + sw[0][0][0])
        sshcon = ConnectHandler(device_type='huawei', ip=sw[0][0][0], username=sw[0][0][1], password=sw[0][0][2],
                                global_delay_factor=0.5)
        for port in sw[1]:
            int1 = "g0/0/" + str(int(port))
            int2 = "g0/0/" + str(int(port) + 15)
            int3 = "g0/0/" + str(int(port) + 30)
            int4 = "g1/0/" + str(int(port))

            sshcon.config_mode()
            output = sshcon.send_command_timing("clear configuration interface " + int1, strip_command=False, strip_prompt=False)
            if "Y/N" in output:
                output += sshcon.send_command_timing("y", strip_prompt = False, strip_command = False)
            output = sshcon.send_config_set(["interface " + int1, "undo shutdown", "return"])
            print(int1 + "Done")

            sshcon.config_mode()
            output = sshcon.send_command_timing("clear configuration interface " + int2, strip_command=False, strip_prompt=False)
            if "Y/N" in output:
                output += sshcon.send_command_timing("y", strip_prompt = False, strip_command = False)
            output += sshcon.send_config_set(["interface " + int2, "undo shutdown", "return"])
            print(int2 + "Done")

            sshcon.config_mode()
            output = sshcon.send_command_timing("clear configuration interface " + int3, strip_command=False, strip_prompt=False)
            if "Y/N" in output:
                output += sshcon.send_command_timing("y", strip_prompt = False, strip_command = False)
            output += sshcon.send_config_set(["interface " + int3, "undo shutdown", "return"])
            print(int3 + "Done")

            sshcon.config_mode()
            output = sshcon.send_command_timing("clear configuration interface " + int4, strip_command=False, strip_prompt=False)
            if "Y/N" in output:
                output += sshcon.send_command_timing("y", strip_prompt = False, strip_command = False)
            output += sshcon.send_config_set(["interface " + int4, "undo shutdown", "return"])
            print(int4 + "Done")

        sshcon.exit_config_mode()
        output = sshcon.send_command_timing("save")
        if "Y/N" in output:
            output += sshcon.send_command_timing("y", strip_prompt=False, strip_command=False)

        sshcon.disconnect()

        if sw[0][1][0] != '':
            for port in sw[1]:
                if int(port) <= 12:
                    int1 = "10g1/0/" + str(int(port))
                    int2 = "10g1/0/" + str(int(port) + 12)
                    int3 = "10g1/0/" + str(int(port) + 24)
                    int4 = "10g1/0/" + str(int(port) + 36)
                    print("Releasing" + sw[0][1][0])

                    sshcon = ConnectHandler(device_type='huawei_vrpv8', ip=sw[0][1][0], username=sw[0][1][1], password=sw[0][1][2], global_delay_factor=0.5)
                    sshcon.config_mode()

                    output = sshcon.send_command_timing("clear configuration interface " + int1, strip_command=False, strip_prompt=False)
                    if "Y/N" in output:
                        output += sshcon.send_command_timing("y", strip_prompt=False, strip_command=False)
                    print(int1 + "Done")

                    output = sshcon.send_command_timing("clear configuration interface " + int2, strip_command=False, strip_prompt=False)
                    if "Y/N" in output:
                        output += sshcon.send_command_timing("y", strip_prompt=False, strip_command=False)
                    print(int2 + "Done")

                    output = sshcon.send_command_timing("clear configuration interface " + int3, strip_command=False, strip_prompt=False)
                    if "Y/N" in output:
                        output += sshcon.send_command_timing("y", strip_prompt=False, strip_command=False)
                    print(int3 + "Done")

                    if int(port) != 12:
                        output = sshcon.send_command_timing("clear configuration interface " + int4, strip_command=False, strip_prompt=False)
                        if "Y/N" in output:
                            output += sshcon.send_command_timing("y", strip_prompt=False, strip_command=False)
                        print(int4 + "Done")

                    sshcon.exit_config_mode()
                    output = sshcon.send_command_timing("save")
                    if "Y/N" in output:
                        output += sshcon.send_command_timing("y", strip_prompt=False, strip_command=False)

                    sshcon.disconnect()

                else:
                    output = "waiting to be implemented"

    end_time = datetime.now()
    print("Total time: {}".format(end_time - start_time))


def extract_vlans_and_servers_from_xlsx(pname, serverscsv):
    path = 'D:\FH\svn0303\10 物料分配表\'
    wb = openpyxl.load_workbook(path+pname+'.xlsx')
    s = wb['网络配置']
    pattern = r'Ld+-d+'
    f = open(serverscsv, 'w+')
    f.write('rack,non')
    vlans = ''
    for row in s.iter_rows():
        for cell in row:
            if cell.value == 'vlans':
                vlans = s.cell(column=cell.column+1, row=cell.row).value
            if type(cell.value) is str and re.match(pattern, cell.value) is not None:
                no = s.cell(column=cell.column+2, row=cell.row).value
                if type(no) is int:
                    no = str(no)
                f.write(cell.value+','+no+'n')
    f.close()
    return vlans
configureswitches.py
import assignservers as asse
from datetime import datetime
import sys


lease = 'CONFIGURE'          # CONFIGURE or RELEASE
pname = "200827200727001-lj-idle"
assigned_servers = "servers.csv"
vlans = asse.extract_vlans_and_servers_from_xlsx(pname, assigned_servers)
ports = list(asse.connected_switches_and_1stports(assigned_servers))

print("Related switches are: n")
for sw in ports:
    print(sw)
print("nRelated vlans are " + vlans + 'n')

if lease == 'CONFIGURE':
    prompt = "You are going to CONFIGURE interface vlans. Are you sure to continue? [Y/N]"
elif lease == 'RELEASE':
    prompt = "You are going to CLEAR interface vlans and RELEASE servers. Are you sure to continue? [Y/N]"
flag = input(prompt)

if flag == 'Y' or flag == 'y':
    if lease == 'CONFIGURE':
        fname = datetime.now().strftime("%Y%m%d%H%M%S") + " backupforconfiguring " + pname
        asse.backup_vlan(ports, fname)
        asse.vlan_batch_and_uplink(ports, vlans)
        asse.configure_int_vlan(ports, vlans)
    elif lease == 'RELEASE':
        fname = datetime.now().strftime("%Y%m%d%H%M%S") + " backupforreleasing " + pname
        asse.backup_vlan(ports, fname)
        asse.undo_vlan_batch_and_uplink(ports, vlans)
        asse.clear_conf_interface(ports)
else:
    sys.exit()
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/994858.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号