2014-11-25 21:12:37 +01:00
|
|
|
"""Main module containing all the setup necessary for running the remote bootstrapping process
|
|
|
|
"""
|
|
|
|
|
2014-11-25 20:14:56 +01:00
|
|
|
|
|
|
|
def main():
|
2016-06-04 11:35:59 +02:00
|
|
|
"""Main function for invoking the bootstrap process remotely
|
|
|
|
"""
|
|
|
|
# Get the commandline arguments
|
|
|
|
opts = get_opts()
|
2014-11-25 20:14:56 +01:00
|
|
|
|
2016-06-04 11:35:59 +02:00
|
|
|
from bootstrapvz.common.tools import load_data
|
|
|
|
# load the manifest data, we might want to modify it later on
|
|
|
|
manifest_data = load_data(opts['MANIFEST'])
|
2014-11-25 20:14:56 +01:00
|
|
|
|
2016-06-04 11:35:59 +02:00
|
|
|
# load the build servers file
|
|
|
|
build_servers = load_data(opts['--servers'])
|
|
|
|
# Pick a build server
|
2018-02-12 04:17:53 +00:00
|
|
|
from .build_servers import pick_build_server
|
2016-06-04 11:35:59 +02:00
|
|
|
preferences = {}
|
|
|
|
if opts['--name'] is not None:
|
|
|
|
preferences['name'] = opts['--name']
|
|
|
|
if opts['--release'] is not None:
|
|
|
|
preferences['release'] = opts['--release']
|
|
|
|
build_server = pick_build_server(build_servers, manifest_data, preferences)
|
2014-11-30 15:54:31 +01:00
|
|
|
|
2016-06-04 11:35:59 +02:00
|
|
|
# Apply the build server settings to the manifest (e.g. the virtualbox guest additions path)
|
|
|
|
manifest_data = build_server.apply_build_settings(manifest_data)
|
2014-11-30 15:54:31 +01:00
|
|
|
|
2016-06-04 11:35:59 +02:00
|
|
|
# Load the manifest
|
|
|
|
from bootstrapvz.base.manifest import Manifest
|
|
|
|
manifest = Manifest(path=opts['MANIFEST'], data=manifest_data)
|
2014-11-25 20:14:56 +01:00
|
|
|
|
2016-06-04 11:35:59 +02:00
|
|
|
# Set up logging
|
|
|
|
from bootstrapvz.base.main import setup_loggers
|
|
|
|
setup_loggers(opts)
|
2014-11-25 20:14:56 +01:00
|
|
|
|
2016-06-04 11:35:59 +02:00
|
|
|
# Register deserialization handlers for objects
|
|
|
|
# that will pass between server and client
|
|
|
|
from . import register_deserialization_handlers
|
|
|
|
register_deserialization_handlers()
|
2014-11-25 20:14:56 +01:00
|
|
|
|
2016-06-04 11:35:59 +02:00
|
|
|
# Everything has been set up, connect to the server and begin the bootstrapping process
|
|
|
|
with build_server.connect() as connection:
|
|
|
|
connection.run(manifest,
|
|
|
|
debug=opts['--debug'],
|
|
|
|
dry_run=opts['--dry-run'])
|
2014-11-25 21:12:37 +01:00
|
|
|
|
|
|
|
|
|
|
|
def get_opts():
|
2016-06-04 11:35:59 +02:00
|
|
|
"""Creates an argument parser and returns the arguments it has parsed
|
|
|
|
"""
|
|
|
|
from docopt import docopt
|
|
|
|
usage = """bootstrap-vz-remote
|
2014-11-25 21:12:37 +01:00
|
|
|
|
2014-11-30 15:42:38 +01:00
|
|
|
Usage: bootstrap-vz-remote [options] --servers=<path> MANIFEST
|
2014-11-25 21:12:37 +01:00
|
|
|
|
|
|
|
Options:
|
2014-11-30 15:42:38 +01:00
|
|
|
--servers <path> Path to list of build servers
|
|
|
|
--name <name> Selects specific server from the build servers list
|
|
|
|
--release <release> Require the build server OS to be a specific release
|
|
|
|
--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
|
2014-11-30 14:13:43 +01:00
|
|
|
--color=auto|always|never
|
|
|
|
Colorize the console output [default: auto]
|
2014-11-30 15:42:38 +01:00
|
|
|
--debug Print debugging information
|
|
|
|
-h, --help show this help
|
2016-06-04 11:35:59 +02:00
|
|
|
"""
|
|
|
|
return docopt(usage)
|