Fix bugs when picking the build server

This commit is contained in:
Anders Ingemann 2014-11-30 15:54:31 +01:00
parent cee05e3fd0
commit ece717a79f
5 changed files with 29 additions and 14 deletions

View file

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

View file

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

View file

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

View file

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

View file

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