From ece717a79ff5dde22e5b28c0b691d0917af86556 Mon Sep 17 00:00:00 2001 From: Anders Ingemann Date: Sun, 30 Nov 2014 15:54:31 +0100 Subject: [PATCH] Fix bugs when picking the build server --- bootstrapvz/remote/build_servers.py | 13 +++++++++---- bootstrapvz/remote/main.py | 16 +++++++++++----- tests/integration/__init__.py | 4 ++++ tests/integration/tools/__init__.py | 3 +-- tests/integration/virtualbox_tests.py | 7 ++++--- 5 files changed, 29 insertions(+), 14 deletions(-) diff --git a/bootstrapvz/remote/build_servers.py b/bootstrapvz/remote/build_servers.py index 64ce968..e9e9b6b 100644 --- a/bootstrapvz/remote/build_servers.py +++ b/bootstrapvz/remote/build_servers.py @@ -3,7 +3,7 @@ import logging log = logging.getLogger(__name__) -def pick_build_server(build_servers, preferences, manifest): +def pick_build_server(build_servers, manifest, preferences={}): # Validate the build servers list from bootstrapvz.common.tools import load_data import os.path @@ -11,10 +11,10 @@ def pick_build_server(build_servers, preferences, manifest): import jsonschema jsonschema.validate(build_servers, schema) - if manifest.provider['name'] == 'ec2': - must_bootstrap = 'ec2-' + manifest.volume['backing'] + if manifest['provider']['name'] == 'ec2': + must_bootstrap = 'ec2-' + manifest['volume']['backing'] else: - must_bootstrap = manifest.provider['name'] + must_bootstrap = manifest['provider']['name'] def matches(name, settings): if preferences.get('name', name) != name: @@ -43,6 +43,11 @@ class BuildServer(object): self.can_bootstrap = settings['can_bootstrap'] self.release = settings.get('release', None) + def apply_build_settings(self, manifest_data): + if manifest_data['provider']['name'] == 'virtualbox' and 'guest_additions' in manifest_data['provider']: + manifest_data['provider']['guest_additions'] = self.build_settings['guest_additions'] + return manifest_data + class LocalBuildServer(BuildServer): pass diff --git a/bootstrapvz/remote/main.py b/bootstrapvz/remote/main.py index 88019cd..2f52803 100644 --- a/bootstrapvz/remote/main.py +++ b/bootstrapvz/remote/main.py @@ -8,12 +8,11 @@ def main(): # 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 + # load the manifest data, we might want to modify it later on + manifest_data = load_data(opts['MANIFEST']) # load the build servers file - from bootstrapvz.common.tools import load_data build_servers = load_data(opts['--servers']) # Pick a build server from build_servers import pick_build_server @@ -22,7 +21,14 @@ def main(): preferences['name'] = opts['--name'] if opts['--release'] is not None: preferences['release'] = opts['--release'] - build_server = pick_build_server(build_servers, preferences, manifest) + build_server = pick_build_server(build_servers, manifest_data, preferences) + + # Apply the build server settings to the manifest (e.g. the virtualbox guest additions path) + manifest_data = build_server.apply_build_settings(manifest_data) + + # Load the manifest + from bootstrapvz.base.manifest import Manifest + manifest = Manifest(path=opts['MANIFEST'], data=manifest_data) # Set up logging from bootstrapvz.base.main import setup_loggers diff --git a/tests/integration/__init__.py b/tests/integration/__init__.py index e69de29..5e6a71c 100644 --- a/tests/integration/__init__.py +++ b/tests/integration/__init__.py @@ -0,0 +1,4 @@ +from bootstrapvz.common.tools import load_data + +# tox ensures that the cwd is the project root +build_servers = load_data('build-servers.yml') diff --git a/tests/integration/tools/__init__.py b/tests/integration/tools/__init__.py index e2009c0..32f1d50 100644 --- a/tests/integration/tools/__init__.py +++ b/tests/integration/tools/__init__.py @@ -1,5 +1,3 @@ -from bootstrapvz.remote.build_servers import LocalBuildServer - # Register deserialization handlers for objects # that will pass between server and client from bootstrapvz.remote import register_deserialization_handlers @@ -26,6 +24,7 @@ def merge_dicts(*args): def bootstrap(manifest, build_server): + from bootstrapvz.remote.build_servers import LocalBuildServer if isinstance(build_server, LocalBuildServer): from bootstrapvz.base.main import run bootstrap_info = run(manifest) diff --git a/tests/integration/virtualbox_tests.py b/tests/integration/virtualbox_tests.py index cd357da..adcc190 100644 --- a/tests/integration/virtualbox_tests.py +++ b/tests/integration/virtualbox_tests.py @@ -1,6 +1,8 @@ import tools from manifests import partials from bootstrapvz.base.manifest import Manifest +from bootstrapvz.remote.build_servers import pick_build_server +from . import build_servers def test_virtualbox_unpartitioned_extlinux(): @@ -18,9 +20,8 @@ volume: manifest_data = tools.merge_dicts(partials['base'], partials['stable64'], partials['unpartitioned'], manifest_data) - manifest = Manifest(data=manifest_data) - build_server = tools.pick_build_server(manifest) - manifest_data['provider']['guest_additions'] = build_server.build_settings['guest_additions'] + build_server = pick_build_server(build_servers, manifest_data) + manifest_data = build_server.apply_build_settings(manifest_data) manifest = Manifest(data=manifest_data) bootstrap_info = tools.bootstrap(manifest, build_server)