def configureIP(RouterInst,Interface,IP_address): #Configures IP address flushBuffer(1,RouterInst) RouterInst.sendcontrol('m') RouterInst.expect(['/w+@.*/#',pexpect.EOF,pexpect.TIMEOUT],timeout=2) config = """curl -H "Content-Type: application/json" -d '{"IpAddr": "%s", "IntfRef": "%s"}' http://localhost:8080/public/v1/config/IPv4Intf""" % (IP_address,Interface) RouterInst = executeCmd(RouterInst,config) outputCheck(RouterInst,Interface,IP_address,config) return RouterInst
def checkBGPRoute(RouterInst): var = 'checkBGPRoute' flushBuffer(1, RouterInst) RouterInst.expect(['/w+@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=3) config = """curl -i -H "Content-Type: application/json" "http://*****:*****@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=3) logger.info(RouterInst.before, also_console=True) output = RouterInst.before outputCheck(RouterInst, var, output) return RouterInst
def checkAllBGPNeighbors(RouterInst): var = 'checkAllBGPNeighbors' flushBuffer(1, RouterInst) RouterInst.expect(['/w+@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=3) config = """curl -H "Accept: application/json" "http://*****:*****@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=3) logger.info(RouterInst.before, also_console=True) output = RouterInst.before outputCheck(RouterInst, var, output) return RouterInst
def checkIPV4Route( RouterInst ): #Check BGP Neighbors are learnt and populated in IPv4table var = 'checkIPV4Route' flushBuffer(1, RouterInst) RouterInst.expect(['/w+@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=3) config = """curl -H "Accept: application/json" "http://*****:*****@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=3) logger.info(RouterInst.before) output = RouterInst.before outputCheck(RouterInst, var, output) return RouterInst
def BGPglobal(RouterInst, AS_Num, RouterId): #Performs Global BGP configuration var = 'BGPglobal' flushBuffer(1, RouterInst) RouterInst.expect(['/w+@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=3) config = """curl -X PATCH "Content-Type: application/json" -d '{"ASNum":"%s","RouterId":"%s"}' http://localhost:8080/public/v1/config/BGPGlobal""" % ( AS_Num, RouterId) RouterInst = executeCmd(RouterInst, config) RouterInst.expect(['/w+@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=3) logger.info(RouterInst.before, also_console=True) output = RouterInst.before outputCheck(RouterInst, var, output) return RouterInst
def createBGPV4Neighbor(RouterInst, PeerAS, NeighborAddress, Interface, BfdEnable=False, PeerGroup='', MultiHopTTL=0, LocalAS='', KeepaliveTime=0, AddPathsRx=False, UpdateSource='', RouteReflectorClient=False, MaxPrefixesRestartTimer=0, Description='', MultiHopEnable=False, AuthPassword='', RouteReflectorClusterId=0, AdjRIBOutFilter='', MaxPrefixesDisconnect=False, AddPathsMaxTx=0, AdjRIBInFilter='', MaxPrefixes=0, MaxPrefixesThresholdPct=80, BfdSessionParam='default', NextHopSelf=False, Disabled=False, HoldTime=0, ConnectRetryTime=0): var = 'createBGPV4Neighbor' flushBuffer(1, RouterInst) RouterInst.expect(['/w+@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=3) config = """curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{"PeerAS":"%s", "NeighborAddress":"%s","IntfRef":"%s", "IfIndex":0,"RouteReflectorClusterId":0, "MultiHopTTL":0,"ConnectRetryTime":60,"HoldTime":180,"KeepaliveTime":60,"AddPathsMaxTx":0}' 'http://*****:*****@.*/#', pexpect.EOF, pexpect.TIMEOUT], timeout=3) logger.info(RouterInst.before, also_console=True) output = RouterInst.before outputCheck(RouterInst, var, output) return RouterInst
def outputCheck(RouterInst,Interface,IP_address,config): #Interprets Output li = IP_address.split('/') count = 3 RouterInst.expect(['/w+@.*/#',pexpect.EOF,pexpect.TIMEOUT],timeout=3) logger.info(RouterInst.before,also_console=True) output = RouterInst.before while count >= 0: if re.search('\"Result\"\:\"Success\"',output): checkInterface(RouterInst,Interface,li[0]) break elif re.search('Failed to connect to localhost port 8080',output): logger.info("*** ERROR:Failed to connect to localhost port 8080 ***",also_console=True) logger.info( '*** Flexswitch not started properly : Please restart the flexswitch ***',also_console=True) restartSwitch(RouterInst) RouterInst = executeCmd(RouterInst,config) RouterInst.expect(['/w+@.*/#',pexpect.EOF,pexpect.TIMEOUT],timeout=3) logger.info(RouterInst.before,also_console=True) output = RouterInst.before count = count - 1 if count == -1: logToFile.debug("Error: Unable to start the flexswitch") raise RuntimeError("Some error : Unable to start the Flexswitch") else: continue elif re.search('System not ready',output): logger.info("*** ERROR:System not ready,Daemons still restarting ***",also_console=True) time.sleep(20) RouterInst = executeCmd(RouterInst,config) RouterInst.expect(['/w+@.*/#',pexpect.EOF,pexpect.TIMEOUT],timeout=3) logger.info(RouterInst.before,also_console=True) output = RouterInst.before count = count - 1 if count == -1: logToFile.debug("Error: Unable to start the flexswitch") raise RuntimeError("Some error : Unable to start the Flexswitch") else: continue elif re.search("Invalid interface reference provided in ip intf config object", output): logToFile.debug("Invalid interface reference provided in ip intf config object") raise RuntimeError("Error : Interface reference provided, is incorrect(Check interface is up for that particular device)") elif re.search("ip address validation failed",output): logToFile.debug("ip address validation failed") raise RuntimeError("Error : IP address not specified correctly") elif re.search('\"Result\"\:\"Error\: Already configured\.',output): logToFile.info("IP address already configured") break elif re.search('curl : command not found',output): preliminaryInstalls(RouterInst) count = count -1 if count == -1: logToFile.debug("Unable to install CURL : Check the internet connection") raise RuntimeError("Some error : Unable to install curl") else: continue return