Bob Lantz
Committed by Gerrit Code Review

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
...@@ -74,7 +74,7 @@ def defaultUser(): ...@@ -74,7 +74,7 @@ def defaultUser():
74 return user 74 return user
75 75
76 # Module vars, initialized below 76 # Module vars, initialized below
77 -HOME = ONOS_ROOT = KARAF_ROOT = ONOS_HOME = ONOS_USER = None 77 +HOME = ONOS_ROOT = ONOS_USER = None
78 ONOS_APPS = ONOS_WEB_USER = ONOS_WEB_PASS = ONOS_TAR = None 78 ONOS_APPS = ONOS_WEB_USER = ONOS_WEB_PASS = ONOS_TAR = None
79 79
80 def initONOSEnv(): 80 def initONOSEnv():
...@@ -84,20 +84,16 @@ def initONOSEnv(): ...@@ -84,20 +84,16 @@ def initONOSEnv():
84 nodes: list of ONOS nodes 84 nodes: list of ONOS nodes
85 returns: ONOS environment variable dict""" 85 returns: ONOS environment variable dict"""
86 # pylint: disable=global-statement 86 # pylint: disable=global-statement
87 - global HOME, ONOS_ROOT, KARAF_ROOT, ONOS_HOME, ONOS_USER 87 + global HOME, ONOS_ROOT, ONOS_USER
88 global ONOS_APPS, ONOS_WEB_USER, ONOS_WEB_PASS 88 global ONOS_APPS, ONOS_WEB_USER, ONOS_WEB_PASS
89 env = {} 89 env = {}
90 def sd( var, val ): 90 def sd( var, val ):
91 "Set default value for environment variable" 91 "Set default value for environment variable"
92 env[ var ] = environ.setdefault( var, val ) 92 env[ var ] = environ.setdefault( var, val )
93 return env[ var ] 93 return env[ var ]
94 + assert environ[ 'HOME' ]
94 HOME = sd( 'HOME', environ[ 'HOME' ] ) 95 HOME = sd( 'HOME', environ[ 'HOME' ] )
95 - assert HOME
96 ONOS_ROOT = sd( 'ONOS_ROOT', join( HOME, 'onos' ) ) 96 ONOS_ROOT = sd( 'ONOS_ROOT', join( HOME, 'onos' ) )
97 - KARAF_ROOT = sd( 'KARAF_ROOT',
98 - glob( join( HOME,
99 - 'Applications/apache-karaf-*' ) )[ -1 ] )
100 - ONOS_HOME = sd( 'ONOS_HOME', dirname( KARAF_ROOT ) )
101 environ[ 'ONOS_USER' ] = defaultUser() 97 environ[ 'ONOS_USER' ] = defaultUser()
102 ONOS_USER = sd( 'ONOS_USER', defaultUser() ) 98 ONOS_USER = sd( 'ONOS_USER', defaultUser() )
103 ONOS_APPS = sd( 'ONOS_APPS', 99 ONOS_APPS = sd( 'ONOS_APPS',
...@@ -194,14 +190,11 @@ def RenamedTopo( topo, *args, **kwargs ): ...@@ -194,14 +190,11 @@ def RenamedTopo( topo, *args, **kwargs ):
194 class ONOSNode( Controller ): 190 class ONOSNode( Controller ):
195 "ONOS cluster node" 191 "ONOS cluster node"
196 192
197 - # Default karaf client location
198 - client = '/tmp/onos1/karaf/bin/client'
199 -
200 def __init__( self, name, **kwargs ): 193 def __init__( self, name, **kwargs ):
201 kwargs.update( inNamespace=True ) 194 kwargs.update( inNamespace=True )
202 Controller.__init__( self, name, **kwargs ) 195 Controller.__init__( self, name, **kwargs )
203 self.dir = '/tmp/%s' % self.name 196 self.dir = '/tmp/%s' % self.name
204 - # Satisfy pylint 197 + self.client = self.dir + '/karaf/bin/client'
205 self.ONOS_HOME = '/tmp' 198 self.ONOS_HOME = '/tmp'
206 199
207 # pylint: disable=arguments-differ 200 # pylint: disable=arguments-differ
...@@ -224,6 +217,7 @@ class ONOSNode( Controller ): ...@@ -224,6 +217,7 @@ class ONOSNode( Controller ):
224 service = join( self.ONOS_HOME, 'bin/onos-service' ) 217 service = join( self.ONOS_HOME, 'bin/onos-service' )
225 self.ucmd( service, 'server 1>../onos.log 2>../onos.log' 218 self.ucmd( service, 'server 1>../onos.log 2>../onos.log'
226 ' & echo $! > onos.pid; ln -s `pwd`/onos.pid ..' ) 219 ' & echo $! > onos.pid; ln -s `pwd`/onos.pid ..' )
220 + self.onosPid = int( self.cmd( 'cat onos.pid' ).strip() )
227 221
228 # pylint: enable=arguments-differ 222 # pylint: enable=arguments-differ
229 223
...@@ -232,6 +226,16 @@ class ONOSNode( Controller ): ...@@ -232,6 +226,16 @@ class ONOSNode( Controller ):
232 self.cmd( 'pkill -HUP -f karaf.jar && wait' ) 226 self.cmd( 'pkill -HUP -f karaf.jar && wait' )
233 self.cmd( 'rm -rf', self.dir ) 227 self.cmd( 'rm -rf', self.dir )
234 228
229 + def isRunning( self ):
230 + "Is our ONOS process still running?"
231 + cmd = 'ps -p %d >/dev/null 2>&1 && echo "running" || echo "not running"'
232 + return self.cmd( cmd % self.onosPid ) == 'running'
233 +
234 + def sanityCheck( self ):
235 + "Check whether we've quit or are running out of memory"
236 + if not self.isRunning():
237 + raise Exception( 'ONOS node %s has died' % self.name )
238 +
235 def waitStarted( self ): 239 def waitStarted( self ):
236 "Wait until we've really started" 240 "Wait until we've really started"
237 info( '(checking: karaf' ) 241 info( '(checking: karaf' )
...@@ -281,6 +285,7 @@ class ONOSCluster( Controller ): ...@@ -281,6 +285,7 @@ class ONOSCluster( Controller ):
281 args = list( args ) 285 args = list( args )
282 name = args.pop( 0 ) 286 name = args.pop( 0 )
283 topo = kwargs.pop( 'topo', None ) 287 topo = kwargs.pop( 'topo', None )
288 + nat = kwargs.pop( 'nat', 'nat0' )
284 # Default: single switch with 1 ONOS node 289 # Default: single switch with 1 ONOS node
285 if not topo: 290 if not topo:
286 topo = SingleSwitchTopo 291 topo = SingleSwitchTopo
...@@ -297,13 +302,13 @@ class ONOSCluster( Controller ): ...@@ -297,13 +302,13 @@ class ONOSCluster( Controller ):
297 self.net = Mininet( topo=topo, ipBase=self.ipBase, 302 self.net = Mininet( topo=topo, ipBase=self.ipBase,
298 host=ONOSNode, switch=LinuxBridge, 303 host=ONOSNode, switch=LinuxBridge,
299 controller=None ) 304 controller=None )
300 - self.net.addNAT().configDefault() 305 + if nat:
306 + self.net.addNAT( nat ).configDefault()
301 updateNodeIPs( self.env, self.nodes() ) 307 updateNodeIPs( self.env, self.nodes() )
302 self._remoteControllers = [] 308 self._remoteControllers = []
303 309
304 def start( self ): 310 def start( self ):
305 "Start up ONOS cluster" 311 "Start up ONOS cluster"
306 - killprocs( 'karaf.jar' )
307 info( '*** ONOS_APPS = %s\n' % ONOS_APPS ) 312 info( '*** ONOS_APPS = %s\n' % ONOS_APPS )
308 self.net.start() 313 self.net.start()
309 for node in self.nodes(): 314 for node in self.nodes():
...@@ -402,6 +407,10 @@ class ONOSCLI( OldCLI ): ...@@ -402,6 +407,10 @@ class ONOSCLI( OldCLI ):
402 net = MininetFacade( net, cnet=c0.net ) 407 net = MininetFacade( net, cnet=c0.net )
403 OldCLI.__init__( self, net, **kwargs ) 408 OldCLI.__init__( self, net, **kwargs )
404 409
410 + def onos1( self ):
411 + "Helper function: return default ONOS node"
412 + return self.mn.controllers[ 0 ].net.hosts[ 0 ]
413 +
405 def do_onos( self, line ): 414 def do_onos( self, line ):
406 "Send command to ONOS CLI" 415 "Send command to ONOS CLI"
407 c0 = self.mn.controllers[ 0 ] 416 c0 = self.mn.controllers[ 0 ]
...@@ -409,7 +418,10 @@ class ONOSCLI( OldCLI ): ...@@ -409,7 +418,10 @@ class ONOSCLI( OldCLI ):
409 # cmdLoop strips off command name 'onos' 418 # cmdLoop strips off command name 'onos'
410 if line.startswith( ':' ): 419 if line.startswith( ':' ):
411 line = 'onos' + line 420 line = 'onos' + line
412 - cmd = 'onos1 client -h onos1 ' + line 421 + onos1 = self.onos1().name
422 + if line:
423 + line = '"%s"' % line
424 + cmd = '%s client -h %s %s' % ( onos1, onos1, line )
413 quietRun( 'stty -echo' ) 425 quietRun( 'stty -echo' )
414 self.default( cmd ) 426 self.default( cmd )
415 quietRun( 'stty echo' ) 427 quietRun( 'stty echo' )
...@@ -423,8 +435,8 @@ class ONOSCLI( OldCLI ): ...@@ -423,8 +435,8 @@ class ONOSCLI( OldCLI ):
423 self.do_onos( ':balance-masters' ) 435 self.do_onos( ':balance-masters' )
424 436
425 def do_log( self, line ): 437 def do_log( self, line ):
426 - "Run tail -f /tmp/onos1/log on onos1; press control-C to stop" 438 + "Run tail -f /tmp/onos1/log; press control-C to stop"
427 - self.default( 'onos1 tail -f /tmp/onos1/log' ) 439 + self.default( self.onos1().name, 'tail -f /tmp/%s/log' % self.onos1() )
428 440
429 441
430 ### Exports for bin/mn 442 ### Exports for bin/mn
......