mirror of
https://github.com/kevingruesser/bootstrap-vz.git
synced 2025-08-22 09:50:37 +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
|
||||
|
||||
if __name__ == '__main__':
|
||||
from bootstrapvz.base.remote import main
|
||||
from bootstrapvz.base.remote.remote import 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():
|
||||
from Pyro4.util import SerializerBase
|
||||
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
|
||||
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
|
||||
|
|
Loading…
Add table
Reference in a new issue