mirror of
https://github.com/kevingruesser/bootstrap-vz.git
synced 2025-08-24 15:36:27 +00:00
Little refactor
This commit is contained in:
parent
3542406b91
commit
ed222d579f
4 changed files with 98 additions and 99 deletions
|
@ -1,5 +1,5 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
from bootstrapvz.base.remote import main
|
from bootstrapvz.base.remote.remote import main
|
||||||
main()
|
main()
|
||||||
|
|
|
@ -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():
|
def register_deserialization_handlers():
|
||||||
from Pyro4.util import SerializerBase
|
from Pyro4.util import SerializerBase
|
||||||
SerializerBase.register_dict_to_class('bootstrapvz.base.manifest.Manifest', deserialize_manifest)
|
SerializerBase.register_dict_to_class('bootstrapvz.base.manifest.Manifest', deserialize_manifest)
|
||||||
|
|
66
bootstrapvz/base/remote/remote.py
Normal file
66
bootstrapvz/base/remote/remote.py
Normal 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)
|
|
@ -5,7 +5,8 @@ def main():
|
||||||
from . import register_deserialization_handlers
|
from . import register_deserialization_handlers
|
||||||
register_deserialization_handlers()
|
register_deserialization_handlers()
|
||||||
log_forwarder = setup_logging()
|
log_forwarder = setup_logging()
|
||||||
serve(opts, log_forwarder)
|
server = Server(opts, log_forwarder)
|
||||||
|
server.start()
|
||||||
|
|
||||||
|
|
||||||
def setup_logging():
|
def setup_logging():
|
||||||
|
@ -13,42 +14,11 @@ def setup_logging():
|
||||||
from bootstrapvz.base.log import LogForwarder
|
from bootstrapvz.base.log import LogForwarder
|
||||||
log_forwarder = LogForwarder()
|
log_forwarder = LogForwarder()
|
||||||
root = logging.getLogger()
|
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.addHandler(log_forwarder)
|
||||||
root.setLevel(logging.NOTSET)
|
root.setLevel(logging.NOTSET)
|
||||||
return log_forwarder
|
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():
|
def getopts():
|
||||||
from docopt import docopt
|
from docopt import docopt
|
||||||
usage = """bootstrap-vz-server
|
usage = """bootstrap-vz-server
|
||||||
|
@ -60,3 +30,32 @@ Options:
|
||||||
-h, --help show this help
|
-h, --help show this help
|
||||||
"""
|
"""
|
||||||
return docopt(usage)
|
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
|
||||||
|
|
Loading…
Add table
Reference in a new issue