def boot_manifest(manifest_data, boot_vars={}): from bootstrapvz.common.tools import load_data build_servers = load_data('build-servers.yml') from bootstrapvz.remote.build_servers import pick_build_server build_server = pick_build_server(build_servers, manifest_data) manifest_data = build_server.apply_build_settings(manifest_data) from bootstrapvz.base.manifest import Manifest manifest = Manifest(data=manifest_data) import importlib provider_module = importlib.import_module('tests.system.providers.' + manifest.provider['name']) prepare_bootstrap = getattr(provider_module, 'prepare_bootstrap', noop) with prepare_bootstrap(manifest, build_server): bootstrap_info = None log.info('Connecting to build server') with build_server.connect() as connection: log.info('Building manifest') bootstrap_info = connection.run(manifest) log.info('Creating and booting instance') with provider_module.boot_image(manifest, build_server, bootstrap_info, **boot_vars) as instance: yield instance
def validate_manifest(path): manifest = Manifest(path=path) assert_true(manifest.data) assert_true(manifest.data['name']) assert_true(manifest.data['provider']) assert_true(manifest.data['bootstrapper']) assert_true(manifest.data['volume']) assert_true(manifest.data['system'])
def validate_manifests(path): """ manifests_tests - validate_manifests. Actually creates the manifest for a given path and checks that all the data values have successfully been created. """ manifest = Manifest(path) assert_true(manifest.data) assert_true(manifest.data['provider']) assert_true(manifest.data['bootstrapper']) assert_true(manifest.data['image']) assert_true(manifest.data['volume']) assert_true(manifest.data['system'])
def main(): """Main function for invoking the bootstrap process remotely """ # Get the commandline arguments opts = get_opts() 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 build_servers = load_data(opts['--servers']) # Pick a build server from build_servers import pick_build_server 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) # 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 setup_loggers(opts) # Register deserialization handlers for objects # that will pass between server and client from . import register_deserialization_handlers register_deserialization_handlers() # 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'])
def dry_run(path): manifest = Manifest(path=path) run(manifest, dry_run=True)