standardize on localhost for local server's name

This commit is contained in:
cody burkard
2014-11-07 02:32:42 -08:00
parent 820c3be7df
commit 93fdb69ee3
+18 -21
View File
@@ -112,7 +112,7 @@ class RemoteMixin( object ):
'-o', 'BatchMode=yes', '-o', 'BatchMode=yes',
'-o', 'ForwardAgent=yes', '-tt' ] '-o', 'ForwardAgent=yes', '-tt' ]
def __init__( self, name, server=None, user=None, serverIP=None, def __init__( self, name, server='localhost', user=None, serverIP=None,
controlPath='/tmp/mn-%r@%h:%p', splitInit=False, **kwargs): controlPath='/tmp/mn-%r@%h:%p', splitInit=False, **kwargs):
"""Instantiate a remote node """Instantiate a remote node
name: name of remote node name: name of remote node
@@ -122,18 +122,18 @@ class RemoteMixin( object ):
splitInit: split initialization? splitInit: split initialization?
**kwargs: see Node()""" **kwargs: see Node()"""
# We connect to servers by IP address # We connect to servers by IP address
if server == 'localhost': self.server = server if server else 'localhost'
server = None self.serverIP = serverIP if serverIP else self.findServerIP( self.server )
self.server = server
self.serverIP = serverIP if serverIP else self.findServerIP( server )
self.user = user if user else self.findUser() self.user = user if user else self.findUser()
if self.user and self.server: if self.user and self.server != 'localhost':
self.dest = '%s@%s' % ( self.user, self.serverIP ) self.dest = '%s@%s' % ( self.user, self.serverIP )
self.isRemote = True
else: else:
self.isRemote = False
self.dest = None self.dest = None
self.controlPath = controlPath self.controlPath = controlPath
self.sshcmd = [] self.sshcmd = []
if self.dest: if hasattr( self, 'server' ) and self.isRemote:
self.sshcmd = [ 'sudo', '-E', '-u', self.user ] + self.sshbase self.sshcmd = [ 'sudo', '-E', '-u', self.user ] + self.sshbase
if self.controlPath: if self.controlPath:
self.sshcmd += [ '-o', 'ControlPath=' + self.controlPath, self.sshcmd += [ '-o', 'ControlPath=' + self.controlPath,
@@ -160,15 +160,9 @@ class RemoteMixin( object ):
_ipMatchRegex = re.compile( r'\d+\.\d+\.\d+\.\d+' ) _ipMatchRegex = re.compile( r'\d+\.\d+\.\d+\.\d+' )
@classmethod @classmethod
def findServerIP( cls, server, intf='eth0' ): def findServerIP( cls, server ):
"Return our server's IP address" "Return our server's IP address"
# Check for this server
if not server:
output = quietRun( 'ifconfig %s' % intf )
# Otherwise, handle remote server
else:
# First, check for an IP address # First, check for an IP address
if server:
ipmatch = cls._ipMatchRegex.findall( server ) ipmatch = cls._ipMatchRegex.findall( server )
if ipmatch: if ipmatch:
return ipmatch[ 0 ] return ipmatch[ 0 ]
@@ -181,7 +175,7 @@ class RemoteMixin( object ):
# Command support via shell process in namespace # Command support via shell process in namespace
def startShell( self, *args, **kwargs ): def startShell( self, *args, **kwargs ):
"Start a shell process for running commands" "Start a shell process for running commands"
if self.dest: if hasattr( self, 'server' ) and self.isRemote:
kwargs.update( mnopts='-c' ) kwargs.update( mnopts='-c' )
super( RemoteMixin, self ).startShell( *args, **kwargs ) super( RemoteMixin, self ).startShell( *args, **kwargs )
if self.splitInit: if self.splitInit:
@@ -231,7 +225,7 @@ class RemoteMixin( object ):
returns: Popen() object""" returns: Popen() object"""
if type( cmd ) is str: if type( cmd ) is str:
cmd = cmd.split() cmd = cmd.split()
if self.dest: if hasattr( self, 'server' ) and self.isRemote:
if sudo: if sudo:
cmd = [ 'sudo', '-E' ] + cmd cmd = [ 'sudo', '-E' ] + cmd
if tt: if tt:
@@ -312,9 +306,9 @@ class RemoteLink( Link ):
(override this method [and possibly delete()] (override this method [and possibly delete()]
to change link type)""" to change link type)"""
node1, node2 = self.node1, self.node2 node1, node2 = self.node1, self.node2
server1 = getattr( node1, 'server', None ) server1 = getattr( node1, 'server', 'localhost' )
server2 = getattr( node2, 'server', None ) server2 = getattr( node2, 'server', 'localhost' )
if not server1 and not server2: if server1 == 'localhost' and server2 == 'localhost':
# Local link # Local link
return makeIntfPair( intfname1, intfname2, addr1, addr2 ) return makeIntfPair( intfname1, intfname2, addr1, addr2 )
elif server1 == server2: elif server1 == server2:
@@ -596,8 +590,8 @@ class MininetCluster( Mininet ):
'link': RemoteLink, 'link': RemoteLink,
'precheck': True } 'precheck': True }
params.update( kwargs ) params.update( kwargs )
servers = params.pop( 'servers', [ None ] ) servers = params.pop( 'servers', [ 'localhost' ] )
servers = [ s if s != 'localhost' else None for s in servers ] servers = [ s if s else 'localhost' for s in servers ]
self.servers = servers self.servers = servers
self.serverIP = params.pop( 'serverIP', {} ) self.serverIP = params.pop( 'serverIP', {} )
if not self.serverIP: if not self.serverIP:
@@ -672,6 +666,9 @@ class MininetCluster( Mininet ):
links=self.topo.links() ) links=self.topo.links() )
for node in nodes: for node in nodes:
config = self.topo.node_info[ node ] config = self.topo.node_info[ node ]
# keep local server name consistent accross nodes
if 'server' in config.keys() and config[ 'server' ] == None:
config[ 'server' ] = 'localhost'
server = config.setdefault( 'server', placer.place( node ) ) server = config.setdefault( 'server', placer.place( node ) )
if server: if server:
config.setdefault( 'serverIP', self.serverIP[ server ] ) config.setdefault( 'serverIP', self.serverIP[ server ] )