bootstrap-vz/bootstrapvz/remote/build_servers/__init__.py
2016-09-12 19:11:20 +02:00

46 lines
1.5 KiB
Python

def pick_build_server(build_servers, manifest, preferences={}):
# Validate the build servers list
from bootstrapvz.common.tools import load_data, rel_path
schema = load_data(rel_path(__file__, 'build-servers-schema.yml'))
import jsonschema
jsonschema.validate(build_servers, schema)
if manifest['provider']['name'] == 'ec2':
must_bootstrap = 'ec2-' + manifest['volume']['backing']
else:
must_bootstrap = manifest['provider']['name']
def matches(name, settings):
if preferences.get('name', name) != name:
return False
if preferences.get('release', settings['release']) != settings['release']:
return False
if must_bootstrap not in settings['can_bootstrap']:
return False
return True
for name, settings in build_servers.iteritems():
if not matches(name, settings):
continue
if settings['type'] == 'local':
from local import LocalBuildServer
return LocalBuildServer(name, settings)
else:
from remote import RemoteBuildServer
return RemoteBuildServer(name, settings)
raise Exception('Unable to find a build server that matches your preferences.')
def getNPorts(n, port_range=(1024, 65535)):
import random
ports = []
for i in range(0, n):
while True:
port = random.randrange(*port_range)
if port not in ports:
ports.append(port)
break
return ports