Configure In-band managment working.
Adding command line arguments.
This commit is contained in:
201
Aviat-config.py
Executable file
201
Aviat-config.py
Executable file
@@ -0,0 +1,201 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
import os
|
||||
import sys
|
||||
import socket
|
||||
import telnetlib
|
||||
import csv
|
||||
import threading
|
||||
import argparse
|
||||
try:
|
||||
import queue
|
||||
except ImportError:
|
||||
import Queue as queue
|
||||
|
||||
PORT=26000
|
||||
NEXT=1
|
||||
WORKERS = 5
|
||||
|
||||
NetMask = "255.255.0.0"
|
||||
Gateway = "10.250.0.0.255.255.0.0.0.172.16.0.1"
|
||||
OldSubnet = "192.168"
|
||||
NewSubnet = "172.16"
|
||||
VLAN = 4095
|
||||
|
||||
parser = argparse.ArgumentParser(description='Scriptable configuration of Aviat Eclipse INUes.')
|
||||
parser.add_argument('csv')
|
||||
|
||||
|
||||
def Config(tn, Context, Command, Position = 0, Value = None, Reverse = False):
|
||||
tn.write(("contextid %s\n" % Context).encode('ascii'))
|
||||
tn.read_until(b'Command Executed. Status unknown.\n')
|
||||
if Reverse:
|
||||
Temp = Position
|
||||
Position = Value
|
||||
Value = Temp
|
||||
if Value:
|
||||
tn.write(('set %s %s %s\n' % (Command, Position, Value)).encode('ascii'))
|
||||
else:
|
||||
tn.write(('get %s %s\n' % (Command, Position)).encode('ascii'))
|
||||
response = tn.read_until(b'\n').split()
|
||||
if response[0].decode() == Command:
|
||||
return response[-1]
|
||||
else:
|
||||
return False
|
||||
|
||||
def CommitSave(tn):
|
||||
Config(tn, "Terminal_I", "configCommitSave", 0, 1)
|
||||
Config(tn, "Terminal_I", "configCommitSwitch", 0, 1)
|
||||
|
||||
class Worker(threading.Thread):
|
||||
|
||||
def __init__(self, INUEs, Passed, Failed):
|
||||
self.__INUEs = INUEs
|
||||
self.__Passed = Passed
|
||||
self.__Failed = Failed
|
||||
threading.Thread.__init__(self)
|
||||
|
||||
def run(self):
|
||||
while 1:
|
||||
INUE = self.__INUEs.get()
|
||||
if INUE is None:
|
||||
self.__Passed.put(None)
|
||||
self.__Failed.put(None)
|
||||
break
|
||||
|
||||
NewIP = INUE.replace(OldSubnet, NewSubnet)
|
||||
|
||||
RSTPDAC = 0
|
||||
|
||||
try:
|
||||
with telnetlib.Telnet(INUE, PORT) as tn:
|
||||
for Slot in range(1,9):
|
||||
if Config(tn, "Slot%s_I" % Slot, "ceConfigBridgeStpMode"):
|
||||
RSTPDAC = Slot
|
||||
|
||||
if not RSTPDAC:
|
||||
self.__Failed.put(INUE)
|
||||
continue
|
||||
|
||||
commands = [
|
||||
["Slot%s_I" % Slot, "ceConfigNmsVid", 0, VLAN],
|
||||
["Terminal_I", "ipConfigAdEntAddress", Slot + 1, NewIP],
|
||||
["Terminal_I", "ipConfigAdEntNetMask", Slot + 1, NetMask],
|
||||
["Terminal_I", "ipConfigAutoroutingOspfEnable", Slot + 1, 2],
|
||||
["Terminal_I", "ipCidrRouteIfIndex", Slot + 48, Gateway, True],
|
||||
]
|
||||
|
||||
fail = False
|
||||
|
||||
for command in commands:
|
||||
if not Config(tn, *command):
|
||||
self.__Failed.put(INUE)
|
||||
fail = True
|
||||
continue
|
||||
|
||||
if fail:
|
||||
continue
|
||||
|
||||
CommitSave(tn)
|
||||
|
||||
except OSError:
|
||||
FailedQueue.put(INUE)
|
||||
continue
|
||||
|
||||
try:
|
||||
with telnetlib.Telnet(NewIP, PORT) as tn:
|
||||
self.__Passed.put(NewIP)
|
||||
except OSError:
|
||||
FailedQueue.put(INUE)
|
||||
continue
|
||||
|
||||
def Input():
|
||||
with open(inFilePath, 'r', newline='') as inFile:
|
||||
csvReader = csv.DictReader(inFile)
|
||||
|
||||
for row in csvReader:
|
||||
INUeQueue.put(row['IP Address'])
|
||||
inFile.close()
|
||||
|
||||
for i in range(WORKERS):
|
||||
INUeQueue.put(None)
|
||||
|
||||
|
||||
def FailedOutput():
|
||||
Count = WORKERS
|
||||
|
||||
# with open('/tmp/sc200.csv', 'w', newline='') as outFile:
|
||||
# csvWriter = csv.DictWriter(outFile, fieldnames=fieldNames,
|
||||
# delimiter=',', quotechar='"',
|
||||
# quoting=csv.QUOTE_MINIMAL)
|
||||
|
||||
# csvWriter.writeheader()
|
||||
|
||||
print('Failed:')
|
||||
|
||||
while 1:
|
||||
INUE = FailedQueue.get()
|
||||
if INUE is None:
|
||||
if Count > 1:
|
||||
Count -= 1
|
||||
# print(Count)
|
||||
else:
|
||||
break
|
||||
else:
|
||||
print(INUE)
|
||||
|
||||
def PassedOutput():
|
||||
Count = WORKERS
|
||||
|
||||
fieldNames = ['IP Address']
|
||||
with open('/tmp/aviat.csv', 'w', newline='') as outFile:
|
||||
csvWriter = csv.DictWriter(outFile, fieldnames=fieldNames,
|
||||
delimiter=',', quotechar='"',
|
||||
quoting=csv.QUOTE_MINIMAL)
|
||||
|
||||
csvWriter.writeheader()
|
||||
|
||||
while 1:
|
||||
INUE = PassedQueue.get()
|
||||
if INUE is None:
|
||||
if Count > 1:
|
||||
Count -= 1
|
||||
else:
|
||||
break
|
||||
else:
|
||||
csvWriter.writerow({"IP Address": INUE})
|
||||
|
||||
outFile.close()
|
||||
|
||||
|
||||
INUeQueue = queue.Queue(0)
|
||||
PassedQueue = queue.Queue(0)
|
||||
FailedQueue = queue.Queue(0)
|
||||
|
||||
# for i in range(WORKERS):
|
||||
# Worker(INUeQueue, PassedQueue, FailedQueue).start()
|
||||
|
||||
# for INUE in sys.argv:
|
||||
# if NEXT:
|
||||
# NEXT=0
|
||||
# else:
|
||||
# INUeQueue.put(INUE)
|
||||
|
||||
# for i in range(WORKERS):
|
||||
# INUeQueue.put(None)
|
||||
|
||||
inFilePath = sys.argv[1]
|
||||
|
||||
Input()
|
||||
|
||||
for i in range(WORKERS):
|
||||
Worker(INUeQueue, PassedQueue, FailedQueue).start()
|
||||
|
||||
if threading.current_thread() is not threading.main_thread():
|
||||
sys.exit(0)
|
||||
|
||||
PassedOutput()
|
||||
FailedOutput()
|
||||
|
||||
sys.exit(0)
|
||||
|
||||
Reference in New Issue
Block a user