From d88d73c7f13ba98a2069d72db19e915faf708191 Mon Sep 17 00:00:00 2001 From: Anders Ingemann Date: Tue, 25 Nov 2014 20:43:04 +0100 Subject: [PATCH] Allow listening on different ports on remote and local --- bootstrapvz/base/remote/callback.py | 7 +++++-- bootstrapvz/base/remote/remote.py | 3 ++- bootstrapvz/base/remote/server.py | 6 +++--- bootstrapvz/base/remote/ssh_rpc_manager.py | 18 ++++++++++++------ 4 files changed, 22 insertions(+), 12 deletions(-) diff --git a/bootstrapvz/base/remote/callback.py b/bootstrapvz/base/remote/callback.py index 865081d..b494e8f 100644 --- a/bootstrapvz/base/remote/callback.py +++ b/bootstrapvz/base/remote/callback.py @@ -2,12 +2,15 @@ class CallbackServer(object): - def __init__(self, listen_port): + def __init__(self, listen_port, remote_port): self.listen_port = listen_port + self.remote_port = remote_port def start(self, log_server): import Pyro4 - self.daemon = Pyro4.Daemon('localhost', port=self.listen_port, unixsocket=None) + self.daemon = Pyro4.Daemon(host='localhost', port=self.listen_port, + nathost='localhost', natport=self.remote_port, + unixsocket=None) self.daemon.register(log_server) def serve(): diff --git a/bootstrapvz/base/remote/remote.py b/bootstrapvz/base/remote/remote.py index dc1cf6e..1f1e96c 100644 --- a/bootstrapvz/base/remote/remote.py +++ b/bootstrapvz/base/remote/remote.py @@ -27,7 +27,8 @@ def main(): manager.start() server = manager.rpc_server from callback import CallbackServer - callback_server = CallbackServer(manager.local_callback_port) + callback_server = CallbackServer(listen_port=manager.local_callback_port, + remote_port=manager.remote_callback_port) from bootstrapvz.base.log import LogServer log_server = LogServer() try: diff --git a/bootstrapvz/base/remote/server.py b/bootstrapvz/base/remote/server.py index fc638bc..483bbb4 100644 --- a/bootstrapvz/base/remote/server.py +++ b/bootstrapvz/base/remote/server.py @@ -5,7 +5,7 @@ def main(): from . import register_deserialization_handlers register_deserialization_handlers() log_forwarder = setup_logging() - server = Server(opts, log_forwarder) + server = Server(opts['--listen'], log_forwarder) server.start() @@ -34,10 +34,10 @@ Options: class Server(object): - def __init__(self, opts, log_forwarder): + def __init__(self, listen_port, log_forwarder): self.stop_serving = False self.log_forwarder = log_forwarder - self.listen_port = opts['--listen'] + self.listen_port = listen_port def start(self): import Pyro4 diff --git a/bootstrapvz/base/remote/ssh_rpc_manager.py b/bootstrapvz/base/remote/ssh_rpc_manager.py index d9521cb..bb33a9b 100644 --- a/bootstrapvz/base/remote/ssh_rpc_manager.py +++ b/bootstrapvz/base/remote/ssh_rpc_manager.py @@ -9,13 +9,19 @@ class SSHRPCManager(object): def __init__(self, settings): self.settings = settings + [self.local_server_port, self.local_callback_port] = self.getNPorts(2) + [self.remote_server_port, self.remote_callback_port] = self.getNPorts(2) + + def getNPorts(self, n, port_range=(1024, 65535)): import random - self.local_server_port = random.randrange(1024, 65535) - self.local_callback_port = random.randrange(1024, 65535) - # self.remote_server_port = random.randrange(1024, 65535) - # self.remote_callback_port = random.randrange(1024, 65535) - self.remote_server_port = self.local_server_port - self.remote_callback_port = self.local_callback_port + ports = [] + for i in range(0, n): + while True: + port = random.randrange(*port_range) + if port not in ports: + ports.append(port) + break + return ports def start(self): log.debug('Opening SSH connection')