Skip to content
Snippets Groups Projects
Commit 2013b7ae authored by lantz's avatar lantz
Browse files

Merge pull request #428 from cdburkard/patches/cluster_servers

standardize on localhost for local server's name
parents 3e1100b7 93fdb69e
No related branches found
No related tags found
No related merge requests found
...@@ -112,7 +112,7 @@ class RemoteMixin( object ): ...@@ -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 @@ def __init__( self, name, server=None, user=None, serverIP=None, ...@@ -122,18 +122,18 @@ def __init__( self, name, server=None, user=None, serverIP=None,
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 @@ def findUser(): ...@@ -160,20 +160,14 @@ def findUser():
_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 @@ def findServerIP( cls, server, intf='eth0' ): ...@@ -181,7 +175,7 @@ def findServerIP( cls, server, intf='eth0' ):
# 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 @@ def _popen( self, cmd, sudo=True, tt=True, **params): ...@@ -231,7 +225,7 @@ def _popen( self, cmd, sudo=True, tt=True, **params):
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 @@ def makeIntfPair( self, intfname1, intfname2, addr1=None, addr2=None ): ...@@ -312,9 +306,9 @@ def makeIntfPair( self, intfname1, intfname2, addr1=None, addr2=None ):
(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 @@ def __init__( self, *args, **kwargs ): ...@@ -596,8 +590,8 @@ def __init__( self, *args, **kwargs ):
'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 @@ def placeNodes( self ): ...@@ -672,6 +666,9 @@ def placeNodes( self ):
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 ] )
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment