blob: 940e87a262c10f8c86bc6fc8668e1cb8be29652a [file] [log] [blame]
from twisted.python import log
from twisted.internet import defer
from twisted.application import service
from slavealloc.logic import allocate, buildbottac
from slavealloc import exceptions
class AllocatorService(service.Service):
def startService(self):
log.msg("starting AllocatorService")
service.Service.startService(self)
# doesn't do anything for now..
def stopService(self):
log.msg("stopping AllocatorService")
return service.Service.stopService(self)
def getBuildbotTac(self, slave_name):
# slave allocation is *synchronous* and happens in the main thread.
# For now, this is a good thing - it allows us to ensure that multiple
# slaves are not simultaneously reassigned. This should be revisited
# later.
d = defer.succeed(None)
def gettac(_):
try:
allocation = allocate.Allocation(slave_name)
except exceptions.NoAllocationError:
log.msg("rejecting slave '%s'" % slave_name)
raise
tac = buildbottac.make_buildbot_tac(allocation)
allocation.commit()
if allocation.enabled:
log.msg("allocated '%s' to '%s' (%s:%s)" % (slave_name,
allocation.master_nickname,
allocation.master_fqdn,
allocation.master_pb_port))
else:
log.msg(
"slave '%s' is disabled; no allocation made" % slave_name)
return tac
d.addCallback(gettac)
return d