Little refactor

This commit is contained in:
Anders Ingemann 2014-11-25 20:14:56 +01:00
parent 3542406b91
commit ed222d579f
4 changed files with 98 additions and 99 deletions

View file

@ -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()

View file

@ -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=<path> SERVER MANIFEST
Options:
--servers <path> Path to list of build servers
--log <path> Log to given directory [default: /var/log/bootstrap-vz]
If <path> 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)

View file

@ -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=<path> SERVER MANIFEST
Options:
--servers <path> Path to list of build servers
--log <path> Log to given directory [default: /var/log/bootstrap-vz]
If <path> 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)

View file

@ -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