mirror of
https://github.com/kevingruesser/bootstrap-vz.git
synced 2025-08-22 09:50:37 +00:00
46 lines
1.5 KiB
Python
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
|