Various minor fixes and improvements
- enable parameters for onos cli commands (e.g. onos:apps -a)
- don't depend on onos1's name
- reduce dependencies on unnecessary variables
- enable running if karaf isn't installed elsewhere
- make NAT an option
Change-Id: I3e8abd51aa8d3f5c7afab1c6b86e50707de20ef6
diff --git a/tools/dev/mininet/onos.py b/tools/dev/mininet/onos.py
index 0799421..64d5a52 100755
--- a/tools/dev/mininet/onos.py
+++ b/tools/dev/mininet/onos.py
@@ -74,7 +74,7 @@
return user
# Module vars, initialized below
-HOME = ONOS_ROOT = KARAF_ROOT = ONOS_HOME = ONOS_USER = None
+HOME = ONOS_ROOT = ONOS_USER = None
ONOS_APPS = ONOS_WEB_USER = ONOS_WEB_PASS = ONOS_TAR = None
def initONOSEnv():
@@ -84,20 +84,16 @@
nodes: list of ONOS nodes
returns: ONOS environment variable dict"""
# pylint: disable=global-statement
- global HOME, ONOS_ROOT, KARAF_ROOT, ONOS_HOME, ONOS_USER
+ global HOME, ONOS_ROOT, ONOS_USER
global ONOS_APPS, ONOS_WEB_USER, ONOS_WEB_PASS
env = {}
def sd( var, val ):
"Set default value for environment variable"
env[ var ] = environ.setdefault( var, val )
return env[ var ]
+ assert environ[ 'HOME' ]
HOME = sd( 'HOME', environ[ 'HOME' ] )
- assert HOME
ONOS_ROOT = sd( 'ONOS_ROOT', join( HOME, 'onos' ) )
- KARAF_ROOT = sd( 'KARAF_ROOT',
- glob( join( HOME,
- 'Applications/apache-karaf-*' ) )[ -1 ] )
- ONOS_HOME = sd( 'ONOS_HOME', dirname( KARAF_ROOT ) )
environ[ 'ONOS_USER' ] = defaultUser()
ONOS_USER = sd( 'ONOS_USER', defaultUser() )
ONOS_APPS = sd( 'ONOS_APPS',
@@ -194,14 +190,11 @@
class ONOSNode( Controller ):
"ONOS cluster node"
- # Default karaf client location
- client = '/tmp/onos1/karaf/bin/client'
-
def __init__( self, name, **kwargs ):
kwargs.update( inNamespace=True )
Controller.__init__( self, name, **kwargs )
self.dir = '/tmp/%s' % self.name
- # Satisfy pylint
+ self.client = self.dir + '/karaf/bin/client'
self.ONOS_HOME = '/tmp'
# pylint: disable=arguments-differ
@@ -224,6 +217,7 @@
service = join( self.ONOS_HOME, 'bin/onos-service' )
self.ucmd( service, 'server 1>../onos.log 2>../onos.log'
' & echo $! > onos.pid; ln -s `pwd`/onos.pid ..' )
+ self.onosPid = int( self.cmd( 'cat onos.pid' ).strip() )
# pylint: enable=arguments-differ
@@ -232,6 +226,16 @@
self.cmd( 'pkill -HUP -f karaf.jar && wait' )
self.cmd( 'rm -rf', self.dir )
+ def isRunning( self ):
+ "Is our ONOS process still running?"
+ cmd = 'ps -p %d >/dev/null 2>&1 && echo "running" || echo "not running"'
+ return self.cmd( cmd % self.onosPid ) == 'running'
+
+ def sanityCheck( self ):
+ "Check whether we've quit or are running out of memory"
+ if not self.isRunning():
+ raise Exception( 'ONOS node %s has died' % self.name )
+
def waitStarted( self ):
"Wait until we've really started"
info( '(checking: karaf' )
@@ -281,6 +285,7 @@
args = list( args )
name = args.pop( 0 )
topo = kwargs.pop( 'topo', None )
+ nat = kwargs.pop( 'nat', 'nat0' )
# Default: single switch with 1 ONOS node
if not topo:
topo = SingleSwitchTopo
@@ -297,13 +302,13 @@
self.net = Mininet( topo=topo, ipBase=self.ipBase,
host=ONOSNode, switch=LinuxBridge,
controller=None )
- self.net.addNAT().configDefault()
+ if nat:
+ self.net.addNAT( nat ).configDefault()
updateNodeIPs( self.env, self.nodes() )
self._remoteControllers = []
def start( self ):
"Start up ONOS cluster"
- killprocs( 'karaf.jar' )
info( '*** ONOS_APPS = %s\n' % ONOS_APPS )
self.net.start()
for node in self.nodes():
@@ -402,6 +407,10 @@
net = MininetFacade( net, cnet=c0.net )
OldCLI.__init__( self, net, **kwargs )
+ def onos1( self ):
+ "Helper function: return default ONOS node"
+ return self.mn.controllers[ 0 ].net.hosts[ 0 ]
+
def do_onos( self, line ):
"Send command to ONOS CLI"
c0 = self.mn.controllers[ 0 ]
@@ -409,7 +418,10 @@
# cmdLoop strips off command name 'onos'
if line.startswith( ':' ):
line = 'onos' + line
- cmd = 'onos1 client -h onos1 ' + line
+ onos1 = self.onos1().name
+ if line:
+ line = '"%s"' % line
+ cmd = '%s client -h %s %s' % ( onos1, onos1, line )
quietRun( 'stty -echo' )
self.default( cmd )
quietRun( 'stty echo' )
@@ -423,8 +435,8 @@
self.do_onos( ':balance-masters' )
def do_log( self, line ):
- "Run tail -f /tmp/onos1/log on onos1; press control-C to stop"
- self.default( 'onos1 tail -f /tmp/onos1/log' )
+ "Run tail -f /tmp/onos1/log; press control-C to stop"
+ self.default( self.onos1().name, 'tail -f /tmp/%s/log' % self.onos1() )
### Exports for bin/mn