standardize on localhost for local server's name
This commit is contained in:
+24
-27
@@ -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,20 +160,14 @@ 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
|
# First, check for an IP address
|
||||||
if not server:
|
ipmatch = cls._ipMatchRegex.findall( server )
|
||||||
output = quietRun( 'ifconfig %s' % intf )
|
if ipmatch:
|
||||||
# Otherwise, handle remote server
|
return ipmatch[ 0 ]
|
||||||
else:
|
# Otherwise, look up remote server
|
||||||
# First, check for an IP address
|
output = quietRun( 'getent ahostsv4 %s' % server )
|
||||||
if server:
|
|
||||||
ipmatch = cls._ipMatchRegex.findall( server )
|
|
||||||
if ipmatch:
|
|
||||||
return ipmatch[ 0 ]
|
|
||||||
# Otherwise, look up remote server
|
|
||||||
output = quietRun( 'getent ahostsv4 %s' % server )
|
|
||||||
ips = cls._ipMatchRegex.findall( output )
|
ips = cls._ipMatchRegex.findall( output )
|
||||||
ip = ips[ 0 ] if ips else None
|
ip = ips[ 0 ] if ips else None
|
||||||
return ip
|
return ip
|
||||||
@@ -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 ] )
|
||||||
|
|||||||
Reference in New Issue
Block a user