Add function to get ip address of onosdriver component
Will attempt to get numerical ip address of node, with preference for
the ONOS_NIC address
Change-Id: Ia71716f321e80a10c13ed8327014052b096dbeeb
diff --git a/TestON/drivers/common/cli/onosdriver.py b/TestON/drivers/common/cli/onosdriver.py
index eb1f53a..4b28e8e 100644
--- a/TestON/drivers/common/cli/onosdriver.py
+++ b/TestON/drivers/common/cli/onosdriver.py
@@ -20,7 +20,8 @@
import types
import pexpect
import os
-import os.path
+import re
+import subprocess
from requests.models import Response
from drivers.common.clidriver import CLI
@@ -34,6 +35,7 @@
self.name = None
self.home = None
self.handle = None
+ self.nicAddr = None
super( CLI, self ).__init__()
def connect( self, **connectargs ):
@@ -183,7 +185,7 @@
main.cleanup()
main.exit()
- def onosPackage( self, opTimeout=120 ):
+ def onosPackage( self, opTimeout=180 ):
"""
Produce a self-contained tar.gz file that can be deployed
and executed on any platform with Java 8 JRE.
@@ -720,6 +722,7 @@
tempList = tempList[ :-1 ]
# Structure the nic string ip
nicAddr = ".".join( tempList ) + ".*"
+ self.nicAddr = nicAddr
onosNicString = "export ONOS_NIC=" + nicAddr
try:
@@ -945,7 +948,7 @@
"ONOS\sis\salready\sinstalled",
"already\sup-to-date",
"\$",
- pexpect.TIMEOUT ], timeout=60 )
+ pexpect.TIMEOUT ], timeout=180 )
if i == 0:
main.log.warn( "Network is unreachable" )
self.handle.expect( "\$" )
@@ -2219,26 +2222,26 @@
serviceConfig.write("""${ONOS_HOME}/apache-karaf-$KARAF_VERSION/bin/karaf "$@" \n """)
serviceConfig.close()
- def createDBFile(self, testData):
+ def createDBFile( self, testData ):
filename = main.TEST + "DB"
DBString = ""
for item in testData:
- if type(item) is string:
+ if type( item ) is string:
item = "'" + item + "'"
- if testData.index(item) < len(testData-1):
+ if testData.index( item ) < len( testData - 1 ):
item += ","
- DBString += str(item)
+ DBString += str( item )
- DBFile = open(filename, "a")
- DBFile.write(DBString)
+ DBFile = open( filename, "a" )
+ DBFile.write( DBString )
DBFile.close()
- def verifySummary(self, ONOSIp,*deviceCount):
+ def verifySummary( self, ONOSIp, *deviceCount ):
- self.handle.sendline("onos " + ONOSIp + " summary")
- self.handle.expect(":~")
+ self.handle.sendline( "onos " + ONOSIp + " summary" )
+ self.handle.expect( ":~" )
summaryStr = self.handle.before
print "\nSummary\n==============\n" + summaryStr + "\n\n"
@@ -2250,18 +2253,65 @@
passed = False
if "SCC(s)=1," in summaryStr:
passed = True
- print("Summary is verifed")
+ print "Summary is verifed"
else:
- print("Summary failed")
+ print "Summary failed"
if deviceCount:
print" ============================="
- checkStr = "devices=" + str(deviceCount[0]) + ","
+ checkStr = "devices=" + str( deviceCount[0] ) + ","
print "Checkstr: " + checkStr
if checkStr not in summaryStr:
passed = False
- print("Device count failed")
+ print "Device count failed"
else:
print "device count verified"
return passed
+
+ def getIpAddr( self ):
+ """
+ Update self.ip_address with numerical ip address. If multiple IP's are
+ located on the device, will attempt to use self.nicAddr to choose the
+ right one. Defaults to 127.0.0.1 if no other address is found or cannot
+ determine the correct address.
+
+ ONLY WORKS WITH IPV4 ADDRESSES
+ """
+ try:
+ localhost = "127.0.0.1"
+ ipPat = "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
+ pattern = re.compile( ipPat )
+ match = re.search( pattern, self.ip_address )
+ if self.nicAddr:
+ nicPat = self.nicAddr.replace( ".", "\." ).replace( "\*", r"\d{1,3}" )
+ nicPat = re.compile( nicPat )
+ else:
+ nicPat = None
+ # IF self.ip_address is an ip address and matches
+ # self.nicAddr: return self.ip_address
+ if match:
+ curIp = match.group(0)
+ if nicPat:
+ nicMatch = re.search( nicPat, curIp )
+ if nicMatch:
+ return self.ip_address
+ # ELSE: attempt to get correct address.
+ raw = subprocess.check_output( "ifconfig")
+ ifPat = re.compile( "inet addr:({})".format( ipPat ) )
+ ips = re.findall( ifPat, raw )
+ if nicPat:
+ for ip in ips:
+ curMatch = re.search( nicPat, ip )
+ if curMatch:
+ self.ip_address = ip
+ return ip
+ else:
+ tmpList = [ ip for ip in ips if ip is not localhost ]
+ if len(tmpList) == 1:
+ curIp = tmpList[0]
+ self.ip_address = curIp
+ return curIp
+ return localhost
+ except Exception:
+ main.log.exception( "Uncaught exception" )