From ed222d579f0c386f7aa4c2bb7205812a3ccdad70 Mon Sep 17 00:00:00 2001 From: Anders Ingemann Date: Tue, 25 Nov 2014 20:14:56 +0100 Subject: [PATCH] Little refactor --- bootstrap-vz-remote | 2 +- bootstrapvz/base/remote/__init__.py | 66 ----------------------------- bootstrapvz/base/remote/remote.py | 66 +++++++++++++++++++++++++++++ bootstrapvz/base/remote/server.py | 63 ++++++++++++++------------- 4 files changed, 98 insertions(+), 99 deletions(-) create mode 100644 bootstrapvz/base/remote/remote.py diff --git a/bootstrap-vz-remote b/bootstrap-vz-remote index 81fa633..b5050b8 100755 --- a/bootstrap-vz-remote +++ b/bootstrap-vz-remote @@ -1,5 +1,5 @@ #!/usr/bin/env python if __name__ == '__main__': - from bootstrapvz.base.remote import main + from bootstrapvz.base.remote.remote import main main() diff --git a/bootstrapvz/base/remote/__init__.py b/bootstrapvz/base/remote/__init__.py index 52e01c5..8e604e5 100644 --- a/bootstrapvz/base/remote/__init__.py +++ b/bootstrapvz/base/remote/__init__.py @@ -2,72 +2,6 @@ """ -def main(): - """Main function for invoking the bootstrap process remotely - """ - # Get the commandline arguments - opts = get_opts() - - # Load the manifest - from bootstrapvz.base.manifest import Manifest - manifest = Manifest(path=opts['MANIFEST']) - - from bootstrapvz.common.tools import load_data - build_servers = load_data(opts['--servers']) - - # Set up logging - from bootstrapvz.base.main import setup_loggers - setup_loggers(opts) - - register_deserialization_handlers() - - bootstrap_info = None - - from ssh_rpc_manager import SSHRPCManager - manager = SSHRPCManager(build_servers[opts['SERVER']]) - try: - manager.start() - server = manager.rpc_server - from callback import CallbackServer - callback_server = CallbackServer(manager.local_callback_port) - from bootstrapvz.base.log import LogServer - log_server = LogServer() - try: - callback_server.start(log_server) - server.set_log_server(log_server) - - # Everything has been set up, begin the bootstrapping process - bootstrap_info = server.run(manifest, - debug=opts['--debug'], - pause_on_error=False, - dry_run=opts['--dry-run']) - finally: - callback_server.stop() - finally: - manager.stop() - return bootstrap_info - - -def get_opts(): - """Creates an argument parser and returns the arguments it has parsed - """ - from docopt import docopt - usage = """bootstrap-vz-remote - -Usage: bootstrap-vz-remote [options] --servers= SERVER MANIFEST - -Options: - --servers Path to list of build servers - --log Log to given directory [default: /var/log/bootstrap-vz] - If is `-' file logging will be disabled. - --pause-on-error Pause on error, before rollback - --dry-run Don't actually run the tasks - --debug Print debugging information - -h, --help show this help - """ - return docopt(usage) - - def register_deserialization_handlers(): from Pyro4.util import SerializerBase SerializerBase.register_dict_to_class('bootstrapvz.base.manifest.Manifest', deserialize_manifest) diff --git a/bootstrapvz/base/remote/remote.py b/bootstrapvz/base/remote/remote.py new file mode 100644 index 0000000..dc1cf6e --- /dev/null +++ b/bootstrapvz/base/remote/remote.py @@ -0,0 +1,66 @@ + +def main(): + """Main function for invoking the bootstrap process remotely + """ + # Get the commandline arguments + opts = get_opts() + + # Load the manifest + from bootstrapvz.base.manifest import Manifest + manifest = Manifest(path=opts['MANIFEST']) + + from bootstrapvz.common.tools import load_data + build_servers = load_data(opts['--servers']) + + # Set up logging + from bootstrapvz.base.main import setup_loggers + setup_loggers(opts) + + from . import register_deserialization_handlers + register_deserialization_handlers() + + bootstrap_info = None + + from ssh_rpc_manager import SSHRPCManager + manager = SSHRPCManager(build_servers[opts['SERVER']]) + try: + manager.start() + server = manager.rpc_server + from callback import CallbackServer + callback_server = CallbackServer(manager.local_callback_port) + from bootstrapvz.base.log import LogServer + log_server = LogServer() + try: + callback_server.start(log_server) + server.set_log_server(log_server) + + # Everything has been set up, begin the bootstrapping process + bootstrap_info = server.run(manifest, + debug=opts['--debug'], + pause_on_error=False, + dry_run=opts['--dry-run']) + finally: + callback_server.stop() + finally: + manager.stop() + return bootstrap_info + + +def get_opts(): + """Creates an argument parser and returns the arguments it has parsed + """ + from docopt import docopt + usage = """bootstrap-vz-remote + +Usage: bootstrap-vz-remote [options] --servers= SERVER MANIFEST + +Options: + --servers Path to list of build servers + --log Log to given directory [default: /var/log/bootstrap-vz] + If is `-' file logging will be disabled. + --pause-on-error Pause on error, before rollback + --dry-run Don't actually run the tasks + --debug Print debugging information + -h, --help show this help + """ + return docopt(usage) diff --git a/bootstrapvz/base/remote/server.py b/bootstrapvz/base/remote/server.py index e9325a8..fc638bc 100644 --- a/bootstrapvz/base/remote/server.py +++ b/bootstrapvz/base/remote/server.py @@ -5,7 +5,8 @@ def main(): from . import register_deserialization_handlers register_deserialization_handlers() log_forwarder = setup_logging() - serve(opts, log_forwarder) + server = Server(opts, log_forwarder) + server.start() def setup_logging(): @@ -13,42 +14,11 @@ def setup_logging(): from bootstrapvz.base.log import LogForwarder log_forwarder = LogForwarder() root = logging.getLogger() - from bootstrapvz.base import log - file_handler = log.get_file_handler(path='/var/log/bootstrap-vz/remote.log', debug=True) - root.addHandler(file_handler) root.addHandler(log_forwarder) root.setLevel(logging.NOTSET) return log_forwarder -def serve(opts, log_forwarder): - class Server(object): - - def __init__(self): - self.stop_serving = False - - def run(self, *args, **kwargs): - from bootstrapvz.base.main import run - return run(*args, **kwargs) - - def set_log_server(self, server): - return log_forwarder.set_server(server) - - def ping(self): - return 'pong' - - def stop(self): - self.stop_serving = True - - import Pyro4 - Pyro4.config.COMMTIMEOUT = 0.5 - daemon = Pyro4.Daemon('localhost', port=int(opts['--listen']), unixsocket=None) - - server = Server() - daemon.register(server, 'server') - daemon.requestLoop(loopCondition=lambda: not server.stop_serving) - - def getopts(): from docopt import docopt usage = """bootstrap-vz-server @@ -60,3 +30,32 @@ Options: -h, --help show this help """ return docopt(usage) + + +class Server(object): + + def __init__(self, opts, log_forwarder): + self.stop_serving = False + self.log_forwarder = log_forwarder + self.listen_port = opts['--listen'] + + def start(self): + import Pyro4 + Pyro4.config.COMMTIMEOUT = 0.5 + daemon = Pyro4.Daemon('localhost', port=int(self.listen_port), unixsocket=None) + + daemon.register(self, 'server') + daemon.requestLoop(loopCondition=lambda: not self.stop_serving) + + def run(self, *args, **kwargs): + from bootstrapvz.base.main import run + return run(*args, **kwargs) + + def set_log_server(self, server): + return self.log_forwarder.set_server(server) + + def ping(self): + return 'pong' + + def stop(self): + self.stop_serving = True